Continuous Production - Production-ready software…any time
Production-ready software, on-demand
The general notion of the practice of Continuous Integration is that it’s performed during the “development cycle”. I think we need to expand this into areas typically thought of as “latter lifecycle” activities. In my experience, even the most Agile of projects aren’t considering all aspects of what it takes to make software “production ready”.
Over the past year, I’ve been advocating a much more intensive criteria for Continuous Integration with my peers and customers, which is more like “Continuous Production” meaning you can produce production-ready software on a daily or even a continuous basis. Effectively, we’re talking about extending the Continuous Integration model into all environments (Test, Stage and Production), not just the development environment. In fact, at Stelligent, our purpose is to get our customers to production-ready software on a daily basis.
A posting on Wikipedia describes Continuous Production as “a method used to manufacture, produce, or process any product without interruption. There is no discrete rate at which goods are produced, as opposed to a batch production process, or job production.” I’m suggesting we move toward a similar model for developing software.

A lot is bundled in this term, Continuous Production, though. In my experience, it means that you automate most everything it takes to create software so that it can be deployed into the user’s environment any time. It means you may automate some or all of the following:
-
Compilation of source code and tests - this is a given for CI.Tools: Ant, MsBuild, rake, NAnt or similar build tool.
-
Inspections - execution of static/dynamic analysis checkers: code coverage, code duplication checks, coding standards, cyclomatic complexity and dependency analysis - Some shops are doing this with CI. Tools: PMD, CheckStyle, FindBugs, JavaNCSS, JDepend, Cobertura, NCover, NProf, Source Monitor, NCover
-
Deployment - Deployment and repeatable configuration to servers (e.g. JBoss) - Some shops are doing this with CI. Tools: Application Server-specific Ant tasks (e.g. WebLogic)
-
Remote Deployments to target environments - For example, from a build machine to staging environment (for web containers and database servers). Tools: Ant, Java Secure Channel and SmartFrog, Capistrano
-
You will need a way to rollback to a previous deployment (this includes database changes)
-
-
(Optionally) Creation of installation distribution - Few shops are doing this with CI. Tools: NSIS and antinstaller, InstallShield .
-
(Optionally) Generation of distribution media - Few shops are doing this with CI
-
Source labeling and (possibly) build labeling - Some shops are doing this with CI
-
Automated notification of build status - This is a given for CI via Email, X10 devices, etc.
-
Automating the promotion through QA, Staging and Production environments - Promote the binary and accompanying artifact through each target environment. Tools: Build Management servers such as AntHill Pro are useful for build promotion
Of course, the actual steps will vary depending the type of software application you are producing whether it be a rich client, web application, embedded or other…but you get the point. Continuous Production, to me, means you have the capability to create production-ready software whenever necessary .
What I am saying is that the creation of production-ready software should become a “nonevent “.
The benefits are numerous, but here are a few:
-
Decisions can be made based on working software , not on a task item on a project management chart - no more “it’s 80% done”
-
Eliminate the reliance on an individual with specialized knowledge to produce the software for production
-
There’s “done”, there’s “done, done” (coded with acceptance tests). With Continuous Production, it’s “done, done, done” and ready for release to users (code, acceptance tests, operating in the customer’s environment)
Note: This does not mean that you will be taking up cycles producing production-ready software with every change to the version control repository. Test, Stage and Production builds are more likely to be performed on demand (by a person). However, the point is that your build environments are capable of building production-ready software on a continuous basis.
There are very, very few projects that are doing this right now. I’d have to guess it’s much less than 1%. It makes me think of the saying “it’s not the destination, it’s the journey”. If your team sets this as a goal, the closer you get to it, the less you’ll be spending time on environment-related, repetitive and error-prone issues and the more time you spend on new features and improvements to the software. Is it possible, right now, for every project to do this? Probably not. However, once you start asking questions like “What do I need to do to make this feature production ready?”, it changes your perspective on everything from coding to testing and deployment.
In reality, I think even the most automated development environments still need (or should) have a manual component when creating software that is production-ready. This may include usability testing or even a simple manual sanity check. But, I think the more we move toward this model, the less headaches we’ll have and the better our estimates.
In my book on Continuous Integration, I make a reference to something Tim O’Reilly mentioned regarding Flickr’ s ability to deliver updates to its web software as frequently as every 30 minutes. This is only possible if you’ve automated many of the deployment steps.
Let me know if you or someone you know is doing this or moving toward this type of model. I’m curious to hear your experiences with it.

February 4th, 2008 at 3:26 pm
I’d love to see a better resolution of the continuous production picture you’ve got there. Looks very useful for aligning the team with this kind of thinking.
February 4th, 2008 at 5:15 pm
[…] Read the rest of this great post here […]
February 4th, 2008 at 10:38 pm
In my project we execute CI and today it’s very natural (we have some problems in the beginning to make the red builds be green), but we aren’t ready to deliver to clients the new release using only the CI checks yet.
Today the product have to be tested in QA department before and so, if it’s aproved, we can release this version.
We are testing some QA scripts running, but only in our nightly builds, when it’s stable, we will put in the CI scripts.
February 5th, 2008 at 3:22 am
This is definitely the way to go. I’ve done it on a variety of projects, and it’s fantastic knowing that you can ship at any point. One of the teams I coach does weekly iterations but releases a few times a week.
One of the secrets to this is building the interface in a fashion that’s backwards from how a lot of people do it. Instead of, say, starting by adding a new link in your navigation, first make the page work and then link it in to the rest of the site.
It also helps to work very incrementally. Building a complicated flow with a lot of fields? Start with the absolute minimum of steps and fields, and get that working. Only when that is checked in do you go back and add complexity.
Another trick I see used a lot is a switch for turning a new feature on. The code is checked in and you can enable the feature in your QA environments, but you don’t switch it on in production until the product manager is ready. A bonus of that approach is that you can do a new feature launch without deploying anything; you just flip the switch.
February 5th, 2008 at 5:22 pm
[…] This entry was written by Paul. Bookmark the permalink. Follow any comments here with the RSS feed for this post.Content related to Continuous Production - Production-ready software…any time.Our rate is: […]
February 7th, 2008 at 1:26 am
[…] On the same line there is another article: Continuous Production - Production-ready software…any time. […]
February 8th, 2008 at 9:59 am
[…] A colleague pointed me to this article about Continuous Production. It is a logical extension of “regular” continuous integration, and is an awesome goal for any IT shop. Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages. […]
February 8th, 2008 at 12:36 pm
I’ve recently introduced CI as a development practice at a client site - using Hudson, Ant, NUnit, and Subversion - with plans to introduced PMD, FindBugs, CheckStyle within the next 30-60 days.
We are also using statSVN and WebSVN.
We weere evaluating PushToTest 5.1 RC1 recently - but have opted to use WebLOAD 8.1 - and will incorporate some automatic load testing as part of our CI.
February 8th, 2008 at 2:09 pm
I wonder if this is similar to MultiStage Continuous Integration made possible by the Accurev stream-based SCM tool? Google time…
February 8th, 2008 at 2:25 pm
>>I wonder if this is similar to MultiStage Continuous >>Integration made possible by the Accurev stream-based SCM >>tool? Google time…
I don’t know much about this particular feature of the tool, but as you might guess, much of “Continuous Production” is about creating the automated processes that *would get promoted*. The promotion mechanism is important, but ultimately a sidenote in “Continuous Production” because most work is around development teams writing the automated tests, deployments, installers, etc. to achieve this goal.
July 16th, 2008 at 4:35 pm
Paul,
Is that diagram available for general (in-house slide deck type) use? Is it possible to get a higher rez version?