Welcome to our blog.
Welcome to our blog.
For the past few years I’ve been heavily involved in tech startups and I’ve decided to put down in writing some tips that I hope others may find useful if thinking about starting a SaaS business.
There can be many places where an idea for a SaaS product comes from, maybe you have had a moment of inspiration or maybe you have been working within a vertical where you believe you can better the existing products. Wherever this idea comes from the first thing you need to do is verify its plausibility by conducting some market research.
Your objective with the market research is to make sure that you aren’t going to be wasting your time and money barking up the wrong tree. Fundamentally what you need to find out is
Quality time spent performing marketing research will help in the long running success of your business. It can also help prevent you from making the terrible mistake of just starting your SaaS business on a gut feeling only to later find out that your product already exists with established companies.
It is well worth documenting the results of your research. You should be looking to highlight some key facts as the headliners. It is these headlining facts that can be used to perk up interest in potential investment. How you perform your research depends on the type of SaaS product you want to build. Typically the web is going to be your best friend. For example, if you idea revolves around a mobile app, it would be so easy to search the app stores for similar products. Not only can you gauge what is out there already but you will be able to get an understanding of feature-sets, pricing, and feedback on the potential competition.
If the market research backs up your idea then the next step is to produce a business plan around it. 🙂
After your market research your next step is to think about, and write your business plan. This might seem like a chore but it is crucial step in starting your business. Within your plan you should be looking to:
Going through each one of these items will help clarify whether your idea for a business is a good one or not. Don’t be afraid to call time on your idea if the business plan isn’t looking too healthy. Your decision to do so will most like save you cash and a lot of stress further down the line.
The other important factor to remember about the business plan is that if you require funding to achieve your goals, whether that be from external investors or a bank, your business plan will be consulted in order to determine the risk associated with the investment. The likelihood is that you will require investment so its absolutely worth spending quality time on your plan to make sure it is up to scratch. 🤔
When it comes to starting any business your decision to take the plunge will inevitably affect your family. Prior to starting your venture you should consult your direct family to gauge their reaction on what your thinking. You should be looking to gain their full blessing because when your in the thick of it you will need their support and guidance.
When consulting your family try not to give them the hard sell due to your desire to start the business. Let them make up their own minds in their own time on how they feel about what you are going to do. Most importantly listen to what they have to say, and whether they have any doubts. If they are fully on board its happy days. However if they are not, then you need to see if you can offer reassurance about any concerns or decide that maybe starting a business at this point in time is not right for you. Always remember your decision is not just about you! 👪
Before starting a business you should assess what your strengths and weakness are. For example if you are a developer you probably have the capability to produce a damn fine product. However, the strength of the product alone isn’t enough to produce a successful business. There will be skills required which perhaps you are weak at or simply don’t possess. Your going to require marketing, sales, networking, account management, finance and management skills for your business.
The key is to identify where you are lacking the required skills and surround yourself with co-founders or contractors that are strong the the areas where you are weaker. As a team of people you will become an entity that is capable as operating as a business.
If you can I would advice trying to co-found a business with a partner or partners. So long as you are able to work together it will become beneficial for the responsibilities and finances to be shared among the founders.
When you first setup your business it is likely that no one will know about your product or the company. In order to make yourself known you will have to start networking. This can be achieved digitally through social media or the old fashion way by taking part in local networking groups or events.
Your main focus needs to be getting yourself known and building trust in yourself and your business. Over time people will come to trust in your product to the point where they will become willing to start recommending your services to their network of business connections or alternatively decide that they would like to become a customer.
When networking keep an open mind over the services that your connections offer. As your business grows it maybe that some of your connections offer services that are beneficial to your business. Perhaps you can utilities their services at a discounted rate due to the report that you have built up with the connection!
Starting a business isn’t an easy ride and you’ll need to work very hard to make it a success. Its important to accept this right from the outset. If you regularly check LinkedIn, the chances are that you would have read posts on topics such as ‘work life balance’ and the benefits of ‘working less but smarter’. If you are in a position whereby you have been lucky enough to secure a nice hefty investment round then you could spread your effort across a longer period of time and enjoy your downtime.
Unfortunately the reality for most people will be that you have a finite amount of cash reserves, a very limited pool of resource available, you are playing catch up trying to develop your product, oh and there is a business to run as well! The best thing you can do is to try and plan key milestones of where you need to be by a given amount of time. This will force you to be smart with your time but you will also discover that you’ll have to put the effort and time in to achieve your milestones.
The important thing to keep in mind is to be self disciplined. You will know when you are starting to loose concentration and focus. This is when you should stop at a convenient point and rest otherwise you will become counter productive. I’m sure you have had occasions where you start a fresh working day only to discover the madness created the previous evening! This is what needs to be avoided as time to resolve the mess you have created is money down the drain.
Remember its going to be marathon and not a sprint, work hard to achieve your milestones, but don’t exhaust yourself by the first hurdle. 😉
When starting a business there will be a lot of work tasks that require your attention that will feel alien to you. For example as a developer your comfort zone is likely to be around creating the product. However, focus on the product alone will not be enough to build the business. On a daily basis you will find that you’ll have to come out of your comfort zone in order to deal with situations as they arise.
The phrase wearing multiple hats springs to mind. In the early days of the business you will have to get involved in company initiation, networking, marketing, sales & support up until the point you can afford to bring people in with these specific skill sets. If you or you team of co-founders shy away from these tasks then your business will begin to suffer.
I’m sure many reading this article have seen the diagram of the comfort zone bubble and the arrow pointing outside of it with the statement of ‘This is where the magic happens’. This is what you will need to embrace frequently and you will grow in experience for doing so!
If you haven’t seen the picture you have now. Marvelous isn’t it 😜
Experience has taught me that a lot of developers are fully aware of good development practices and process but don’t often get the chance to apply what they know as they are working on legacy products or are contracted to produce applications under tight budgets and timescales.
When starting your SaaS business you will be in a position where your creating brand new IP from the ground up. Avoid the temptation or desire for your developers to jump straight into coding the product. Spend time thinking about what practices are to be implement. Ask questions such as.
I could go on but I’m sure you get the picture. Making the right decisions at this point will really help out in the long run. When your code base because large and is maintained by multiple developers your aim is to be like the guy in the picture after committing the code to the master branch and having it automatically build, tested and deployed with zero downtime and no errors! 😎
With a SaaS business you’ll be needing to get to break even as quick as you can. The chances are that your subscription prices on a recurring basis are low and so you need a fair amount of subscriptions to bring your bottom line up to a satisfactory level. The temptation may be to wait until you believe your product is complete or the best it can be and then release and go chasing sales.
You must avoid doing this, no product is ever complete. Even when you finally release there will be features that potential customers will ask for and may hold back on signing up as a paying customer until the feature is available.
Your best bet is to be constantly talking about the product during the development stages to drum up as much interest as you can. The more people you talk to and get feedback from the greater your insight will be on whats a viable version one release for your product. You might be surprised at how little of your planned development you can get away with before you can start selling. The quicker you can start the process of selling the quicker you can start to reduce your cash burn rate easing any cash flow concerns. 🤑
During your day to day activities its very easy to get bogged down with your workload. At times you will feel stressed about the sheer mountain of work that needs to be delivered. If your not careful, your production levels can drop significantly and you’ll start procrastinating about the volume of work! This is at the point where doubt seeks in and you start questioning whether your doing the right thing.
I cannot stress enough the importance of taking timeout every now and then to look back and reflect on what you have achieved. If you feel like you have been trudging through the mud for a while, take a knee and gain some perceptive. You’ll be amazed at how far you have come and what you have already achieved. You will find your mood will improve, you will start to believe in yourself and ultimately the quality of your work and interactions with others will improve!
So there you have it – 10 tips from my experience of starting businesses. I hope that this advice proves useful to anyone thinking about starting a SaaS business in the future!
I guess you can call removing 7 years of blog posts a fresh start and that’s exactly what I have just done. Interests change and technology moves on. Much of what I wrote about is now completely irrelevant and has no benefit to anyone following my blogs. So, from this moment it ceases to exist.
I will be looking to share my insights and knowledge on several topics across various sets of media from this point on. Watch this space!
Reading time 5 minutesUsing AWS Lambda it is possible to develop serverless functions in which the container it is deployed to is maintained by AWS. As well as managing the resource allocation to the environment it will also handle scaling of the lambda function to meet demand. So for example if you have an API Gateway whose endpoints trigger lambda functions AWS can spawn multiple containers horizontally running your Lambda function to meet lets say a sudden burst of hits against your endpoint.
Even though AWS is managing the scaling of the lambda function you may still hit other choke points that AWS won’t manage for you. Keeping things simple, lets say the hit against the API Gateway is to trigger some kind of asynchronous task in which you hit a small RDS deployment of Maria DB. The sudden bursts against the DB could cause issues with other functions which may be using the DB. This is where you are at a point where you need to control the flow of queries so that they are triggered at a rate in which you know your current DB can handle.
In order to achieve this you will need to introduce a queue, which in AWS is called a Simple Queue Service or SQS for short. There are 2 types of queues but I only like First In First Out (FIFO) queues as they ensure no duplicates of the items you queue. The downside to this though is that there is a rate limit on the amount of items which can be queued per second. The general idea is that you have a function which will queue work items as quick as the queue allows. You then have a, or multiple consumers reading from the queue with each consumer being triggered by a Cloud Watch Event. The Final part is to have a function that acts as the worker. This is the function that performs the actual asynchronous task which the consumer will off load to.
Taking the API Gateway example above you will need the following setup.
The first port of call is to create the queue you intend to use. I tend to always prefer FIFO queues but you could use a standard queue if you need high through put and don’t care about duplicate items being delivered to the consumer or the ordering of the items. I always find myself in a situation where I may not care about the order but I certainly care about duplicates. I don’t want them, I don’t want to create a mechanism to detect them because thats what the FIFO queue is for! When setting up the queue you will want to pay attention to the settings. The important to are the visibility timeout and the dead letter queue.
The visibility timeout is important if you have multiple consumers reading from the same queue. When the consumer dequeues items it puts them in a state of in-flight until rather the queue item is deleted or the visibility timer expires. While in this in-flight state it is impossible for another consumer to dequeue the item as well which would lead to you processing the same item twice. If the in-flight timer expires because the queue item hasn’t bee deleted then the item returns back to the queue, this would likely occur if you encountered an error during the worker function and can leave the queue clogging up with the same old queue items which will fail every time you go to process them. This is where you could consider the use of a dead letter queue in which these queue items that cause errors can be shifted to and handled in a different manor.
When your API Gateway is hit you need it to trigger a Lambda function that connects up to the FIFO SQS and queues items. Depending on how your work items are defined you may want to and should consider batch queuing of items in parallel. The reason for this is that your function is a Lambda running in a container which is confined by an execution time, 300 seconds being the limit. However you don’t want to your queuing mechanism to take up to that limit because its sequentially posting individual items on to the queue and waiting for the response. This is unnecessary and will cost you more for you Lambda’s pay as you go uses. The only thing you need to match sure you do if parallel processing is not to exceed the queue limit which as of writing is 300 transactions per second.
The consumer is another Lambda function whose job is to simply pull items from the queue and off load them to the worker function. The consumer should be triggered from a Cloud Watch Event Rule. You can if you like have the consumer being triggered as quick as every minute. The rate at which you trigger the consumer is down to how long you are prepared to wait for the next invocation of the consumer.
When dequeuing you can take up to 10 queue items from the queue in one request. What you want to do ideally is pull the maximum items off the queue and for each queue item parallel process it by invoking the worker functions. When the worker functions are complete you need to check if there is time to execute another batch, if not then you let the consumer invoke its complete callback. The key thing with the consumer is that you make sure it finishes its processing before AWS terminates the container. If you don’t you could end up in a state of having in-flight items that have been half processed.
The worker is a Lambda function in which the grunt of the work is performed. Typically you would allocate a decent about of memory to the worker to cater for the logic that it needs to perform. Aside from the asynchronous task the worker has to execute it needs to also handle deleting of the queue item and if required shifting the queue item to a dead letter queue. The reason for this is that only the worker will known if it has successfully perform the asynchronous task so it is in the best place to finally remove the item.
With this setup you are now able to control the rate at which you process bursts of asynchronous operations by representing each operation as a queue items which is consumed at a rate you know your supporting architecture such as a DB can handle. You have the ability to scale your architecture to meet growing demands. If monitoring the queues you will have an indication that demand is increasing by looking at the number of queue items which require processing. As soon as you are happy your architecture, such as the DB can handle the load another consumer can be thrown into the mix to help process queue items quicker.
Help on setting up the queue can be found here.
Help on getting started with the API Gateway and Lambda can be found here.