Friday, April 27, 2012

Deploy Early and Often

We've heard it before - a common practice of successful IT teams is that they deploy early and often. Easy to say, but how might a geographically dispersed team of a dozen or so do this?

We took a multiple step approach to employ this practice:
  1. Set a predictable well-known deployment schedule;
  2. Adopt and aggressively use a modern SCM system (see previous post);
  3. Leverage existing defect / change management system;
  4. Establish great development environment that mirrors production; and
  5. Establish procedures to minimize code conflicts and management overhead.
As per below figure, we chose to go with a monthly deployment schedule. Key factors that played into this decision:
  • Follow best practice - deploy early and often.
  • Be respectful of user's time - exhausted from release one and have real jobs to do.
  • Keep it simple - developers work in one environment / one branch at a time.
  • Deliver product monthly - increase user satisfaction.

Monthly Deployment Schedule
14 Deploy production candidate to TEST
21 Deploy tested candidate to PROD
28 Finalize content of next production candidate

User Schedule
a) Test production candidate until ready for production use
b) Select areas of focus / critical items for next release
28 Review, update, and approve spec updates for next release

Developer Schedule
1-14 Code, test, and deploy assignments in DEV
15-21 Fast turn-around bug-fixes in TEST, and final updates to spec’s
22-28 Get new release assignments, draft spec updates

Field Notes: So far so good. We've completed two monthly cycles here. User satisfaction is way up. As the Deployment Manager, had to invest significant time to get our programmers skilled-up in Git and versed in our ever evolving procedures. But we're getting there, delivering code, and having fun.