by Marcus Turner, CTO at Enola Labs
Within the overwhelming majority of Fortune 500 companies, teams have a well defined Software Development Lifecycle (SLDC) process, but many of them are based on “Waterfall” methodologies and very few have effectively implemented agile processes. For many of these organizations, more agile-like processes are a clear goal, but very seldom have they successfully implemented efficient methodologies that enable agile development processes.
Where is the best place to start? Should these companies look at user centered design (UCD) or User Driven Development? Should these companies look into leveraging pure agile processes? Should these companies simply leverage key best practices of their existing Waterfall processes? The short answer is yes, leverage the processes that work best, but very often the key is to find the appropriate balance between the best elements of each of these processes and create a new processes based on an amalgamation of the best elements of each.
In order to get to the best overall process balance within many enterprise organizations, let’s first look at some of the best practices of each of the defined processes.
While user centered design principles have been around for years, from an enterprise perspective, UCD was not commonly leveraged until the mobile revolution. For years, enterprise organizations did not consider enough of the “user experience” within the overall solution design process. Typically, enterprises were guided by interface designs that have been driven by Microsoft; navigation (commonly tree based) on the left, predominant data container in the middle and an attribute container on the right. The mobile innovation obviously changed the timeliness, connectivity and screen size restrictions, but it can be asserted that one of the major changes that was driven by mobile interfaces is the focus on the overall user experience. If the mobile user experience is not well orchestrated, the mobile application itself often fails.
User centered design can be characterized as a framework of processes that focus heavily on the user experience, while addressing the needs, wants and limitations of the user. The key aspects within the user centered design process are the elements (visibility, accessibility, legibility and language), the situation (audience, purpose and context) and the analysis tools (personas, scenarios and user stories).
User centered design within the enterprise it all too commonly only implemented by external design partners, only focused on the design component of solution delivery, so often it really does not move the needle in an overall transition of enterprise SDLC processes.
While the genesis of agile methodologies can be traced possibly back to the late 1950’s or more reasonably attributed to the adaptive development process published by Bell Labs in the 1970’s, the popularity of agile methodologies is most attributed to The Agile Manifesto published just after the turn of the millennium. The principles of agile solution delivery were initially documented within the Manifesto, but arguably the implementation of agile is based on some more common philosophies that have defined many of the agile methodologies. These philosophies focused on a more dynamic process for change, flexible iteration of the core waterfall phases within each agile delivery and a belief around minimal software documentation (as the focus should be on the code). While many agile based methodologies have subsequently been established, very few enterprise organizations have successfully incorporated agile solution realization into their internal processes.
Within many enterprise organizations, the primary components of their SDLC processes are still heavily based upon Waterfall processes of the past. In order to facilitate change, first the baseline must be established ensuring that the appropriate levels of documentation and governance exists for the existing core processes. With this baseline in place, these core processes are now at a state where change can be evaluated for incorporation of best practices from both the user centered design and agile methodologies.
Logically, enterprise organizations initially look to change the entire process at once starting with the design phase, but many successful organizations actually initially modify the later phases of the process; development, testing and deployment. By starting with the later phases, some of the key enabling elements of these processes can be incorporated leveraging the long entrenched waterfall process and artifacts. The idea is to initially enable more agile methodologies by the adoption of a process that is more of a “waterfall like start” with agile execution.
While the overall process redesign and optimization best practices could be an enormous case study, the following are some of the best practices within each phase of the waterfall process, starting from the back and working forward: deployment, testing, development and design.
Overall, the technology advancements within the “devops” space has arguably enabled more potential changes to the classic waterfall SDLC processes than any other phase. Continuous Delivery is a best practice within this space, but many enterprise organizations don’t have the deployment processes in place to enable continuous delivery. In addition some regulated environments (such as Sarbanes Oxley based) or even application environments such as the Apple Store, restrict many organizations from fully realizing a true continuous delivery implementation. However, even enterprise organizations that have the regulated or process restrictions should still now leverage continuous delivery. It’s possible to have continuous delivery processes in place, but to branch at logical deployment windows, (commonly month or quarter based) then leverage the branches to deploy into the more constrained environments. By leveraging the tool enabled best practices, many enterprise organizations can become more efficient and ultimately agile within their overall deployment processes.
One of the most valuable aspects of many agile based methodologies is the interactive model for testing; which helps to enable quality as a pervasive influence within the entire lifecycle. Simply put, there can never be enough focus on quality within any phase of the lifecycle. Agile methodologies have testing embedded within each iteration, so issues can be addressed in more of an iterative manner. Quality is an aspect that should never be associated with a lifecycle “phase”, but should be a focus throughout the entire project. A best practice within enterprises is the overall concept of implementation of quality gates. Quality gates should occur within the lifecycle whenever the primary ownership is transitioned to another team; customer to design/architecture, design/architecture to development, development to deployment and deployment back to the customer. These quality gates can either be implemented as formal or informal gates, but raising the bar on quality within the overall lifecycle promotes a culture of quality both within the enterprise and especially within the project teams.
Typically, many enterprises have already moved to a more agile methodology within the development phase of the lifecycle. Typically, this transition is enabled by having shorter durations of development. Leveraging an iterative approach enables the lifecycle to be more responsive to change, promotes early learning and feedback cycles and allows for more of a collaboration throughout the team. One important take away to remember is that oftentimes existing design (both visual and technical) artifacts can still leverage the more waterfall like processes, but simply the scope of each iteration covers less functionality and thus simplifies the artifacts.
As a best practice, some logical combination of user centered design and bottom up architecture is a step forward to a better defined design process. It must be noted that there are several agile methodologies within the more classical design processes, but the design phase (independent of the scope of the iteration) is one place where leaning more towards waterfall-like processes makes sense for many enterprise organizations. At the end of the day, the design phase is the one place where more process generating, better defined subsequent actions enables greater success of not just the phase, but the entire lifecycle.
Enabling an approach focused on a “waterfall like start with agile execution” enables organizations to be more agile and adaptive within their overall software lifecycle methodology. As any of the best software consulting companies will tell you, such an approach allows for more structure to the definition and more agility within the execution and delivery.