Monday, December 18, 2023

Running effective asynchronous (async) meetings

In the remote/asynchronous world we live in, running effective asynchronous (async) meetings is becoming a popular reality. Here's what you need to know to succeed.
Photo by Christin Hume on Unsplash

Hey, good news! In the remote era, running effective asynchronous (async) meetings is possible! On this post, let's understand how to succeed, run and participate in async meetings.

What is an async meeting?

What do you understand by "async meeting"? Yes, it's essentially a meeting that happens asynchronously, where participants engage without the need for same-time communication. Its biggest benefit is asynchronous collaboration, especially in remote or distributed work environments where team members work in different locations of the globe.

Best Practices for Async Meetings

So let's review some tips on how to run effective (and productive) async meetings.

Set Clear Objectives

First, you should define the purpose and goals of the meeting. What specific outcomes or decisions does the team want to achieve?

Choose the Right Tools

Next, make sure you utilize collaboration and communication tools designed for async meetings. Popular options include Slack, Microsoft Teams, Google Meet, or dedicated async meeting platforms.

TIP: Check our previous post on async work for more information.

Schedule in Advance

Announce the async meeting well in advance to allow participants to plan their time and contribute thoughtfully.

Provide Context

Share background information, documents, and relevant context before the meeting. Make sure participants have all the necessary information to contribute effectively.

Set a Deadline

Because async meetings don't end at the same time for everyone, it's important to specify a deadline for participants to provide their input or feedback. This creates a sense of urgency and helps keep the meeting on schedule.

Agenda and Structure

Create a clear agenda that outlines the topics, questions, or tasks to be addressed during the meeting. Organize the meeting into structured sections to make it easy for participants to follow and respond to specific points.

Use Clear Communication

Write clear and concise messages or prompts. Avoid overly lengthy or ambiguous messages that could lead to misunderstandings.

Encourage Participation

Before, during and after the event, make sure that everyone understands that their input is valuable. Encourage participants to contribute their ideas, suggestions, or feedback openly.

Set Expectations

As sync meetings, async meetings have a goal. Clearly communicate the expected level of participation and the timeline for responses. Be explicit about the desired outcome for each participant, or for the team.

Follow-Up and Reminders

Another good practice is to send reminders and follow-up messages to participants as the deadline approaches. Ensure that no one forgets to contribute.

Consolidate Responses

Once all responses are collected, consolidate and summarize them into a cohesive document or message. Highlight key points, decisions, and action items.

TIP: Use GenAI to summarize the information. Why not?

Document the Meeting

Keep a record of the meeting's outcomes, decisions, and action items. Share this documentation with all participants for reference.

Decision-Making Process

If the async meeting is intended for decision-making, clearly outline the decision-making process and criteria. Use a voting system or other method to reach a consensus.

Review and Iterate

After the async meeting, evaluate its effectiveness. Gather feedback from participants and make improvements for future async meetings.

Considerations

But async meetings has its challenges too. Here are some details that organizations should consider.

Manage Overload

Be cautious about overloading participants with too many async meetings. Prioritize and schedule them judiciously to avoid burnout.

Assign Roles

Designate a facilitator or organizer responsible for managing the meeting and ensuring that participants stay on track.

Accessibility and Inclusivity

Ensure that all participants have equal access to the meeting materials and can contribute comfortably. Consider time zones and different work schedules to accommodate global teams.

Respect Time Zones

Be mindful of time zone differences when setting deadlines and sending reminders. Use tools that display multiple time zones to avoid confusion.

Conclusion

Effective async meetings can enhance collaboration, allow for thoughtful contributions, and accommodate the diverse schedules and preferences of team members in remote or distributed work settings. It's important to establish clear processes and expectations to make async meetings a valuable and efficient part of your team's workflow.

Friday, December 1, 2023

Creating Great Documentation for Remote Teams

Remote work is not only about writing code and creating PRs, but also making sure key information can be easily found

Continuing on the topic remote work and async best practices, today we will cover how to leverage documentation to effectively. 

Creating great documentation for use in remote teams is essential for ensuring that team members have access to the information and resources they need to work effectively, even when they are not physically located in the same place.

Why documentation is important

Documentation is a foundational concept for IT and software development teams. Some of the obvious benefits are: greater collaboration, knowledge sharing, problem-solving, and quality assurance while also serving as a reference for future development and maintenance efforts.

Documentation plays a crucial role in the context of information technology (IT) and software development for several reasons, as it can be used for:

  • Knowledge Transfer
  • Onboarding
  • Maintenance and Troubleshooting
  • Compliance and Auditing
  • Quality Assurance
  • Risk Mitigation
  • Collaboration
  • Scalability
  • Stakeholder Communication
  • Historical Context, and more.

Given its critical importance, let's take a look at some best practices for effective documentation commonly used by remote teams.

Documentation Best Practices for Remote Teams

Define Clear Objectives

Clearly state the purpose and objectives of the documentation. What specific information or tasks should it help remote team members accomplish?

Structure and Organization

Organize the documentation logically with a clear structure. Use headings, subheadings, and a table of contents to make it easy to navigate. Group related topics together, and use a consistent naming convention for files and sections.

Don't forget with the Basics

Begin by documenting fundamental information such as team goals, mission, vision, and core values. Provide an overview of the team's structure and members.

Include Detailed Guides

Develop detailed guides, tutorials, and how-to documents for common tasks and processes. These guides should be step-by-step and include screenshots or videos if necessary. Consider creating templates for common documents, reports, or forms to ensure consistency.

Use Visuals and Examples

Incorporate visuals, diagrams, and examples to enhance understanding. Visual aids can be particularly helpful for complex concepts or processes.

Keep It Updated

Regularly review and update the documentation to ensure its accuracy. Assign ownership of specific sections to team members responsible for the content.

Incorporate a Feedback Mechanism

Establish a feedback mechanism for team members to suggest improvements or report errors in the documentation. Act on this feedback promptly.

Facilitate Regular Trainings

Provide training to remote team members on how to use the documentation effectively. Make sure they understand how to access and navigate the documentation platform.

