Learning Roadmap: Creating Software as a Service

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:

  1. I have a working piece of software that is publicly available
  2. 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
  3. The software I create has a paying customer
  4. The software I create has over 10 paying customers
  5. 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:

  1. What I have learnt is sufficient enough to allow me to complete the task at hand efficiently
  2. What I have learnt is sufficient but not efficient
  3. 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.

Learning Guidelines

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:

  1. Development and deployment of robust software for the web
    • Agile software development
    • Aspects of SaaS
    • Software Architecture
    • Languages and frameworks
    • Test Driven Development
    • Databases
    • Deployment
    • Tooling and Productivity
  2. 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.

Terminal Cheatsheet

Set default directory when ssh’ing into a server

Set default directory when ssh’ing into a server: Add cd /dir/to/start/in to .bashrc on the server

Merge one directory into another: rsync -a /src/ /destination/

Search for occurrences of a string in a directory and it’s sub directories but only output the filename, useful if the string you’re searching for is found in a log because it will prevent the string being output a gazillion times: grep -rl "string to search for" ./dir/to/search

Quickly check if you have opened a php tag like <?: grep -rn '.' -e '<?' | sed '/<?php/d' | grep '.php'

WHM Specific

The following are specific to servers running whm.

Show what sites are using a specific php version:

whmapi1 php_get_vhosts_by_version version=ea-php56

Learning website development: Starting right

I recently attended a meetup where quite a lot of people where new to web development and where interested in pursuing it as a career. Throughout the course of the event I realised that a lot of these people where causing themselves a lot of headaches and as anyone who’s been through the process of learning web development will know, the last thing you want to do is be giving yourself more obstacles and headaches than what’s necessary.

Continue reading “Learning website development: Starting right”

Defining a “real need” in business and product development

In their book Lean software development: An Agile Toolkit Mary and Tom Poppendieck discuss how 3M encourages all staff to develop new products, they also discuss the approval process for these products. At 3M there are three very small “hurdles” a team must surpass to progress their idea to the next level:

Continue reading “Defining a “real need” in business and product development”

Live like nobody likes you

Often times when I’m thinking of writing a post, creating something or saying something to someone I don’t. Why? Because I start to think what I’m about to put out into the world will cause someone I hardly know (or even someone I know well) to think less of me/not like me. I think a lot of people who struggle with anxiety have experienced this and it can really prevent you from doing something good/positive/incredible. How can we get around this? Live like nobody likes you.

Continue reading “Live like nobody likes you”