One of my main focuses for 2020 is to learn how to develop and release Software as a Service (SaaS). This article outlines the process I’m going to take over the course of the year to accomplish that goal. To start, I want to clarify exactly what I mean when I say Software as a Service to narrow the scope of my learning and ensure I remain focused on a single specific objective.
My Definition of SaaS
My definition of Software as a Service is a web app–such as trello–whose business model is based on recurring payment in exchange for access to some or all of the software. The software must provide a service to the end user which is valuable, value is created by saving the customer time, money or both. My focus will be to create standalone web apps and as a result software the exists solely to extend other software, such as WordPress plugins, are not included in my definition.
What does success look like?
I will know that I have been successful when one or more of the following is true:
- I have a working piece of software that is publicly available
- I have a working piece of software that is publicly available that can accept payment in exchange for access to some or all of the features
- The software I create has a paying customer
- The software I create has over 10 paying customers
- The software I create has over 100 paying customers
Success is not all or nothing, it should be looked at as a scale of success. Failure is also expected and welcomed throughout the learning process but recovery should be quick and lessons should be learnt from the failure.
Approach to learning
My approach to learning will involve understanding just enough theory to be able to put what I want to learn into practice. I will constantly seek out the quickest way to gain a solid understanding about a subject. For example, if I want to learn about agile development I could spend hours reading a book about agile or, I may find a website that explains the topic well, watch a some videos and gain enough understanding so that I reach a point where I feel confident enough to put what I’ve learnt into practice. After attempting what I’ve learnt I expect one of three outcomes:
- What I have learnt is sufficient enough to allow me to complete the task at hand efficiently
- What I have learnt is sufficient but not efficient
- What I have learnt is insufficient and means I cannot complete the task
I imagine item number one will be a rarity but welcomed non the less, items two and three are more probable and in situations where one of them is the outcome I will return to theory to better understand the task I’m trying to complete. I hope this approach to learning will give me a quick feedback loop which will allow me to move forward quickly and efficiently.
The list below is an initial outline of the items I feel I need to learn/get better at to achieve the goals above, I expect this list to change and grow throughout the year:
- Development and deployment of robust software for the web
- Agile software development
- Aspects of SaaS
- Software Architecture
- Languages and frameworks
- Test Driven Development
- Tooling and Productivity
- Business aspects
- Validating a product
- Identifying opportunities and value
- Marketing the product/software
The above is an attempt to gain clarity of thought and clearly specify what it is that I want to achieve in the coming year. Although this article seems to take a somewhat set in stone attitude towards my learning process it should be noted that I expect the above to change throughout the year. This is merely the first step in documenting what I want to achieve and is part of a larger plan to document the overall ‘story’. I know that there are many, many people out there who are smarter and more experienced than I am in the area of software development and I welcome your thoughts, feedback and criticism.