Regardless of what process religion you prescribe to, it is hard to argue with the benefits of iterative software development. Unfortunately, it is not enough to simply understand the benefits of listening and reacting to your market’s response to what you are building. Create a culture that supports continuous improvement and systems that support iteratively building and deploying software.
Many legacy projects suffer from lack of modularity and tight coupling between components. Modifying systems with these characteristics becomes more and more tedious and cumbersome as time passes. This can make it difficult to change one part of the system without introducing problems in other areas of the system. This problem is exacerbated when you lose members of the team who have special knowledge and additions to the team have to spend months mining out this tribal knowledge. Often these systems lack proper test coverage to alert you to defects you’ve introduced in other parts of the system.
When planning a new system or new product, consider how you will iteratively evolve the system.
When planning a new system or new product, consider how you will iteratively evolve the system. Ideally your architecture is flexible enough to withstand rapidly changing priorities and business objectives. Microservices is an approach to architecting software systems where components are deployed as individual distributed services. Typically, microservice deployments use docker containers to maintain component isolation and increase compute density.
Does your software architecture allow you to efficiently test new ideas while minimizing risk?
Whether you build your system as a monolith or as microservices it is most critical that you decouple your functions and features. This will limit the risk of unexpected interactions between components. Does your software architecture allow you to efficiently test new ideas while minimizing risk?