Bob was out walking his dog, and, being fed up with his general lack of athletic capabilities, decided to do ten push-ups at every stop sign. Hot and sweaty when he gets home, he realizes he cannot remember how many push-ups he did in total, and thinks it would be nice to have a way to track the work he just finished. After a quick shower and a smoothie, he does a little research and finds that no one has created a specialized dog-walking-workout application. Since Bob is a seasoned mobile application engineer he decides to fill the market niche himself.
As Bob sets out to create this application he will have a myriad of tasks to accomplish, which can be grouped into the Three Foundations of Software Development:
- Product Ownership & Design
- Engineering & Operations
- Customer Relationships
A solo entrepreneur like Bob will switch contexts between these foundations, without even realizing that he is doing so. Bob settles in with a cup of coffee and, as the product owner, spends some time brainstorming features and user flows for the application.
This foundation requires Bob to operate in a creative space. His best thinking will happen when given room to breath, or while doing other tasks that do not require his full focus. In fact a lot of his ideas will come when he is not "at work". Creating the space to enter this creative mode is the best way for Bob to ensure that he can continue to generate good ideas.
He documents his ideas as best he can, but this documentation generally acts only as a way to jog his memory and encourage further exploration when it comes time to implement features later. These notes are likely unreadable to anyone else, the important context for the how and why of the product's functionality is contained in Bob's head.
With a general idea of what he wants to build, Bob spends an evening engineering a proof-of-concept of the application. He creates the basic structural elements necessary for the application and a primary feature flow. Over the next week he proves out his ability to run the application on multiple mobile devices and store and retrieve data. Over the course of this first pass he has also generated a to-do list of work to get to over the coming weeks.
The focus of this foundation is one of iterative improvement. Engineering can often be thought of as a giant to-do list, but it is a to-do list that never ends. During development new problems, and better and more optimal ways of organizing and executing the code, are discovered which get added to the list of to-dos. Iterative development also influences product ownership and design. Often platform, data, time, and code limitations will require scope adjustments, and thus change the definition of done in the short term.
Over the coming weeks Bob sits down to work on his application as he has time, landing on something that he thinks is market ready. While building the application he has continued to think of additional features that could make the application even better. He can see the cost of adding such features and delaying his initial release, and because he is able to communicate well with the engineering team (Bob talks to himself quite a bit while coding), he correctly labels these features as out-of-scope for the initial product launch.
As Bob approaches his launch date he realizes that he has none of the standard promotional and marketing items necessary to promote his new application. He will also need to be able to track various usage metrics and get feedback from customers, all of which will inevitably lead to continued iteration on the application in the future. These customer relationship elements of the process are Bob's least favorite, but he recognizes their importance to achieving product adoption in the market.
To start he gets some friends to beta test his application for free, from which he gets a lot of feedback about how the application feels to use and what their pain points are, if any. While this initial beta test is going on Bob leverages existing software to create a simple marketing website, newsletter, and prepare an ad campaign for launch.
During the beta he receives a request to have the ability to organize past workouts for easy access and repeatability. Bob thinks through how this feature would work, confirms that it is a good fit for the customer, and that he can build it without delaying the launch. This process leverages all three foundations to confirm that the work should be done, and the feature is added just in the nick of time before launch date.
Ultimately Bob launches on time, his ad campaign drives quite a bit of traffic, and the application quickly jumps to the top of various mobile store "Best Of" lists. In fact, he is so successful that he quits his day job to work on the application exclusively. The application even has enough demand, and revenue, that it makes sense to grow the business.
Bob's hope is to get some help with the customer relationship and product ownership side of things, since his preference is to spend his days in code. As Bob expands the business the three foundations will still exist, but he will need to grapple with the friction created by the communication between them, which is where we will pick up in Part 2.
Stay tuned for Part 2 of The Foundations of Software Development