Where is my Amazon Package?
As we all learn to adjust to the new normal, many of us are becoming even more dependent on software. Software is responsible for bringing us our news, our entertainment, our meetings, our social interactions, our groceries, and much more. Earlier this year, my mother-in-law ordered groceries online for the first time. In her first experience, she quickly realized online ordering was much easier than going to the store and very reliable. She started with a small order to see how it worked – something like:
1 dozen eggs
1 half gallon of milk
1 box of granola cereal
2 boxes of Angel Hair pasta
1 small bag of baby peeled carrots
1 loaf of French bread
1 package of fresh mushrooms
2 pounds of boneless chicken
She was quoted $43.98 for the order. This price included free same day delivery. As part of the process, she was notified that “Some items may be out of stock due to increased demand. By allowing substitutions, you help us fulfill more of your items.” For each item ordered, she was able to provide some guidance for how to proceed if that item was not available. Over the next few hours, she received three text messages:
Message 1: Confirming her order was received,
Message 2: Providing her with the expected delivery time for later in the day, and
Message 3: Notifying her that the order was delivered successfully.
Her groceries were delivered to her house later that evening with everything she ordered for the price she was quoted. With the three text messages, she knew what to expect and when. There could have been substitutions for some of the products, but in this case there weren’t. Now she orders online on a regular basis and each time the groceries she orders are delivered on schedule at the price she was quoted.
Does Your Software Development Team Deliver as Well as Amazon?
In the example above, my mother-in-law requested some grocery items to be delivered by an agreed upon time and at an agreed upon price. She continues to use the service because it met her expectations. If Amazon (or other delivery service) entirely failed to deliver your order over 20% of the time and delivered only part of your order and/or was late on your order over 45% of the time, would you keep ordering? Most people would not – yet we continue to run software projects with success rates even worse than this. The first Standish Group Chaos Report (published in 1994) and every Standish report published since has shown software development projects are delivered on time and on budget less than 40% of the time each year. Obviously, there is a lot of room for improvement here!
Without going too deep into Agile software development best practices, there are a few comparisons between an online delivery process and a software delivery process that would lead to more successful software delivery projects. The online delivery process above
1. Created a clearly defined and documented list of requirements upfront: Admittedly, selecting products to order on Amazon is a very simplified requirements definition process and some may argue this is an unfair comparison to software development projects. At the same time, many teams cite unclear requirements as a key reason for their project failure. No requirements mean failure since there is no finish line. You would not place an order at Amazon without identifying what you want by when. At the same time, you would not detail your list to say “Whole Grain Rolled Oats, Whole Grain Rolled Wheat, Brown Sugar, Canola Oil, Dried Cranberries, Almonds, Dehydrated Apples, Inulin, Whey, Sugar, Nonfat Dry Milk, Glycerine, Whey Protein Concentrate, Natural Flavor, Honey, Sunflower Oil, Natural Mixed Tocopherols Added to Preserve Freshness” to say you wanted a box of Quaker Simply Granola cereal. Define your project objectives (or OKRs) and high-level requirements to start. Then include a plan to iterate with the product stakeholders to further refine requirements during the project. This is similar to substitution options from Amazon and leads into the next point.
2. Outlined guidelines for what to do if any requirements could not be met: When I shop with Amazon/Whole Foods, I can define three options for substitutions: Best available (based on Amazon’s logic), Don’t substitute, and identify the item you want as an alternate. There are many ways great teams handle “substitution” – too much to cover here. At a very high-level, there are three guidelines to start this step: 1) Define OKRs for the project so that everyone understands and agrees to the “Why.” 2) Categorized your requirements so that everyone knows which requirements can be dropped if time runs short and which cannot. Decide this at the start of the project. 3) Build iteratively with regular reviews with product stakeholders for feedback and make necessary adjustments along the way.
3. Provided regular and accurate communication on progress: This is one of my favorites. When you order from Amazon, they send you multiple messages to let you know your order is progressing through each step correctly. Not only does this build trust between you and Amazon, it also allows you to alter plans (when needed) to align with the delivery schedule. The same is true between a development team delivering projects – it builds trust and allows for adjustments when needed.
As a society, we are becoming more and more dependent on software for our personal lives and our businesses. Whether they realize it or not, most companies rely on software for their very survival. If your software development teams are failing to deliver, how can your company succeed? These three simple steps: clearly defining requirements upfront, outlining guidelines for how to handle unmet requirements before they happen, and ensuring you have regular and accurate communications throughout the process can ensure you deliver software more like Amazon delivers packages.