Design process in Agile
When developing applications, the design process is critical to delivering a high quality, reusable solution. During this process the team will perform several critical functions and make decisions that affect the outcome of the current work. First, the team will review the requirements. Second, an architect or senior engineer will determine a solution architecture that is consistent with the enterprise architecture.
Additionally, the test cases, and what determines success or failure, must be identified and created using a testing framework. Finally, the work is divided amongst the team. In the Agile methodology the design process will take place during the Sprint planning session. The length of the Sprint planning session will be determined by the amount of backlog items, although this meeting is likely to require several hours for discussing architecture and design decisions.
Requirements review
The requirements come from the stakeholders and it is the responsibility of the Scrum Master to make sure all the Sprint backlog items are sufficiently groomed and are ready for the team to review. The Scrum Master will work with the Product Owner to groom the Product Backlog items and create Sprint tasks. In this phase, the Product Owner and the Scrum Master will prioritize the tasks so that applications can be delivered iteratively. The Sprint tasks must be created prior to holding the Sprint planning session and the team needs to review them so they can be prepared with their questions. The development team or the quality assurance team may have questions that need clarification, however these questions will not delay the start of work.
Architecture and design
This is an area where many organizations fail to properly implement a successful strategy. A successful strategy is one that will promote code reuse, scalability and maintainability. In many cases, teams are not provided with an overall architecture that defines the relationships between modules or services that are delivered. When this information is neglected, then it leads to disorganized solutions that require more maintenance than they should. This step is different than the design patterns used by the development team, however it will, very likely, incorporate those patterns into the solutions. In this step, the team will identify services or modules that can be reused. Also, reusing services might require changes to the functions to meet the new requirements. Architecture and design are factors that will lead to the successful delivery of applications and databases. A robust application infrastructure depends on the organizations ability to coordinate the various levels of services and modules. Additionally, a data platform that is designed well is easier to maintain and add new features.
Quality
Ensuring the highest quality starts early in the development process. Identifying requirements is the greatest factor for success because it enables the team and the stakeholders to have a shared understanding of the goals for a successful delivery. Once the team begins the Sprint planning session, the quality assurance engineers will bring the test cases and include them in the Sprint backlog items. This allows the development team to understand the outcomes that will be considered successful. There are many methods for testing software, however a good test plan will include functional, regression and end-to-end tests.
Assigning work
In the Agile methodology, a task will be assigned an estimated scope. There are various methods for this, including a point system or using playing cards. Personally, I prefer to estimate using man hours. Estimates in man hours identify modules that are unnecessarily complex because the team will frequently require more hours than expected. Additionally, using man hours allows for greater accuracy when planning releases. When assigning work to each developer, it's important to consider skill and experience. A senior engineer will be able to complete tasks that are more complex. A junior/mid level engineer needs to have a realistic amount of work they can complete while delivering a quality solution.
Conclusion
Agile is a flexible process that allows for changing requirements while enabling development teams to continually deliver iterations of new application features. In the Agile process, not every Sprint will produce a version of an application that is scheduled for a release. Often, projects will require multiple Sprints to implement a feature set, then subsequent releases will enhance the application. This process allows the organization to get feedback from customers and develop the necessary changes quickly. The solution design needs to plan for the releases and identify which features and capabilities will be included in each release.


