A Continuous Delivery pipeline is a (mostly) automated software tool chain that takes delivered code, builds it, tests it, and deploys it. This simple concept gets complicated by tool chain realities: no one vendor does everything that needs to be done in the pipeline, and new solutions are evolving every day.
To make sense of the CD pipeline tool chain, I have taken a close look at the market and have identified a set of tool categories. I'm sure I've missed something, and you may not agree with my categories, and in either case I would like to hear from you! You can either comment on this blog, reach me on twitter (@ksbittner), or email me (firstname.lastname@example.org). If you think the categories sound right, I'd like to hear that, too. This is your chance to help define the continuous delivery tools market.
Continuous Delivery Tools & Technologies
Continuous Delivery is a process by which source code is built, deployed to testing environments, test, and optionally deployed to production environment using a highly automated pipeline. Many different kinds of tools need to be brought together to automate this process. The tool categories described below provide the building blocks of the automated Continuous Delivery process.
There is a scene in the Broadway hit Spamalot in which a peasant jumps up from a cart of corpses and vigorously complains that he's "not dead yet". It's a humorous side-story to the main theme of the search for the Holy Grail. One might be accused of thinking of COBOL in the same way, as a side-story to the current major themes of mobile and web development, or perhaps as a historical footnote to the current narrative. IBM's recent announcement of major upgrades to its COBOL compiler technology provides a good reason to pause in our headlong pursuit of the latest technology to reflect on the value of COBOL applications in enterprise software portfolios.
While mobile and web technologies often garner everyone’s attention, the reality is that most organizations that have been around for more than 30 years still run their core business processes using systems that were written in COBOL. Anything that makes these apps easier to evolve and extend is a very good thing. The reality is that evolution and extension of these apps is critical to business success. In order for the flashy-new-social-networking-enabled mobile and web Systems of Engagement to succeed, the workhorse Systems of Record and Systems of Operation are going to have to evolve apace. This means that they must take advantage of the latest architectures as well as being refactored and modularized to align with a service delivery model.
Agile software development practices have been transforming AD organizations for more than a decade. With more rapid development cycles has come a bottleneck at the deployment boundary - at the frontier between Development and Operations. The DevOps movement is working to remove this bottleneck, and in the process is transforming both Dev and Ops for the better. In many respects it is a logical evolution of the agile movement, but practices like continuous deployment are deeply transformative of the way that organizations think about customer engagement, business engagement, testing, development and requirements - in fact, nearly every aspect of agile development is subtly but powerfully affected. The implication of a check-in resulting in code being deployed to production gives a whole new emphasis to the word "commit"!
In theory, the agile Product Owner is a simple yet compelling solution to a tough problem: the development team needs, and often does not get, clear direction from the business. The ability to eliminate the confusion caused by the cacophony of voices of multiple stakeholders, and the ability to have continuous engagement with the business, certainly make the Product Owner attractive to the development team. And the business benefits, too: they, in theory, get continuous visibility into project health and status. Buried in that last sentence is the phrase that often sinks good ideas: "in theory", and therein lies a problem.
When we are developing software and find components that have responsibilities too broad for one component to encompass, we "refactor" it, breaking it down into a set of components with more manageable and cohesive sets of responsibilities. We have an analogous problem with the Product Owner, whose responsibilities are so broad as to be nearly impossible for one person to fulfill. In brief, the Product Owner is expected to:
Understand the needs and desired outcomes of the business
Negotiate consensus among stakeholders
Represent the interests of all stakeholders to the development team
Define the characteristics of solutions that meet the desired outcomes
Be a change agent in the organization to support the solution
Communicate and promote the vision to all interested parties
Define and prioritize items on the Product Backlog