How do you know when you’re done with something? With software applications, there are at least three levels of doneness – business, customer/user, and technical. There are different metrics for doneness at each level. Tests at each level can help create a unambiguous definition of done for that level.
Here’s a diagram of the different levels. The large circles represent the system, before (“as-is”) and after the change (“to-be”). The person is a user of the system. The inner circles represent the modules of the implementation of the system. The levels are explained in the following sections.
At the business level, the doneness test revolves around whether the business value of a particular capability or feature has been achieved when going from the “as-is” system to the “to-be” system. Business value can include increased market share, increased revenue, decreased expenses, and increased customer satisfaction (more promotors and less detractors). The exact details of a capability or feature necessary to attain the business value may not be known. They may come from marketing and sales or internal business departments.
Lets’ give an example. Acme’s GPS Mapping software has a 1% market share. They want to increase this to a 2% market share. That’s the business doneness test.
Marketing believes that an additional compelling feature, an errand planner, can accomplish this. Errand planner maps the shortest or quickest route through a set of places that one needs to go and determines the sequence in which to drive. If deploying the basic errand planner does not pass the business test, then the business might try an advanced version of errand planner that accounts for the timing of traffic lights and the type of turns (right or left).
Business tests are created by the business prior to a feature being detailed. They may not necessarily pass until the “to-be” system has been deployed for a while. In some cases, the test may pass due to other business environment factors, not the implemented feature. For example, a viral youtube video with a celebrity using the application might be the real reason for the increased market share.
At the customer/user level, doneness concerns whether the particular item being developed is ready for deployment. The doneness tests are the acceptance tests provided by the customer and users. These customer/user tests are usually stated as an interaction between the user and the system with enough detail that they are unambiguous.
In our example application, a customer/user test would be whether the shortest route between all the errand locations was found correctly. These tests are often expressed in a given/when/then format. Here’s an outline of an example test:
Given a set of destinations:
- Grocery store at a specific location
- Shoe repair shop at a specific location
- Cleaners at a specific location
When the shortest route is computed from my house
Then the route is:
- Shoe repair shop
- Grocery store
Customer/user tests are created by the triad (product owner, developers, and testers) prior to an item being implemented. They must pass before an application is deployed.
At the technical level, doneness is about whether a particular module performs according to the design of the system to pass the customer/user tests. Technical tests can revolve around a single method, a set of methods, or combinations of components. They are created by the developers, architects, and others involved with the implementation. They must pass before the application is elevated for the customer/user tests. An outline of a technical test for one of the modules that will implement the errand mapper could be:
Given two specific locations
When the distance is computed
Then the distance should be the correct value.
This module would be used in combination with other modules to form the implementation that will pass the errand mapper test.
There are different types of tests for doneness at each level – business, customer/user, and technical. If you start with an agreed upon doneness test, then determining when done has been achieved will be easier for all.