Don't forget Onboarding Material

Create a dedicated section for onboarding materials for new remote team members. Include information on team culture, policies, and procedures.

Promote Usage

Encourage remote team members to use the documentation as their primary source of information and guidance. Emphasize its importance in remote work.

Identify Your Audience

Determine who will be using the documentation. Remote teams often consist of a diverse group of individuals with different roles and responsibilities.

Essential Tools for Effective Project Documentation

Without supporting tools, great documentation would not be accessed effectively. So let's review essential tools to maximize your team's use and access to documentation.

Version Control

Implement version control for documentation so that team members can access previous versions if needed. This is crucial for tracking changes and maintaining a historical record.

Search and Indexing

Implement a robust search function or indexing system within your documentation platform to help team members quickly find the information they need.

Foster Collaborative Editing

Always allow team members to contribute to and edit documentation collaboratively. Encourage subject matter experts to share their knowledge.

Review Access Control

Manage access to documentation carefully. Ensure that team members have appropriate permissions to view and edit documents based on their roles and responsibilities.

Backup and Disaster Recovery

Implement a backup and disaster recovery plan to ensure that documentation remains accessible even in the event of technical issues or data loss.

Security and Privacy

Consider security and privacy when creating and sharing documentation, especially when dealing with sensitive information. Use encryption and access controls as needed. Conduct regular audits or reviews of the documentation to identify areas for improvement or expansion based on changing needs and processes.

Which tools should I use?

First and foremost, use what is allowed by your organization,  and what works for your team. Consider using collaborative tools like Google Docs, Microsoft SharePoint, Confluence, or dedicated documentation software like Notion or Markdown-based systems like GitHub.

Just don't forget to tune your security, and get everyone onboarded to access the information they need.

Conclusion

Great documentation is an essential resource for remote teams. It fosters clarity, consistency, and productivity, enabling team members to work effectively and independently regardless of their physical locations. Regularly maintaining and improving documentation is an ongoing process that contributes to the success of remote work environments.


Wednesday, November 15, 2023

How to work effectively in an asynchronous world

More and more people work remotely. Let's review essential best practices for you (and your teams) to succeed.
Photo by Avi Richards on Unsplash

Working effectively asynchronously, especially in remote or distributed teams, requires careful planning, communication, and time management. Asynchronous work means that team members are not necessarily working at the same time or in the same location.

Recommended Best Practices

When working remotely (and asynchronously), there are many details that you (and your team) should pay attention to, not to sacrifice the end goals of your project. So let's review some strategies for working effectively in an asynchronous environment.

Clear Communication

Make sure everyone in the team can communicate effectively. To be a successful async employee, clearly articulate your thoughts, expectations, and questions in emails, messages, or collaboration tools. Be concise and organized in your written communication to ensure your message is easily understood.

Use Collaboration Tools

Utilize project management and collaboration tools like Slack, Microsoft Teams, or Asana to centralize communication and track tasks. Use shared documents and cloud-based platforms (e.g., Google Workspace, Microsoft Office 365) to collaborate on files in a distributed setting.

Set Expectations

Establish clear expectations for your response times. Make it known when a response is needed and when it's acceptable to respond. Document guidelines for working asynchronously within your team, including preferred communication channels and response windows.

Structured Workflow

Define processes and workflows that allow team members to work independently and efficiently. This might include creating templates or checklists. Set deadlines and milestones to keep projects on track and ensure everyone knows their responsibilities.

Time Management

Plan your day and allocate time for specific tasks. Prioritize high-impact, strategic work and minimize time spent on low-value activities. Use time management techniques like the Pomodoro Technique or time blocking to stay focused and productive.

Provide Regular Updates

Provide updates on your progress to keep team members informed. This can be in the form of daily or weekly status reports. Share your accomplishments, challenges, and next steps so that others can easily catch up on your work.

Effective Documentation

Document decisions, discussions, and important information in a central location. This ensures that team members can refer back to information when needed. Consider creating a knowledge base or wiki for your team or organization.

Consider Time Zones

Be mindful of time zone differences when scheduling meetings or setting deadlines. Use scheduling tools that can display multiple time zones. Avoid scheduling urgent meetings during non-standard working hours for team members in different time zones.

Make Information Available

Use status indicators in communication tools to let others know when you're available for quick questions or discussions. Set boundaries for when you're not available to prevent burnout.

Collaborative Decision-Making

When making important decisions, involve all relevant team members asynchronously by sharing information and gathering feedback through written channels.

Provide Feedback and Recognition

Provide feedback and recognition to your colleagues through written praise or constructive feedback to acknowledge their efforts and contributions.

Foster Continuous Learning

Embrace continuous learning and improvement. Stay updated on new tools and best practices for asynchronous work.

Leverage a Data-Driven Approach

Analyze data on team performance, response times, and project progress to identify areas for improvement in your asynchronous workflow.

Don't forget Team Building

Organize occasional synchronous meetings or team-building activities to maintain social connections and strengthen relationships.

Conclusion

Working effectively asynchronously requires discipline, adaptability, and strong communication skills. By implementing these strategies and continuously refining your approach, you can create a productive and collaborative work environment, even when team members are not working in the same time zone or location.

Wednesday, November 1, 2023

OWASP: Your Guide to Secure Web Development

With cyber threats on the rise, more and more developers are expected to build more trustworthy applications. Learn how
Photo by Ante Hamersmit on Unsplash

Cyber threat is a trend that unfortunately will not go away any time soon. In fact, it will just keep growing. As as developers, it's our duty to build solutions that are reliable and resistant to attacks, which is a complex undertaking.

Fortunately, the OWASP project provides a lot of information on how to secure applications. It's available for free, and is created and maintained by security experts. So let's learn more about it.

What is OWASP

For starters, OWASP is an acronym for:
  • O – Open
  • W – Web 
  • A – Application
  • S – Security
  • P – Project

The Open Web Application Security Project is an online community that produces freely-available articles, methodologies, documentation, tools, and technologies in the field of web application security.

