In software development, when you start the project you can have a clear view about the system and what you want it to be, once the requirements have already been raised. However, at some point during the project your requirements may change, due mainly to customer requests, and your image about it may not be clearer.
Especially in agile methods, changes in system requirements are always expected. For all this, one must have a good design for the system from the outset, and still the architect and developer need to be prepared for the changes. For this, the system design must be precise so that it is clear to all who are working on it. You also need to have an effective method for project changes so that everyone is up to date with the information. In this way, software design in agile methods occurs throughout the life cycle.
Prior to agile methodologies, designing software required an extensive and detailed document on possible software development needs. That way, you run the risk that developers will not read this document completely, and thus will not understand exactly how the system will be. In an agile way, the design is simple in the beginning, and it is expected that close and constant communication throughout the development process will always keep the developers up to date.
So here are some software design practices used in agile methods:
- Architectural forecasting – Lightweight modeling at the beginning of a project to identify and think critically on architectural level issues.
- Iterative modeling – Light modeling for a few minutes at the start of an iteration / sprint to help identify your team’s strategy for this iteration.
- Model-proof – lightweight modeling for a few minutes in a practical way to think about your practical solution.
- Pre-design test – Write a single test, before writing enough production code, to test it.
- Refactoring – Make small changes to a part of your solution that improves quality without changing the semantics of that part.
- Continuous Integration – Automatically compile, test, and validate your solution components whenever there is one of these component changes.
They perceive that these practices correspond sequentially to practices from the high architectural level, to the low level of programming.
These are just a few practices in agile software development projects, the important thing is that the practices are followed and are clear to all team members. Other practices could be cited, however, always with the aim of improving and facilitating the work of the development team to achieve the objectives of each iteration.