This article is the second installment of a two-part article on prototype-driven Agile development. It is strongly recommended that the first installment be read before continuing.
The first version of the enterprise application that you developed using a prototype-driven, Agile development methodology turned out better than you expected. Deployment to the production environment went off reasonably well and the application is up and running. The users of the application got what they had expected since they had a hand in developing it. The application is in production and the release party is over. Job well done.
But, as is usually the case with the first version of any large application development project, some features couldn’t be implemented due to the ever present constraints of time, money and resources. There is more work to do to build out the promised features and convert the as yet untapped potential of the application into real value. But wait. The prototype-driven methodology worked great before the application was deployed to production. Now that it’s in production, however, can the same methodology be used to build major enhancements to the running system? If so, can the methodology provide the same level of productivity? In fact it can.
This article discusses how prototype-driven development can be used after the first version of the application has been deployed to production with all of the accompanying overhead of support, maintenance and operational management. In fact, the value of prototyping or extra-Agile project management doesn’t diminish because there’s code running in production. On the contrary, prototyping enables a wide range of experimentation opportunities including:
- A-B testing of alternative complex UI designs before committing one to production
- comparing different database design options for functionality and performance in pre-production environments
- testing alternative factoring of application functionality between the server and client components
… just to name a few. The value of prototyping, i.e. trying different options for solving a problem, is just as valuable post-version 1 as it was developing version 1.
How much or little prototyping can actually be utilized will be determined more by whether software architecture and design best practices were employed when building version 1 of the application rather than whether or not it’s running in production. The use of loosely coupled services, architectures such as MVC/MVVM, a common (enterprise) service bus and other system-level architecture and design patterns allow for more narrowly-scoped prototyping and enable lighter-weight Agile project management.
In order to continue using a prototype-driven, Agile methodology, some changes to the process used to build version 1 are required, however. For instance, while fixes for defects in the production system can be prototyped, those fixes should be tested and deployed using established processes to minimize the risk of introducing new defects into production. Likewise, final testing of new and changed components should be rigorous to ensure that quality of service isn’t negatively impacted. Up until pre-production deployment testing begins, though, prototype-driven Agile development can be leveraged to optimize designs and save development time.
Before version 2 development begins, a hybrid approach should be defined based on the requirements associated with the ‘production application life cycle’. Typically, this lifecycle is comprised of different smaller cycles which include operational documentation, service desk training, user training, initial deployment, defect mitigation, upgrade deployments, etc. Some of these smaller cycles will likely require adherence to a set of standardized operational requirements, such as those defined in in the ITIL framework, in order to effectively manage change and minimize risk. This overhead is a sunk cost, however, so the value of prototype-driven Agile development isn’t diminished for having to incorporate the additional processes and deliverables required to deploy to production.
So far, this article and its predecessor have discussed the software development process. But, there are tremendous opportunities to enhance even the most Agile development processes through smart automation of operational processes and procedures.
For instance, automated test suites enable more testing in a shorter time resulting in a reduction in overall time to QA. Automated test suites in turn enable check-in gating. That is, completion of a source code check-in is predicated on the source code successfully compiling, all of the automated test suite passing, and, finally, a successful deployment to a non-production environment; all of which decrease the likelihood of bugs and increase the certainty of the eventual production deployment being successful. All of these gates can be automated inline in the source code check-in process.
Automated deployment is another key component of the total application lifecycle and should include such characteristics as ‘one-button’ launch, automation of deployment step verification and deployment final verification, automated rollback, deployment process monitoring and alerting, and deployment process auto-documentation. By reducing or eliminating manual procedures in favor of more deterministic and repeatable automated processes, the end-to-end develop-test-deploy cycle can be repeated daily or even after each source code check-in. From practice comes perfection.
Prototype-driven development using an Agile methodology can yield productivity and quality benefits for both new system development projects and existing system enhancement projects, particularly if good software architecture and design practices are applied from the beginning. Further, automating operational processes can significantly reduce risk and speed up time-to-production. In combination, prototype-driven Agile development and operational automation can help IT achieve unprecedented organizational agility and productivity.
Plaster Group Architecture and Agile consulting services can help you evolve your software development processes. We’ll help you create a roadmap to higher quality and greater productivity, and we’ll help you execute on it, saving you time and money while opening up new levels of flexibility and productivity for your IT software development investment.