OWASP is non-profit organization community of international security researchers and experts dedicated to improving the security of software, with a especial focus on AppSec (application security).

What it offers

Contrary to what you might think, OWASP is not only about documentation. Here are some highlights of what the project offers:

  • Wide range of resources to help organizations mitigate security threats and reduce their exposure.
  • Extensive documentation on cybersecurity practices
  • Tooling to learn, test and validate different aspects of security
  • Resources that help identify and mitigate security vulnerabilities in their web applications and APIs.
Some of my favourite resources are:
  • OWASP Top Ten (ten most popular threats in AppSec)
  • OWASP Projects (extense and diverse compilation of projects and tools, as we’ll see)
  • Extensive technical documentation
  • Chapters (community for application security professionals around the world)
  • Conferences
  • Web Application Security Testing Guidelines (WSTG)
  • Education and Training
  • Industry Reports

Let's learn more about them.

When, How and Why leverage OWASP

To keep it simple, you should use OWASP whenever you are building any application (client-facing or not) that interacts with data and is used by users (in other words, for most projects deployed in production).

More importantly, you should leverage OWASP because:

  • Security and AppSec are HARD!
  • Security is a moving target
  • It offers a collection of best practices from security experts
  • It is continuously updated to cover most popular attacks in AppSec
  • Btw, did I mention that security is HARD?

Don’t implement security related features “your way”. Most likely it is not secure enough. Leverage well established patterns such as those provided by OWASP.

Flagship Projects

So let's take a look at some flagship projects.

OWASP Top Ten

One of OWASP’s most popular projects, OWASP Top 10 is a reference standard for the most critical web application security risks. The community regularly updates the list with the ten most critical (and popular) web application security risks.

Active for over 20 years, the project receives contribution from the international community of security experts and researchers. One of its benefits is to bring awareness to the most critical attacks, as well as helping developers and security professionals prioritize their efforts in securing web applications.

Here are is the top 10 attacks in 2021:

OWASP Top 10 2021. Source: OWASP

OWASP Cheat Sheet Series

Another essential resource for building secure web applications, the OWASP Cheat Sheet Series provides easily accessible practice guides for application developers and defenders to follow.

The project offers more than 80 cheat sheets and security best practice in form of guides for application developers and defenders to follow.

You should leverage it as it helps developers and security professionals prioritize their efforts in securing web application.

OWASP Dependency-Check

OWASP Dependency-Check is a Software Composition Analysis (SCA) tool suite that identifies project dependencies and checks if there are any known, publicly disclosed, vulnerabilities.

OWASP Juice Shop

OWASP Juice Shop is a very sophisticated (and insecure) web application for security trainings. Also great voluntary guinea pig for your security tools and DevSecOps pipelines!

Getting started with Juice Shop is easy! Check this GitHub page for more information.

OWASP Mobile Application Security

The OWASP Mobile Application Security project offers security standards for mobile apps and a comprehensive testing guide that covers the processes, techniques, and tools used during a mobile application security assessment.

OWASP Web Security Testing Guide

The OWASP Web Security Testing Guide project produces the premier cybersecurity testing resource for web application developers and security professionals. A PDF is available for free on from GitHub.

Some highlights of WSTG:

  • Fantastic guide to testing the security of web applications and web services.
  • Created by security professionals and dedicated volunteers
  • Framework of best practices used by penetration testers all over the world.
  • 450+ pages of AppSec!
Don't forget to download your WSTG PDF directly from GitHub.

OWASP ZAP

One of my favourite ones, OWASP ZAP is the world’s most widely used web app scanner. Free and open source. Actively maintained by a dedicated international team of volunteers. ZAP is a free alternative to the very popular (and excellent) Burp Suite.

Some of the features available on OWASP ZAP:

  • Automated Scanning
  • Manual Testing
  • Spidering and Crawling
  • Active and Passive Scanning
  • Alerts and Reporting
  • Session Management
  • Fuzzer
  • Authentication Support
  • Plug-in Support
  • WebSocket Testing
  • Automation and Integration
  • Community and Updates
  • Multi-Platform Support

OWASP Amass

The OWASP Amass tool Performs network mapping of attack surfaces and external asset discovery using open source information gathering and active reconnaissance techniques..

Conclusion

As cyber threats grow, developers should protect their applications from increasingly complex and sophisticated attacks. For that, OWASP is an essential project to know, study and use.

Hope it helps.

Tuesday, October 3, 2023

How to be a developer in the AI era

Contrary to predictions, most developers won't lose their jobs to ChatGPT. Here is why

Photo by Possessed Photography on Unsplash

The beginning of 2023 brought us a big buzz with the release of ChatGPT. Impressed with its capacity and that of LLM-based solutions (like Bard, GitHub Copilot and Google Duet AI), the community started questioning the role of developers, and if they'd soon be replaced by a coder robot.

On this post let's understand why that's not happening anytime soon, and what you need to do to survive the genai era.

Essential skills for any developer

To be a developer in the AI era, first and foremost you need strong CS skills. That means strong foundation in computer science fundamentals, systems design, databases, web applications, design patterns, and more.

With that in mind, here are essential skills you should work on to remain valuable in the marketplace.

Programming languages

Developers need to be able to write code in at least one programming language. Popular programming languages include Python, Java, JavaScript, Go, Rust or C#.

Technical Skills

For technical skills, include everything you need to do your work well. On this list you should include automation, frameworks, cloud, containerization, databases, infrastructure, security, storage, and more.

Data structures and algorithms

Developers need to have a good understanding of data structures and algorithms in order to write efficient and effective code. Make sure you understand well data structures and algorithms to build efficient solutions, compare the performance of different solutions, and more.

Problem-solving skills

Developers need to be able to identify and solve problems. This includes being able to break down complex problems into smaller, more manageable problems.

Critical thinking skills

Developers need to be able to think critically about their code and the problems they are trying to solve. This includes being able to identify and correct errors in their code.

Communication skills

Developers need to be able to communicate effectively with both technical and non-technical audiences. This includes being able to explain complex technical concepts in a clear and concise way.

