Posted by Cary Toor
Most start-ups need to develop software. I have worked with many Entrepreneurs who are building software to get their companies off the ground, including web apps, phone apps, and programs using natural language processing and artificial intelligence. Some of these Entrepreneurs come out of the software industry. Others are building software for the first time. Virtually all of them have one thing in common: they struggle to get the software into their customers’ hands.
Every start-up I have worked with has been short on both money and time. Delays and cost overruns can cause unbelievable stress and even end a venture before it has a chance to get to market. Unfortunately, in the software development world, delays and cost overruns are normal, even expected. According to the Standish Group’s 2015 Chaos Report which examines the success of software projects, less than one-third of all projects done by sophisticated IT organizations were deemed fully successful. About one-fifth were total write-offs, with the remainder lacking significant functionality when time and money ran out. Very few start-ups fall into the category of sophisticated IT organizations, which reduces their chances for a successful project.
Since I work with start-ups every day, I have tried to come up with a very brief primer to improve the chance that Entrepreneurs will succeed in their software development projects by identifying a few simple strategies and techniques which have been shown over time to dramatically increase the chance of project success. If you are experienced in software development, many of these strategies and techniques will be familiar to you. However, they bear repeating in this context since, many times, experienced developers run into just as much difficulty (although maybe of a different type) that novices.
Software is Evolutionary
One of the primary reasons software is difficult to build is that it is difficult to define what needs to be built (referred to as requirements). Even if you know what you want, it is difficult to get it right the first time. Getting it right means a lot of different things:
- The software performs the functions you want.
- The software operates smoothly, without errors or problems.
- Your customers like the software enough to use it and can actually figure out how to use it, in most cases without instruction (or don’t simply reject it).
Typically, an Entrepreneur starts with a plan in his or her mind to build software that encompasses all of the functions he or she can think of. If the business successfully implements all of these functions and gets the software in front of customers in their first iteration, they quickly find that many, if not all, items need to be redesigned, reworked, or otherwise revised. I would argue that this situation is significantly worse for start-ups than for established companies because start-ups have unique idea where established companies are typically upgrading or reengineering an existing process or adding functionality to an existing business. Established companies also have typically have stronger knowledge of and relationships with their customers than early-stage start-ups.
The National Science Foundation (NSF) teaches a methodology for start-ups called I-Corps (for Innovation Corps) that focuses on a couple of major areas that are pertinent to this problem:
- Make sure you know your customer and what your customer wants.
- Initially go to market with the minimum viable product.
I-Corps training focuses on getting the Entrepreneur to meet with a large group of potential customers to vet their product idea and functionality. This has the advantage of making sure that the start-up will (1) better define the product, (2) validate the market for the product before it is built, and (3) work through the required functionality with potential customers.
The NSF methodology then calls for the development of a Minimum Viable Product (MVP). This product needs to be simple and have the minimum number of functions and features necessary to implement the business solution; with all unnecessary functions and all bells and whistles removed. If you have talked to customers, you can do this by making a list of functions and features and marking them as (1) Must Have, (2) Nice To Have, and (3) Optional. Only implement the Must Haves on the first go around. Turn this list into a project plan that will allow you to assess and measure your progress.
This strategy will greatly simplify development, reduce development time, and lower cost. If the functionality is simple, it is also less likely that significant rework will be required, although enhancements and features will need to be added. Limited product testing with customers will tell you what needs to change or be added before releasing the product to the marketplace (see below). Remember, it is much less risky, much less expensive, and much faster to make enhancements to a base product than to have to do major rewrites before you can release the product.
I constantly hear the following reframe from Entrepreneurs I work with: “We only have one chance to get it right.” I would argue that you only have one chance to get your product to market. It needs to be bug free and easy to use, but you are better off trying to start with the minimum product and then add functionality and features based on customer feedback. That is evolution, a strategy which was used successfully by all of the successful technology companies I can think of including Google, Amazon, and virtually everyone else who has a successful software-based product!
A Few Word About User Interface Design
Everyone is very concerned with User Interface (UX) Design. The minimum viable product strategy goes for UX design as well. Implement the basic UX features and eliminate as many bells and whistles as possible for the initial release. It is better to have a consistent, easy to use UX pattern than to completely minimize keystrokes.
Most importantly, before you start coding, make sure the UX is easy to code! I have seen many UX Designs that look great, but are very difficult and time consuming to code and test.
Many times, we use a UX design based around a summary – detail model in which summary information is displayed and then edited or added on detail screens. Although this strategy does not produce the optimum UX, it does have the advantage of being (1) easy to code and test, and (2) easy for users to learn. Make sure you mock up the UX before you move into coding so the developers know what they are supposed to build, and, it goes without saying that you need to make sure the developers build what is actually contained in the mock up (more on this below).
Changes Kill Projects
One of the reasons why software project are always behind schedule is changes that occur during coding, to either the application functionality, operation, or user interface (or all three). Circumstances will definitely force changes during development and the longer your development takes the more changes will be required. Although I understand that it is necessary to make changes during development, you need to keep them to a minimum. Unless the changes are critical, don’t make them until after the first release. The more changes you make, the more bugs will be created and the more time you will spend getting the software into production.
Here are some strategies to keep changes during development to a minimum:
- Document all of the functions you will be implementing, what they are supposed to do and how they will work. An easy way to document is to start at the function level and then list all of the features inside the function. (Functions are high level and features are capabilities inside a function.)
Feature 1 Detailed description
Function 1 Description
Function 2 Description
…
I realize that this is time consuming and requires a lot of discipline, but it is substantially less time consuming that making changes during development. Also, it will force you to think through what you want to build, and it will make it easy for other people to get involved in the testing process.
- Write down the business rules and work flows that are needed in detail so you can give it to a developer to work with.
- If you have a user interface, mock it up before development starts. Use a Visualization Tool that allows you to paint fields onto screens and link screens together (like I-Rise, JustInMind, or Axure), or just do the mock-ups in Microsoft Access. Don’t deviate from the mock-up.
Turn this into a project plan that you can track!
As you make changes, preferably change the documentation and the visualization or at least write down what the changes are so you can track them. Most importantly, you need the discipline to stop making changes or to push changes to the next release.
Iterative Development
I have been involved in a lot of development projects over the past 3-decades. Projects are successful to the extent that you show them to users during the development effort! Conversely, they are almost never successful when users don’t get involved.
Create a group of about half-a-dozen committed or excited potential customers who are not afraid to give feedback. Although I am not committed to any particular development methodology, think Agile! Right before the end of each major milestone, get this group together and walk them through the application. Get their feedback and implement changes which make sense and follow the minimum viable product dictum. This is the place to identify and fix the problems with the lowest time and cost impact.
Test the Software First
As I mentioned above, I have heard the phrase “we only have one chance to get it right” more times than I can count. It’s true, but it really means when you release the software to customers, it must be bug free! That means: (1) it must perform the planned functions correctly, (2) it must be easy to learn and use, and (3) it cannot break or terminate abnormally.
The only way to ensure this is to thoroughly test the software under multiple scenarios. Thoroughly test each function or page of the application one at a time and work with the developer of that page or function to resolve any bugs before moving on to the next one.
After you have done that, retest the entire application and make sure it works end-to-end.
An important tip: Although it may seem unintuitive, it is important to reduce the number of developers touching the code as you get down to the end of the bugs. At this point, more developers means more errors.
Once you are satisfied that the software is bug free, provide it to one or two of your customers to use prior to general release (a Beta Test). Assuming that the software is bug free, you will get good feedback including (1) identification of functions and features that are must haves and need to be added, (2) functions or features that need to be enhanced, and (3) an overall assessment of usability. Depending upon how critical this feedback is you may want to consider making minor changes prior to general release of your product.
Different Environments
Code needs to be kept in different environments such as development, testing, and production. Once you go live and start making changes, you will need a set of environments for that release as well. Using GitHub or a similar code management product can greatly simplify this.
The Bottom Line
Since I have lived and breathed software development for over 3-decades, I can go on incessantly about this topic. (If you haven’t had enough, see my other blog posts at “TVenturesCorp.Com/blog.”) However, the bottom line is that to be a successful business you need to get your software into the hands of your customers! If you can do that, you have a great chance of success. If you can’t do that, it doesn’t matter how great or elegant your product idea is since you don’t have a product!
As a Co-Founder and Principal for Information Concepts, a software development firm, Cary Toor directly managed or oversaw the development of hundreds of software development projects over the 30 years. Cary recently founded T-Ventures Corp to help small companies implement their software products and projects. (Cary.Toor@TVenturesCorp.Com).