Thus I Refute #NoEstimates

In a recent blog post, Woody Zuill – fellow blogger, fellow middle-aged software guy, and fellow banjo picker – gave his personal definition of the #NoEstimates Twitter hash tag that has been the venue for a lot of online discussion lately.

#NoEstimates is a hashtag for the topic of exploring alternatives to estimates for making decisions in software development.  That is, ways to make decisions with “No Estimates”.

Woody and several others in the Twitterverse and Blogosphere have been advocating for making decisions (more accurately, applying constraints) that don’t require estimates, in order to eliminate the need to make other decisions that would require estimates.  Neil Killick recently posted an explanation of how to do Scrum without estimates, including this example:

Instead of depending on an accurate estimate for predictability we can take away the unknowns of cost and delivery date by making them… well, known. The Product Owner can fix the delivery date based on a concrete budgetary and/or time constraint (e.g. 3 days before the Australian Open starts for the Australian Open app is a concrete time constraint, and “we have to build something for $30,000″ is a concrete budgetary constraint).

Implicit in the example is that, once time and schedule are fixed, only the scope is flexible.  While this would certainly make things easier for the software developers, it adds complexity for everyone else.  To explore Neil’s example, let’s assume that the Australian Open app is a public-facing, self-service web site where the general public can buy tickets, see the daily results, read and comment on the news coverage of the event, and possibly follow links to the personal web sites of the players.  But what else is involved in serving the public audience interested in the Open?  I ask because, in the real world, not all members of the public are going to use that web site.

Presumably, the Open will have a call center to handle inquiries and purchases from those who don’t find or can’t access the web site.  They may also have an interactive voice response (IVR) system to support certain kinds of queries and possibly even ticket purchases.  So the Decision Makers will want to make the Australian Open app fit into this operational framework, providing capabilities and services for the public that supplement or complement each other.  To do this, they need to have a firm list of capabilities (or scope) defined for each of the three projects – Call Center, IVR system, and web app.  That way, they can staff the Call Center appropriately, work with the marketers to provide instructions to people when directing them to the IVR or app, and otherwise direct user traffic.  But if the Call Center folks and IVR configuration team don’t know until three days before the Open starts what functionality the web app will have, that doesn’t leave them much time to react, does it?

Of course, it might be wise for the Decision Makers to conduct a “buy or build” analysis, since large events are quite common and have spawned a number of service offerings, including Software as a Service.  But in order to conduct that analysis, they would need a firm feature / capabilities list and cost estimate for the internal development effort, to compare it with the vendor offerings.  And if all the internal developers can commit to is cost and schedule, it makes comparisons impossible.

A group of frogs who live at the bottom of a well are enjoying their nightly chorus of croaking, when one of them announces that he is studying astronomy.  When he gets a quizzical look from one of his comrades, he explains that it is the study of the sky.  “You know: that little round thing at the top of the well.”

Complexity will persist in the face of all attempts to reduce it through simplifying assumptions.  Few modern business problems are simple enough to reduce to a small number of decisions, which then drive all other activity.  Apples falling out of trees are fine for explaining gravity to school children, but celestial mechanics has to contemplate multiple bodies.  Similarly, modern business problems are not simply about software.  And that is why we should devote our energies to improving the quality of our software development estimating methodologies, rather than advocating adoption of simplifying assumptions that don’t reflect a holistic view of the operating environment.

Even Data Needs a Green Mentality

I just watched an interview with Kate Parson, a Senior Director at EMC.  She was talking about Project Propel, which replaced their two decade-old ERP solution with a nice, shiny new SAP solution.  The part that really caught my attention was her statement that, early in 2012, they had to start deleting tables in their database, because they ran into “an integer limit.”  They had accumulated so many records that even Oracle couldn’t handle them.  Yes, you read that correctly: EMC, provider of massive storage solutions, couldn’t handle the sheer volume of data records they had accumulated.

I make my living moving customers off of old HR, payroll, and benefits administration solutions and onto a nice, shiny new one in the Cloud.  Naturally, a big chunk of every project is moving records from the old solution to the new one.  We always recommend that customers only move “current” records, rather than attempt to load history.  While you need to retain history records for some period of time, they don’t need to be kept commingled with current records, in the system of record.  They can be stored in off-line databases, with restricted access, or as reports, on paper or in PDF format, or any number of other approaches.  But whatever approach you use, at some point those records will need to be destroyed, in accordance with your organization’s record retention policy for that sort of data.  You guys have a record retention policy, right?