Teamwork skills

Developers often work on teams to develop and maintain software. This means that they need to be able to work effectively with others, share ideas, and collaborate on projects.

Keep learning

On top of it all, make sure you understand the latest trends in your particular field (ex. web, mobile, cloud, etc).

Becoming a successful developer in the AI era

As you build the skills above, a parallel goal for you would be developing a good understanding of AI concepts and technologies. 

Here are some specific tips on how to become a successful developer in the AI era:

Learn about AI concepts and technologies

Make sure you understand fundamental AI concepts and technologies, including topics such as machine learning, deep learning, and natural language processing.

Start using AI tools

Use AI tools! That includes testing GitHub Copilot or other tools that optimize the way you work. There are so many of them, and the ecosystem is changing so rapidly that I recommend you exploring on your own.

Learn a programming language for AI development

Popular languages for AI development include Python, R, and Julia.

Build AI projects

The best way to learn AI is by doing. Try building your own AI projects, such as a chatbot, image classifier, or recommendation system. Make sure you understand them. How could they be used in your project?

Contribute to open source AI projects

Learn from other developers and gain experience working on real-world AI projects.

Stay up-to-date on the latest AI trends and developments

The field of AI is constantly evolving, so it is important to stay up-to-date on the latest trends and developments.

Growing your skills to the next level

Finally, you should never stop learning or growing your skills. With that in mind, here are some additional tips that may be helpful.

Become an expert in your chosen field

This will make you more competitive in the job market and make it easier to find high-paying jobs.

Develop your soft skills

Soft skills, such as communication, teamwork, and problem-solving, are essential for success in any field, but they are especially important in the AI era.

Network with other AI developers

This is a great way to learn new things, find job opportunities, and collaborate on projects.

Conclusion

The AI era is an exciting time to be a developer. There are many new opportunities for developers who have the skills and knowledge to build AI applications. By following the tips above, you can prepare yourself for a successful career as an AI developer.

Monday, September 18, 2023

Why Java still matters

With the release of Java 21, the conversation on the relevance of the venerable programming language restarted. But a more important question remains, does Java still matter?

Photo by Mike Kenneally on Unsplash

What announcement would you like to see in Java 21 that would make you excited? Well, for most people, actually nothing. Because, you know, what's exciting with a predictable, slow-paced, stable, widely adopted enterprise programming language?

Read to find out.

A little bit of Java History

Java was originally developed by James Gosling at Sun Microsystems in 1991. The goal was to develop a small, reliable, portable, distributed, real-time operating platform. The language was initially called Oak, later renamed to Green and finally renamed Java, from Java coffee, a type of coffee from Indonesia.

Officially released in 1995, Java quickly became popular for developing web applications. The Java Virtual Machine (JVM) allowed Java code to run on any platform that had a JVM, which made it a very versatile language. Java is also a very secure language, which made it a good choice for developing web applications.

Key events in Java's history

For brevity, here are some of the key events in the history of Java:

  • 1991: James Gosling starts the Java project at Sun Microsystems.
  • 1995: Java 1.0 is released.
  • 1996: Java becomes a popular language for developing web applications.
  • 1998: Java 1.1 is released, adding new features such as garbage collection and threads.
  • 2000: Java 1.2 is released, adding new features such as swing and applets.
  • 2004: Java 5 is released, adding new features such as generics and annotations.
  • 2009: Java 6 is released, adding new features such as concurrency improvements and a new security manager.
  • 2014: Java 8 is released, adding new features such as lambda expressions and streams.
  • 2017: Java 9 is released, adding new features such as modules and a new garbage collector.
  • 2018: Java 10 is released, adding new features such as a new date and time API.
  • 2019: Java 11 is released, adding new features such as a new HTTP client and a new text block literal.
  • 2020: Java 12 is released, adding new features such as switch expressions and sealed classes.
  • 2021: Java 13 is released, adding new features such as text blocks and pattern matching.
  • 2022: Java 14 is released, adding new features such as sealed interfaces and record classes.
  • 2023: Java 21 is released.
Looks like a pretty good cadence for a 30 year old programming language.

Applications

So where does Java run? Well, these days Java runs pretty much everywhere:

Enterprise Application Development

Java is commonly used to build large-scale, mission-critical applications for business operations. These applications can include customer relationship management (CRM) systems, enterprise resource planning (ERP) software, and supply chain management solutions.

Web Development

Java is used to build robust and scalable web applications. Companies often use Java-based frameworks like Spring and JavaServer Faces (JSF) to create web applications that handle high traffic loads, such as e-commerce websites and online banking platforms.

Mobile App Development

Java is one of the primary languages used for Android app development. Many Fortune 1000 companies develop Android applications for their customers, employees, or partners

Big Data and Analytics

Java is used in big data processing and analytics applications. Companies leverage Java libraries and frameworks, such as Apache Hadoop and Apache Spark, to analyze large volumes of data and gain insights for decision-making.

Middleware and Integration

Java is often used to develop middleware components and integration solutions. These components help connect various software systems and applications within an organization, enabling data flow and communication between them.

Cloud Services

Java is used to develop and run applications on cloud platforms like AWS, Azure and GCP. Java-based microservices and containers are common in cloud-native architectures.

Internet of Things (IoT)

Java can be used to develop IoT applications and solutions. It's used to create firmware for IoT devices and build backend systems that collect and process data from these devices.

Security

Java's security features are essential for companies. It's used in developing secure authentication systems, encryption algorithms, and secure communication protocols to protect sensitive data.

Financial Services

Many large financial institutions rely on Java for their trading platforms, risk management systems, and banking applications due to Java's performance and reliability.

Customer Support

Java is used to develop customer support systems, including chatbots and helpdesk applications, to improve customer service and streamline support operations.

Supply Chain and Logistics

Companies use Java to build applications that manage and optimize their supply chain, inventory, and logistics operations, helping them reduce costs and improve efficiency.

Content Management Systems (CMS)

Java-based CMS platforms are used for managing and delivering digital content on websites and other digital platforms.

