{"id":12024,"date":"2013-10-08T09:01:25","date_gmt":"2013-10-08T06:01:25","guid":{"rendered":"https:\/\/mozaicworks.com\/?p=5749"},"modified":"2023-09-15T15:09:15","modified_gmt":"2023-09-15T12:09:15","slug":"do-we-need-architecture-when-doing-agile-or-lean","status":"publish","type":"post","link":"https:\/\/mozaicworks.com\/blog\/do-we-need-architecture-when-doing-agile-or-lean","title":{"rendered":"Do We Need Architecture when Doing Agile or Lean?"},"content":{"rendered":"

Let’s say you start an agile project. You identify the requirements, write them down as user stories, define your releases, setup the infrastructure. Are you ready to start sprinting?<\/p>\n

Before we can answer, let’s try adding in more context. I see two different situations:<\/p>\n

\u00a01. You have one team that will build an application starting from scratch<\/strong><\/p>\n

\u00a02. You have five teams who start to work in parallel. The application integrates with ten different existing applications<\/strong><\/p>\n

In the first case, you can usually start immediately. Only rarely have you to consider things like: increased performance in parts of the system or increased security that requires special coding guidelines. Experienced developers will take these into consideration naturally, without someone telling them. If developers pair, guidelines will emerge from this interaction. Components will emerge by extracting common parts of the code into separate libraries or services. Problem solved.<\/p>\n

In the second case, you are facing different challenges. Every decision that involves more than two teams can take forever. Decisions made by one team might not be ideal for the whole system. Ideally, everyone will know the whole system and can decide for it, but we know that is not happening in reality. No matter if you structure your teams as feature teams or component team, you will have some long conversations for certain types of decisions. You have to answer more questions. How do you keep consistency in code? How do you ensure performance, security, availability, scalability? Some decisions need to be made that affect more than a sprint and more than a team.<\/p>\n

There is more. Often during a longer project with multiple teams, you have to balance short term with long term needs. Should we spend one more day to extract one service now, or should we wait until we find that the user facing application has low availability due to that service? We knew we need high availability for the application for months, how comes we could not we see that extracting the service is important? Or is it more important to deliver? Can the Product Owners (we have multiple teams, so probably multiple POs) make this decision? How? Or should we leave this decision to one team? All the teams?<\/p>\n

Depending who you ask these questions, you will get different answers. Some XP practitioners say that architecture will emerge. Scrum says you need to figure it out. Kanban builds upon an existing system, so it is again up to you to find solutions. None of these answers is satisfying.<\/p>\n

If you ask experienced software architects, such as Rebecca Wirfs-Brock or Simon Brown, they will tell you that you need to think ahead. One of my<\/a> conversations with Rebecca<\/a> inspired her to write an excellent blog post<\/a> that you might find interesting in this debate.<\/p>\n

My experience has shown that we need to think ahead. Like any plan, the initial architecture will change but it is important to have something to change. When I start developing a product for a customer, I believe my job is to make a few decisions that will help with three important things:<\/p>\n