We need to adopt a “Green” mentality for data records.  We need to make proper disposal of old records that have come to the end of their useful lives as much a part of system design and maintenance as disaster recovery.  Ensure that you have a plan to move records from on-line to secure off-line storage at some well-defined point.  Ensure you have the ability to later purge them from off-line storage.  Ensure these activities are scheduled as part of the annual operations calendar.

Of course, some records may need to be retained past their normal lives because of a court order, as part of a legal dispute.  And some types of records may be subject to summary analysis as a class or group, rather than a simple look-up (think Lilly Ledbetter or other sorts of class action lawsuits).  This is why your legal counsel should review your record retention policy, to ensure you keep records as long as required, and no longer.  So the selection of the proper storage tool set for history records has to take into account the potential need for these contingencies.  Be sure you understand all possible uses (and customers) for history records before you settle on a storage medium.

The bottom line here is that proper stewardship of the organization’s data records requires a life cycle mentality.  Just as you have a plan to destroy old hard drives (you do, right?), you should have a plan to manage destruction of old data records.  At some point, all of that data quits being an asset, and becomes a liability; legal, technical, or administrative.  Recognize the risks, and treat them as such.

Things I Learned Managing Fixed Price Agile Projects

When it comes to managing Agile projects, Jesse Fewell is the expert.  He’s one of the founders of the PMI Agile Community of Practice and a senior adviser on the PMI-ACP certification.  And he recently conducted a webinar on managing fixed-price Agile projects.  A fixed-price contract is essentially a vehicle for transferring cost risk from the customer to the service provider.  Consequently, it is incumbent on the service provider to manage that risk, in terms of deliverables, quality, and schedule.

Typically, risk is accepted at a premium, so a well-managed fixed price contract can be more profitable than a time and materials contract with the same SOW.  As the project manager, you are responsible for more than just the deliverables in the SOW.  You are also responsible for triggering invoices for progress payments and managing to the constraints specified in the contract.  Given that I’m currently managing two fixed-price Agile projects, I thought I’d add my observations.

  • When the price is fixed, change management is your only tool for staying out of the red.  Any change in scope has to be documented in a change order, and funded as provided for in the overall contract.  If the menu says dinner comes with soup or salad, you’ll have to pay extra to get both.  IT projects should be managed on the same basis.
  • Have a clear delineation of responsibility with the customer on the process for vetting and approving change requests.  By time the request gets to you, it should consist of “What will it cost us to change …” and it should have already been reviewed by the steering committee as something they are willing to approve funds to get.  Otherwise, you will find yourself typing up someone else’s letters to Santa Claus.
  • On a time and materials contract, activities are billable. On a fixed-price contract, your progress payments will be tied to specific, well-defined deliverablesWell-defined means there is an existing template for this deliverable, and it’s been delivered before on similar projects.
  • A well-written contract will have a clause that each deliverable will be deemed accepted unless specific objections are raised in some number of days.  Ensure your customer identifies who will inspect each deliverable, and briefs them on acceptance criteria and how much time they have to perform the inspection at the beginning of the project.  Make sure they understand their role.
  • Interaction with the customer is a key Agile tenet, but not all interaction is created equal.  Some meetings are necessary in order to produce the deliverables in the SOW.  Other meetings are necessary to manage the project and coordinate work planned and in progress.  Push back on all other meetings, because those are activities, and you’re not getting paid for them.
  • If you are unlucky enough to get a contract with both a fixed price and a fixed delivery date, you must put a due date on every client input, and document every delay.  This is especially true if there are liquidated damages in the contract.  Remind the customer that delays on critical path tasks delay the delivery date, day for day.  Yours are not the only feet facing the fire.
  • If change management is not in your SOW, it is not your responsibility.  But it is someone’s responsibility, and you need to keep one eye on them.  Ensure the customer understands the importance of communication, training, preparations for support of the system in production, and the dozens of other details, great and small.
  • The scope of testing has to be clearly defined, and acceptance criteria specified.  The pursuit of perfection is expensive; don’t let your fixed price lead to enhanced definitions of quality, “since it’s free.”
  • Be very clear on your responsibilities after delivery.  Ideally, it will be expressed in the SOW as a number of hours, over a period of weeks.  In any case, define up front when support begins, and when it ends.

Agile methods produce high quality results via iteration and refinement, but the iterations needn’t be endless. Agile projects can be managed to a cost target based on constraints such as time boxing and clear definitions of “done.”  The key is to be ruthless in enforcing agreed-to definitions of quality and completeness, and ensure your customer is holding up their end of the stick.