E-commerce

Java is frequently used for developing e-commerce platforms, shopping carts, and payment processing systems to support online sales operations.

Data Warehousing

Java is used in the development of data warehousing solutions that enable companies to store, process, and retrieve large volumes of structured and unstructured data for analysis and reporting.

What's new in Java 21

Finally, let's jump into Java 21 (released in September 2023). The release adds many interesting features are being added to the language including:

  • Virtual Threads: Virtual threads are a new lightweight threading abstraction that can be used to improve the performance of multithreaded applications.
  • Record Patterns: Record patterns are a new feature that can be used to deconstruct record values in a more concise and readable way.
  • Pattern Matching for switch: Pattern matching for switch is a new feature that can be used to match values in a switch statement in a more concise and readable way.
  • Sequenced Collections: Sequenced collections are a new type of collection that provides direct access to the first and last elements of the collection.
  • String Templates: String templates are a new feature that can be used to simplify the process of string formatting and manipulation.
  • Unnamed Classes and Instance main() Methods: Unnamed classes and instance main() methods are preview features that can be used to simplify the code for small, self-contained classes and methods.

Does Java still matter?

But the question remains: does Java still matter? Well, given the extensive reach and adoption of the language, the answer is of course, a lot!

But in case you are still not convinced, here are some reasons why Java still matters:
  • Popularity: Java is still a very popular programming language today. It is used by millions of developers around the world and is the language of choice for many large and complex applications.
  • Portability: Java code can run on any platform that has a Java Virtual Machine (JVM). This makes it a very versatile language that can be used to develop applications for a wide range of devices.
  • Robustness: Java is a very robust language that is designed to be secure and reliable. It has a number of features that help to prevent errors and crashes, such as garbage collection and exception handling.
  • Performance: Java code can be very performant, especially when it is compiled to native code. This makes it a good choice for developing high-performance applications.
  • Enterprise adoption: Java is by far the most popular language of the enterprise. And that's not changing anytime soon.
  • Community: Java has a large and active community of developers. This means that there are plenty of resources available to help you learn and use the language.
  • Tooling: There are a wide variety of tools available for Java development, including IDEs, debuggers, and code quality tools. This makes it easy to develop and debug Java code.
  • Ubiquity: Java is everywhere. Java runs anywhere.

What the future holds for Java

Despite the apparent slowness in adhering to new trends, Java is an actively evolving language. Each new version adds new features and improvements, making Java a powerful and versatile language that is still relevant today.

Those who complain that Java is slow don't understand successful products and enterprise software. This cadence is required when your solutions run on billions of devices, process billions of dollars in financial transactions, and support 5-9's SLA. How simple do you think that is?

Conclusion

In summary, don't let the doomers convince you. Java still matters!

And in case it helps, here's one reason to (re)consider Java: Java is not going away anytime soon. I predict at least another 20 years of strong support for Java. So for those that like a stable language, a great ecosystem, no shortage of work, a great salary and a great career should consider learning and working with the language.

Monday, July 17, 2023

How to transition from Software Development to Architecture

Transitioning from software development to software architecture could be a great career progression for experienced developers. Learn how.

Image One Way, Alt Way
Photo by Brendan Church on Unsplash

When looking for the next step in their career, senior software engineers (or tech leads) have usually three paths before them: become increasingly more technical (aka. principal/staff engineer), move to a managerial position (Head of Engineering, Engineering Manager) or become a Software/Solution Architect.

In this blog post, we will explore how developers can successfully transition from software development into architecture.

What's required from an Architect

Before deciding if you really want to become a Software/Solution Architect, I recommend investing a decent amount of time reading about the role and comprehending everything that's expected from an architect in the context of a technology project (it's a lot!).

That said, transitioning from software development into architecture may not be the natural progression for most developers. While software development focuses on coding and implementation, software architecture takes a broader view, encompassing system design, scalability, long-term planning, a lot of communication and a lot of interpersonal skills. Not everyone will fill those gaps.

That said, the transition will be hard for most, especially for introverts, as it will require a shift in mindset, a huge ramp up to learn new skills and a growing focus on developing soft skills. Not everyone will be comfortable with that.

Transitioning from Development to Architecture

But if you are one of the brave ones who aspire to move into architecture, I have prepared this guide to help. So let's review the essential steps to help you successfully transition from software development into architecture.

1. Understand the Role of a Software Architect

Before embarking on the transition, it's crucial to understand the responsibilities and expectations of a software architect. A software architect is responsible for designing the overall structure of a software system, including making high-level decisions around the technology stack, system components, and interaction patterns. Architects need to balance technical considerations with business goals, scalability, maintainability, and performance.

I've spoken in detail about what's expected from a modern Solution/Software architect in a previous article, please read it here.

2. Expand Your Technical Knowledge

To become a successful software architect, you will need a much broader understanding of technology. This includes learning new technologies, frameworks, design patterns, cloud, tools, databases, keeping up with modern trends (like AI, IoT and Crypto), and gradually understand different technologies in different domains.

You will also be required to learn about best practices, scalability techniques, regulations, security, compliance and industry standards. This broad technical expertise will be immensely valuable when assessing the trade offs or your decisions, which will have a huge impact in your architectural decisions.

3. Enhance Your System Thinking

Transitioning to software architecture requires a shift from code-centric thinking to system-centric thinking. You will have to start viewing software systems as a single unit, learn to zoom out from the code/unit level and understand how different components and dependencies of a solution interact with each other.

You will be required to go much deeper (and wider) by assessing which programming language, database, cloud platform, and architectural style (ie., microservices, event-driven architecture, and domain-driven design) will fit better in your solution.

You will have to consider scalability, fault tolerance, performance, security, and other non-functional requirements. Develop the ability to break down complex problems into manageable components and design solutions that meet the system's architectural goals.

4. Gain Experience in Designing and Documenting Architectures

Additionally, it will be necessary to practice your architectural skills, a lot! Seek opportunities to design software systems, collaborate with colleagues or contribute to open-source projects that involve architecture discussions.

