As a software enthusiastic for more than 25 years and 15 years as the CEO of a boutique software company, I have led well over 100 software projects.
Although technologies and people differed each time, the principles remain the same.
This time, I would like to focus on that small part of specifications that has a huge impact on development time: Specifications.
Obviously, we all know that is important to write accurate specifications. But how do we achieve that?
Specifications by Measurable Objectives define the outcome for specific scenario in a methodical way. For each feature we should answer the following questions:
- What is the input? What is the scale of that input?
- What is the end user’s result (e.g. the output)? Define the format and scale.
- Does the result satisfy the end user needs? Yes / No
- What is the amount of time it takes to return the result? Usually in seconds.
Let’s see an example:
Suppose our end user would like to import a CSV file from an external system into our web based system.
Sounds simple, doesn’t it?
The quick and dirty way
If we want to implement this quick and dirty this is how we would do it:
- Create a new web page with the ability to upload a file.
- Let the customer wait until CSV is imported.
- Send back the result using HTML table on the page.
The quick and dirty way would be a big mistake. Let’s see why.
The right way – Using Specifications by Measurable Objectives
If we use specifications by measurable objectives we can overcome many issues before we start coding. Let’s answer the specifications questions defined above:
What is the input? What is the scale of that input?
Simply by asking the question, our end user told us that it’s CSV file of 100,000 rows. Our implementation plan will include a loader while uploading this file.
What is the end user’s result (e.g. the output)? Define the format and scale.
We thought about a HTML table containing the import result of each row. We will display the table on the web page from which the CSV file was loaded. This is not our final answer. See the next section to understand why.
Does the result satisfy the end user needs? Yes / No
To answer this part, we showed our end user a sample of our CSV results and ask whether this satisfies her needs. We recommend using 5 whys to verify that results will be useful.
While applying this process we learned that an HTML table of 100,000 rows would include all results but will be useless to the user. Tracking how many rows succeeded and how many failed will be impossible, not to mention it will slow down browser just to render the results. Therefore, our choice would be to use a CSV file as the result.
What is the amount of time it takes to return the result?
We first asked our development team how long will it take to process the file. The team estimated it would take 15 minutes to process 100,000 rows. Waiting for 15 minutes for a page to load is not a friendly option.
We would recommend to process it offline and send results to the customer by email.
- Using specifications by measurable objectives is just about asking a few simple questions.
- The example above demonstrated how using Specifications by Measurable Objectives can save a great amount of time wasted on the wrong path. Moreover, by asking the right questions we can set the right expectations with our end user, providing that user with a useful and effective tool.
Feel free to share your thoughts!
Eyal is the founder and CEO of Sinapis Technologies, a boutique software company, specializing in web based development and cloud technologies.