For years, like many of you, I have been comparing software development to construction. But ever since adopting the agile methodology a decade ago, I have been looking for a better analogy to help me explain agile software development. I recently came up with what I think is that analogy - urban planning. Read on to see if you agree.
Shortcomings in the Construction Analogy
What’s wrong with the construction analogy? Nothing, if you still follow a waterfall methodology. They are similar processes in that you define what you want to build up front, you design what you are going to build, and then you build to your design. You make very little changes, because everything is contingent on the original design, and thus changes later in the process are expensive and difficult.
But we are approaching 2014 and according to VersionOne (Survey, 2013), 83% of the respondents plan to use agile software development on their next project. And in an agile process, you design and build as you go, delivering the highest value to the customer possible. You constantly make changes as you adapt to the ever-changing conditions that affect your company. So I think we need a better analogy.
Urban Planning Analogy
A recent discussion with my local agile user group gave me the idea that agile software development is very similar to urban planning. According to Wikipedia (n.d.): “Urban planning (urban, city, and town planning) is a technical and political process concerned with the use of land and design of the urban environment, including transportation networks, to guide and ensure the orderly development of settlements and communities.”
Both urban planning and agile software development must account for changing conditions while trying to maximize the value being provided. To support my idea of using urban planning as an analogy for agile software development, let me provide some examples of how I think the two processes are similar.
Features are like Parks and Schools
In urban planning, you don’t know how many schools or parks you are going to need. You add new schools and parks when the community needs them, not up front because you think the town will grow. Similarly, in agile software development you don’t know all the features you will need. So you don’t add features because you think the customer might want them. Instead, you add features as you go based on what will provide the customer the most value.
Frameworks and Libraries are like City Infrastructure
In urban planning, you have to replace the city infrastructure like roads and sewers over time. New technologies such as fiber optics must be installed to meet the demands of modern living. Similarly, in agile software development you have to update the libraries, frameworks, and tools used in your application over time. Incorporating new technologies improves your software and helps you deliver a better product to your customer.
Refactoring is like Urban Expansion
In urban planning, you have to replace existing roads, widen existing roads, and add new roads as the population grows. Similarly, in agile software development you have to refactor your code so that your application can handle changes in design, as well as increases in load and stress.
In urban planning, you may have to move or tear down existing housing to make room for new commercial development. As a city grows, areas that were residential or rural need to be converted to commercial areas. Similarly, in agile software development you may have to refactor your code to account for changes like a new feature or a new regulatory requirement.
Both Support Prudent Spending
In urban planning, you have to deal with limited city budgets. There are only so many tax dollars the city can spend. The community may want a new water park, but the city may not be able to build it all right away. So the city may break the water park into phases across multiple fiscal years. Similarly, agile software development projects have budget constraints. Agile software development allows the customer to split a project up and to have the features delivered first that will provide the most value. In both cases the money spent is providing a return on the investment right away rather than having to wait for the whole project to be completed before any return is realized.
Both Must Prioritize
In urban planning, you have to prioritize competing interests such as commercial development, residential development, multi-family units, single family units, and recreation areas such as parks. Similarly, in agile software development the product owner prioritizes features based on which features will provide the most value to the customer. In neither case will everyone be happy, but both processes will maximize the benefits gained from the work.
I’ve described what I think are the many similarities between agile software development and urban planning. I plan to use the urban planning analogy the next time I need to explain agile software development. Would you use this analogy, or do you have a different analogy that you like to use? Let me know what you think!
VersionOne. 2013. 7th Annual State of Agile Software Development Survey.
Wikipedia. n.d. Urban Planning.