Practice documenting your design decisions, architectural diagrams, and system documentation. By going through the process of design and documentation, you will gain experience in communicating your architectural vision effectively.

Architectural Katas are a great resource for you to practice your skills.

5. Develop Soft Skills

Software architects not only design systems but also collaborate with stakeholders, developers, and project managers. Effective communication, leadership, and negotiation skills are vital for successful architecture transitions.

You will be required to grow your ability to express complex ideas concisely, listen actively, and adapt your communication style to different audiences. Cultivate your leadership skills by taking initiatives, guiding discussions, and mentoring other developers.

6. Seek Mentorship and Learning Opportunities

Learning from experienced software architects can greatly accelerate your transition. Seek mentorship from architects in your organization or join professional communities, forums, or meetups where you can connect with architecture practitioners.

Engage in conversations, ask questions, and learn from their experiences. Additionally, attend conferences, workshops, or online courses that focus on software architecture to deepen your knowledge and expand your network.

7. Embrace Continuous Learning

Software architecture is an ever-evolving field, with new technologies and approaches emerging constantly. Stay up-to-date with industry trends, read books, follow architecture blogs, and engage in discussions on social media platforms. Embrace a growth mindset and continuously learn and adapt to new technologies and architectural paradigms.

Given the extensive technical and non-technical skills required from a modern architect, we prepared this detailed guide describing what our architects should know, and guide them on the learnings they’ll need while working on their professional development plan.

Final Thoughts

Transitioning from software development to software architecture is an exciting career progression that requires a shift in mindset and the acquisition of new skills. By understanding the role of a software architect, expanding your technical knowledge, enhancing system thinking, practicing design and documentation, developing soft skills, seeking mentorship, and embracing continuous learning, you can successfully make this transition.

Remember, becoming a proficient software architect takes time and experience, so be patient and persistent in your journey. Good luck!

See Also

Monday, June 12, 2023

Different Types of IT Architects

There is a lot of ambiguity and even misinformation regarding the role of an IT Architect in a software project. Let's understand the differences between them.

Photo by Medienstürmer on Unsplash

There is a lot of ambiguity and even misinformation regarding the role of an IT Architect with regards to their participation in software projects.

Since the responsibilities of an IT Architect differ between organizations, I prepared this article to explain the particularities of different architecture roles, and bring clarity to those looking to work as professional IT Architects.

How Architecture varies per organization 

Due to differences in scale, complexity and organizational structure, Software Architecture varies significantly between small and large organizations.

Usually, large Enterprises have a more structured model for Architecture, and it's common to have a clear distinction between the different roles. In those organizations, it’s common to have different individuals performing different (and more specific) roles, with their titles aligning to their duties. Most of them, you will see in this article.

In smaller organizations though, very commonly Architects end up performing a combination of all of these roles (if not all at the same time for a given project). The name of the roles varies per organization, with the most popular being Solution, Cloud, Technical or Software Architects.

However, regardless of the size of the organization, architects are expected to do much more that just performing the tasks described in the job descriptions.

Which is why architects should broaden their skills as much as possible in different domains. Tough task, but will get you prepared to anything your employer (and clients) request from you. Make this a marathon, not a sprint.

With that said, let’s review the differences between the main types of architects as it relates to projects in technology.

Different types of Architects

Let's jump directly to the most common roles in architecture. Currently in the marketplace, they are:

  • Enterprise architect
  • Solution architect
  • Software/Application architect
  • Data/Information architect
  • Security architect
  • Cloud architect
  • Technical Architect
  • Principal Architect

So let’s review them.

Enterprise Architect

Enterprise architects are responsible for the technical solutions and strategic direction of an organization. They must work with a variety of stakeholders to understand an organization's market, customers, products, business domain, requirements, and technology.

From a broad perspective, enterprise architects are the most business oriented, and consequently, less technical in nature.

Solution Architect

A solution architect converts business/technical requirements into a solution architecture. They work closely with business analysts, product owners and technical people to understand the requirements in depth, so that they can design a solution that satisfies those requirements.

Solution Architects are the most hybrid role in this list. Solution architects are required to have great technical and business skill, making them a perfect fit for any project in technology.

Software (Application) Architect

Software/Application Architects focus mainly on the software architecture. They ensure that the requirements for their application are satisfied by the design of that application and serve as a liaison between the technical and non-technical staff working on an application.

Application Architects are involved in all the steps in the software development process.

Software/Application Architects architect and recommend solutions for new/existing/legacy technologies, as well as evaluating alternative approaches to problems and proposing solutions to existing problems.

Data (Information) Architect

Data Architects are responsible for designing, deploying, and managing an organization's data architecture.

Data Architects usually focus on data management systems, and their goal is to ensure that the appropriate consumers of an organization's data have access to the data in the right place at the right time.

Lastly, Data Architects are responsible for all of an organization's data sources, both internal and external. They ensure that an organization's strategic data requirements are met.

Infrastructure Architect

Infrastructure Architects focus on the design and implementation of an organization's enterprise infrastructure. This type of Architect is responsible for the infrastructure environment meeting the organization's business goals, and provide hardware, networking, operating system, and software solutions to satisfy them.

Security Architect

A Security Architect is responsible for an organization's computer and network security. They build, oversee, and maintain an organization's security implementations.

Security Architects must have a full understanding of an organization's systems and infrastructure so that they can design secure systems.

Cloud Architect

A Cloud Architect is someone who is responsible for an organization's cloud computing strategy and initiatives. They are responsible for the cloud architecture used for the deployment of software systems. An organization that has someone who is focused on cloud architecture leads to increased levels of success with cloud adoption.

The responsibilities of cloud architects include selecting a cloud provider and selecting the model (for example, SaaS, PaaS, or IaaS) that is most appropriate for the organization's needs.

Cloud Architects create cloud migration plans for existing applications not already in the cloud, including the coordination of the adoption process. They may also be involved in designing new cloud-native applications that are built from the ground up for the cloud.

Technical Architect

Technical Architects are another very technical role in Architecture. They develop the technical strategy for a project, making sure that the technical solutions meet the requirements of the customer and the business.

