If the phrase “Agile Architecture” sounds strange to you, you are not alone. Many solution developers, including Agile novices as well as seasoned practitioners, have not had sufficient exposure to system architecture to fully understand how architecture is handled within the world of Agile engineering. There are many reasons for this. First of all, there are limited training options available regarding Agile systems engineering and architecture, primarily due to its narrow focus and shortage of qualified experts who is willing/able to provide this type of training. Secondly, most Agile practitioners are more focused on writing code and turning out working software than planning ahead for a long-term, sustainable solution that is maintainable, scalable, and reliable. Third, architecture in the traditional world of technology development has primarily been placed squarely in the hands of Software/Solution Architects who are accustomed to building the entire infrastructure of the system upfront (i.e. “big bang design”), and find it challenging to develop a complex architecture in an iterative and incremental fashion. So, what can we do about this? How do we apply Agile principles to architecture of a complex system?
While it may sound a bit daunting and scary, Agile Architecture is indeed possible and very achievable, provided you follow a few basic steps that take you in the right direction. Keep reading to learn what you can do today.
TIP #1: Clarify the vision
If you are a seasoned Agile practitioner, chances are you are very skilled in Scrum, and have successfully delivered valuable products to your customers. However, there’s a possibility that you may have achieved success in the absence of a clear vision for your end solution. If this is indeed the case, don’t feel bad; this is a common experience for many high-performing Scrum teams that produce very good results on a consistent basis. An important factor to consider is that the solution you are building may be increasingly complex over time, and that without a more holistic view of the mission you (and your customer) wishes to achieve, you run the risk of building something that is fragmented or is not focused on the primary goal of the solution.
An analogy I like to use to illustrate this scenario is driving a car across the continental United States. Let’s say that you start your journey in Washington D.C., but you aren’t 100% sure where you want to end up, you may either end up in Seattle, Los Angeles, Orlando, or any number of destinations. Even if you aren’t sure where the final destination will be, if you know you wish to end up on the West coast, you can make some decisions to improve your chances of success. Having no vision of the end state is risky and can lead your team to an unexpected place.
TIP #2: Create a roadmap
With a vision in hand, you can start to build a roadmap that will provide an even more detailed plan of attack that will help guide your team. Keep in mind that we are still following Agile principles here, so we are not expecting to conduct detailed planning, but just enough to enable the team to move forward. The path does not need to be precise at this stage. You will start to chart a path towards the West coast, whether it’s through the southern path (i.e. Texas) or the northern route (i.e. Indiana); the details do not matter at this point, since we will collaborate with the customer to determine the best way to proceed.
TIP #3: Build your architecture runway, early and often!
The architecture runway is an enabler that paves the way to your goal (pun intended!). Building the necessary infrastructure ahead of the product features/capabilities allows the team to produce an incremental working solution as quickly as possible with as few delays as possible.
An analogy for this concept is that you will always keep your vehicle fueled at all times during your trip. To complete the trip as quickly as possible, we want to minimize the number of stops for refueling. Hence, if we can somehow refuel “on the go” while the vehicle continues to move towards the destination, our progress is optimized!
TIP #4: Commit adequate resources
In order to ensure our system has sufficient infrastructure to allow the team to build and deploy capabilities, we need to dedicate personnel resources to work on BOTH foundational elements and user-facing functionality. This means that we must balance our resources to make sure that someone is manning the wheel and navigating the car at all times, while other team members are monitoring the system health and making sure there’s sufficient fuel and ample tire pressure to maximize overall system performance.
TIP #5: Watch out for Technical Debt
You may encounter situations where things don’t go as you expect, and the temptation to take a short-cut increases as the sense of urgency rises. Don’t give in to the temptation to “take the easy way out”, because in most cases, this decision will usually lead to bigger issues down the road.
You may be tempted to stop checking the tire pressure halfway through the trip because you believe there’s more value in assigning that team member to upgrade the engine. However, you will introduce risks to your overall plan which may jeopardize your chances of reaching your destination altogether.
To wrap up this article, building and sustaining a system architecture within an Agile framework is not easy, and requires a lot of planning and understanding of the end product. If you need guidance, consider exploring industry resources such as Scaled Agile Framework, or consult an experienced expert who can support you in this journey.