Technical Architects are also responsible for the long-term technical vision of a software solution. They evaluate new technologies and architectures to ensure the system meets the customer’s needs and is cost effective. Additionally, they are responsible for the development and implementation of standards and procedures to ensure the quality of the solutions.

Technical architects are very similar to Application/Software architects. Most likely, most people wouldn’t be able to differentiate them.

Principal Architect

Finally, Principal (or Lead) Architect. This role is usually more related to the leadership performed by the person (in this case, an Architect), than to specific tasks. However, it's expected that the Principal (or Lead) Architect usually possesses the widest knowledge within the team including Solution, Enterprise, Software and Cloud architecture.

Principal Architects frequently oversee and lead the design and development of projects from both a technical and managerial standpoint. Common tasks attributed to them include project leadership, design, planning, governance, team and client engagement.

Finally, principal Architects are expected to have exceptional technical, inter-personal, management, executive and sales skills. After all, they usually interact with a high level audience, including C-level executives.

Conclusion

On this article we presented a quick overview of the different types of IT Architects. Due to differences in scale, complexity, organizational structure and even how roles are defined, Architecture in the context of technology can (and will) vary significantly between organizations.

However, regardless of the role you execute in your organization, keep your skills sharpened by broadening your knowledge as much as you can in different domains. Tough task, but will get you prepared to anything your employer (and/or clients) request from you.

See Also

Tuesday, April 4, 2023

The modern Solution/Software Architect

Understand what's required from modern Solution/Software Architects and learn why being one is much more complicated than you think 


Photo by Rodeo Project Management Software on Unsplash

Being a modern day Solution/Software Architect is much more complicated than you might think. On this article let's review the nuances of the role(s) and in which understand domains one should excel to be a successful modern day architect.

Solution Architects and Software Architects are not the same role. But because the guidelines listed on this article serve perfectly for both, for the purposes of this article, allow me to refer to both as simply, the Architect.

Apparently, there's a lot of confusion and ambiguity with regards to the Architecture role. Differently of most people think, an Architect is not an upscaled tech-lead or a principal engineer. In fact, the goals of each roles are so different that together, the Architect and a their technical counterparts make a great team.

With that said, allow me to introduce you to the Architect role.

Who is the Architect?

Architects are a hybrid of technical and executive. Which means that in order to be successful at their jobs they should have strong technical, communication, executive and interpersonal skills.

Architects are not expected to know every detail of a software component or every possible argument to Your-Favourite-CLI. But they should know enough to be able to evaluate the tradeoffs of each alternative, choose and detail how a particular technology is used, and most importantly why.

For that to happen, it is recommended that Architects prioritize to go wide and not deep (sorry, you can't do both). Wide in diversity of technology, frameworks, patterns and practices is preferred to deeply knowing how one technology works (which's what the Engineer is supposed to do). So having experience with a diversified portfolio of technologies is strongly recommended.

Additionally, the Architect should not act as a sales representative of a particular technology/cloud service provider. Their choices should always favour business decisions first and foremost.

The modern day Architect

With a lot of competition, AI, a plethora of technologies and faster than ever changes in the business marketplace, how can one keep up to date with so much? This is where the modern day Architect comes in. 

Modern day architects must be strong in technical and non-technical domains.

But because the modern day Architect being required to know so much and master many different domains, the first thing they should learn is how to prioritize what they'll work on. Make your goals SMART so they are prioritized, specific, measured and acted upon.

But remember that the fallacy that an Architect is purely technical has to be deconstructed. The modern day Architect should be technically strong while also possessing sufficient interpersonal skills to be able to lead teams, handle difficult conversations and interact with a diverse audience ranging from business executives, boards, RFPs to technical teams.

So let's review both domains.

Technical Skills

Software Design and Architecture

The modern software architect needs to be intimately familiar with software design principles and patterns, and be able to create efficient architectures that scale and can be easily maintained.

There is just so much here that the best way to address this is on another post. For now, let's summarize it to design + architecture + enterprise patterns, along with excellent

Development

Being able to program in a range of programming languages is essential for the modern Architect. Architects should be familiar with the syntax and features of the languages they work with, as well as the programming frameworks associated with them.

This should be a trivial one if you come from a development background. However, I'd like to add two things. First, beyond excellent programming skills, software architecture and design is crucial for the Architect role. Next, scripting (ex. Bash, Python or PowerShell) is also important as it's also needed by the DevSecOps area of expertise (see next).

Cloud Computing

Cloud computing includes a broad set of technologies that modern software architectures rely on, and a critical domain that the modern day Architect should be be well-versed in.

With the omnipresence of the cloud, make sure you have your cloud fundamentals right. On top of that, add the different facets of cloud (private, hybrid, multi) and complement all of that with architecture skills.

Sound complicated? Indeed. In fact, being a successful Architect that understands well the cloud (in all of its flavours) is much more than one may think. Especially because no certification can measure so much.

DevSecOps

Next, DevSecOps. Yes, DevOps + Security shifted left. The modern-day Architect should have strong fundamentals in everything from basic CI/CD pipelines to Kubernetes, as they'll need to engage frequently with engineers and business to make sure their solutions are modelled and work as expected.

Understanding of DevOps and Continuous Delivery are important for modern software architectures, and the modern software architect must be able to design and implement systems that use these technologies.

Data

Modern architects should have a deep understanding on data and related technologies. That includes data design, storage, analytics, security and governance.

Infrastructure

Modern architects should know enough infrastructure to help they clients wherever they are in their journey. That includes a solid understanding of virtualization, networking, containerization, monitoring, logging and infrastructure automation.

Security

Security is a moving target and a very difficult domain to master. Modern architects should know enough security to be able to understand, adopt security and communicate security to different stakeholders.

Governance and Compliance

Lastly, the modern architect should know enough on Governance, Privacy and Compliance. That includes standards, legislations and regulations as they have a profound impact on the business and on the final solution.

Interpersonal Skills

For an Architect, interpersonal skills are as important as the technical ones. Let's see the main ones.

Communication

Being able to effectively communicate with others is essential for the Architect. This includes ability to actively listen, clear communication, constructive feedback and be able to handle difficult conversations.

Communication is a critical skill for Architects as much of what their work - communicate their ideas and designs to other stakeholders - requires clear communication and must be done effectively.

Presentation and Public Speaking

Architects should be have strong presentation and public speaking skills, as they'll have to communicate to different audiences, both technical and executive.

Leadership

An Architect must have the ability to lead a team and guide them to achieve the project's goals. Part of the expectations include setting expectations, giving directions, and motivating peers.

Problem Solving

As part of their role, Architects must be able to analyze complex situations and come up with creative solutions. In this area, skills such as assessing the pros/cons of each alternative, balancing tradeoffs have to be counterbalanced with technical and business-specific requirements.

Negotiation

Negotiation is a critical skill for Architects as they have to negotiate all the time with vendors, customers, and other stakeholders to successfully achieve the project's goals.

Adaptability

Projects change all the time. Architects must be able to adjust to changing conditions and respond quickly to new challenges.

Emotional Intelligence

Executives must have the ability to read and understand the emotions of others and respond appropriately.

Networking

Architects must be able to connect to different stakeholders to build relationships with different types of professionals that help them make their projects successful.

Final Thoughts

Despite not being exactly the same, this article covered the general characteristics Solution/Software Architects should have to be successful in their hole.

As you may have realized, being a modern Solution/Software Architect is much more complex that one might think and involves being a hybrid tech-executive that takes a lot of time to master.

Hopefully this summary serves as a roadmap so you can guide your career to the level expected by the market when it comes to software/solution architecture.

Good luck!

See Also

Tuesday, March 7, 2023

The importance of onboarding for tech employees

Not much about onboarding is discussed in the tech industry. As a critical component to any organization, here is what you should know as an employee and as an employer


Photo by charlesdeluvio on Unsplash

By far one of the most ignored things in tech is onboarding. Everyone talks about interviews, training, coaching, salaries and (recently) layoffs, but very little on the topic is mentioned.

Could it be because the topic is boring and won't get many clicks? Maybe.
Could it be because onboarding is for the HR only? For sure.
Could it be because tech people only is about tech stuff? Definitely.

Well, unfortunately that's all wrong. A lot.

As a critical piece for the human engine of any organization, onboarding should be carefully considered as it is critical for the long-term relationship between employers and employees, and directly impacts the profitability and growth of an organization.

High turnover

Recent studies show that the experience new hires have during the first weeks is crucial for the retention of the person. In fact, recent data outlines that "almost 20 per cent of turnover occurs within the first 45 days of a new employee’s start date".

If you add on top of that loss of projects due to shortage of skills, a very tight labour market, and the average cost to replace an employee taking up to $20,000.00/person, it's easy to see how much money is being lost by organizations doing a poor onboarding, especially on a tight job market / full-employment mode, as we're seeing in early 2023.

So how to make the overall experience better?

Improving the onboarding experience

First, start with proper training. Studies show that it can take between 3 and 9 months for the new hire to be fully productive in a company.

So forget that 1-week onboarding. Seriously.

In my experience, I've seen both extremes: people joining and kept on trainings for months, while others dumped in red-hot projects after mere weeks (or days). Obviously both examples are extreme and should sound like alerts for both employees and organizations as they signify either lack of projects or an understaffed organization.

However if we consider 3 month to be the ideal, then we can infer that organizations get a 40% discount should they onboard (and retain) a new employee within 3 months. Those are productivity gains that no organization should ignore.

Best-practices

So let's review how to address this critical issue. Here are some of my favourite onboarding practices for tech employees that leaders should consider:

  • Onboarding is not a one and done activity: it has to continue throughout the first year and potentially further on as is key to employee satisfaction.
  • Keep the employee engaged during the onboarding phase: offer different activities, have them meet different people and different teams. 
  • Make it fun: forget those long recording 
  • Foster interactions: introduce the new hires to other employees and teams they'll be interacting with.
  • Mix content: make sure your onboarding experience includes a mix of online led and self-directed sessions  
  • Avoid full-day back-to-back sessions: onboarding is exhausting. Don't make it painful.
  • Diversify: approach different topics and even allow them to explore different content.

How to make onboarding even more exciting

Additionally, if you want (and can) make onboarding even more exciting, here are 4 additional tips:

  • Provide a hands-on experience: Allow new tech employees to get hands-on experience with the technology they’ll be working with. If possible, provide a lab environment where they can play with the technology and get to know it better.
  • Assign a mentor: Assign each new tech employee an onboarding buddy. The onboarding buddy can serve as a mentor and help the new employee feel more comfortable in their new role.
  • Mix technology, medium and format: Use technology like video conferencing and interactive presentations to make the onboarding process more engaging. This will make the onboarding process more interactive and give the new employee a better understanding of the technology they’ll be working with.
  • Offer training: Provide online courses and hands-on training sessions to help new tech employees learn more about the technology they’ll be working with. This will provide them with the knowledge and skills they need to be successful in their new role.
  • Gamify: Use gamification techniques like rewards and leaderboards to make the onboarding process more interesting. This will help motivate new tech employees to learn more and keep them engaged throughout the onboarding process.

Next Steps

So what can you do to promptly address your own onboarding?

Well, the first thing is to take this conversation back to your manager and start the conversation. Additionally, interview recent hires and see what went good/bad/ugly in their first 6 months in the organization (don't mention onboarding).

Finally, engage the whole team and work together to make this experience great. Onboarding isn't only the responsibility of your leader.

Final Thoughts

Since the average cost to replace an employee getting up to $20,000.00, a very tight job marketplace and a high correlation between onboarding experience and employee retentions, companies of all sizes should re-consider the onboarding experience.

For the tech sector, in addition to that, consider making your onboarding experience more exciting by mixing sync and async sessions, training and gamification.

Further Reading

About the Author

Bruno Hildenbrand      
Principal Architect, HildenCo Solutions.