In June of this year, I had an idea for a software-as-a-service (Saas) application that I wanted to build and launch. On July 1st, I committed the first lines of code to a git repo for the app. After about 200 hours of development time, on August 10th I launched the first version of the application into the world, ready for users and subscribers.
The service is called WP Lookout and you can read more about the service itself and why I built it on wplookout.com. This post is about the process, tools and services I used to build and launch a SaaS application in what felt like a relatively short period of time.
Here’s the short list of resources I used along the way if you just want to explore them without further commentary:
- Laravel for the application framework
- Laravel Homestead for my local development environment
- PhpStorm for software development
- Laravel Spark for scaffolding the SaaS subscription and account management
- Stripe for subscription payment processing
- Laravel Nova for an administrative dashboard
- Git and GitHub for tracking code development, to-do items and feature branches
- Upwork for hiring and paying a software code reviewer and consultant
- Slack for coordinating with my contractor
- Amazon Web Services for application hosting
- Laravel Vapor for managing AWS setup and deployment
- WordPress for building the WP Lookout marketing website
- Matomo for privacy-focused analytics
- HelpScout for managing user support interactions
- MailerLite for handling new user onboarding and marketing automation
I’m not going to go in-depth on all of these tools, as some of them are pretty simple and self-evident in their value. Others are just magical and deserving of some additional observations. Here are some things that stood out and what I learned along the way:
Choosing PHP and Laravel
Choosing Laravel wasn’t just about the basic framework. Once I saw some of the add-on options available to help build and host Laravel SaaS applications, I was really excited about how much time I was going to save along the way. Open source packages to handle 2FA, webhook interactions, Slack notifications, RSS feed generation, private beta password protection, AWS interactions and more meant gave me a huge head start. Laravel Spark is a $99 purchase that saved me many, many hours of building the foundational pieces of a SaaS application, from user account management to billing and subscription workflows to administrative functions.
All of these things together meant I could focus on the core logic of my application and idea, and that was really rewarding. It’s also proven to be a good decision since, as Laravel’s thoughtful architecture and opinionated way of doing things has nudged me into some best practices that I’m thankful for as I look to add new features.
Asking (and Paying) for Help
I know from past experience that “solopreneurship” can be lonely and at times overwhelming. I expected this to be especially true in building an application by myself while also learning the framework I was building it on. So I decided early in the process that I would look for a more experienced Laravel developer and consultant to help me navigate architectural decisions, choosing packages or tools based on their past experience, and for the inevitable times when I would get stuck on code I’d written that just wasn’t working.
I used Upwork to post a contract job listing and within a week I had contracted with an expert Laravel developer for a few hours a week of mentoring, question asking and code reviewing.
This also turned out to be very helpful. As expected there were several times where I hit a wall in understanding how to implement a particular function or workflow using “the Laravel way.” Even after Googling and StackExchanging and pouring through the documentation and code examples, I sometimes still couldn’t figure it out. But usually, after a quick Slack conversation or call with this expert, I was unstuck and on my way.
Even though there was an external cost associated with this approach, less than $1,000 from start until the first version launched, I think it saved me tons of time and frustration, and allowed me to get the first version of my application out the door much more quickly.
The Magic of Laravel Vapor for Deploying to AWS
When it comes to DIY web hosting, I have been there and done that. I’m talking putting together servers from parts, building out my own server racks and data center rooms, debugging router configurations over serial port connections, getting paged in the middle of the night because a hard drive or RAID array failed, standing in the rain to feed gas to a generator during a power outage. I knew I was not going to be doing anything remotely like that again for this business.
But I’ve also been around the block a few times with cloud hosting. From spinning up vanilla Ubuntu Droplets at Digital Ocean to wading through the Heroku admin console to piecing together the various tools offered by Amazon Web Services to create a mix of web servers, database servers, storage, load balancing and other related instances for a high-profile, high-traffic website, I know how powerful these options can be…and also how much time they can take to configure and manage over time.
For my new SaaS app, I knew I wanted to think about the details of hosting as little as possible. I wanted to launch something to “the cloud” and have it just work, whether it was getting no usage or tons of usage. I didn’t want to have to think about sizing things, scaling things, securing things or measuring things.
When I first started reading about Laravel Vapor, at $39 a month for unlimited projects/deployments, I thought it might be too good to be true. Launch your Laravel application to AWS with a few quick commands and you’re done? Come on.
Friends, it’s really true. I went from having done no hosting setup whatsoever on a Monday afternoon to having a fully functioning, auto-scaling, “serverless” cloud hosting setup live and ready for users on a Wednesday morning. Most of the time in between was just me poking around to learn how things were set up. I barely had to touch the AWS management console after I created my account there and handed things over to Vapor.
It felt like the magical world of cloud hosting that was always promised but never quite delivered had finally become reality. Even a month later I’m still constantly amazed by it. Huge kudos to the Vapor team.
Other Pieces of the Puzzle
I found lots of “build your SaaS landing page quickly” tools and services out there, for the the money and value none of them came close to WordPress. Many of them wanted me to lock myself in to their proprietary way of doing things, with no option to export or move my content later. I know that I have an advantage and bias here given my extensive past work as a WordPress developer, but I still think the flexibility it offers over time for growing an online business (SaaS or otherwise) is really hard to beat.
Measuring the success of a SaaS app is all about analytics. Laravel Spark (see above) came with a couple of key metrics already displayed neatly on a dashboard, and the reporting offered by Stripe fills in most of the rest of the gaps. I thought about using a service like Baremetrics to further augment what I know about my users, but until things get a bit busier I can’t yet justify the cost. I’m also using a self-hosted Matomo instance to get stats about website usage, referral sources and user behavior across my marketing website and application, without handing over all of that data to Google.
MailerLite‘s free plan was a great way to get started with so-called “marketing automation” for my new app. I use their powerful API to bring my application’s users into the MailerLite system for friendly follow-up emails (“welcome to WP Lookout!” and “helpful tips for getting started” type things) so that I didn’t have to build those out in my Laravel app. I also use MailerLite for a basic newsletter signup form on the marketing site.
HelpScout made it really easy to set up a simple support inbox and create a help “beacon” in my application, offering users the opportunity to drop me a quick note or do a live chat if they run into any questions along the way.
I’ll be sharing more about the finances of my SaaS business a bit later on, in the spirt of being an “open startup.” But you can probably tell from the commentary above that having some initial funds available to hire a technical mentor and purchase some software tools that gave me a huge head start and made a big difference in my ability to quickly build and deploy WP Lookout.
It was certainly also a major help that I have a background as a developer and could do much of the initial software development work on my own. Those 200 hours of development time could have cost thousands or tens of thousands of dollars if I’d had to hire them out.
Another thing that helped keep me energized and excited during this initial build and launch was the Indie Hackers community (where I haven’t been terribly active but have posted a few milestones in WP Lookout’s development) and the MicroConf family of resources, sites and podcasts. Listening to the Indie Hackers podcast or the Startups for the Rest of Us podcast as I took breaks or walked the dog was a great way to get some great insights while building creative energy for the work. Thank you for that, Courtland and Rob.
I also can’t overstate the importance of having a family that was supportive of the way I threw myself into building this app. My wife and daughter were excited for me and kept me feeling present and in good humor when I might have otherwise drifted off into unhealthy 24/7 coding habits.
Of course, there are no good conclusions to be drawn yet on whether my approach to building and launching a SaaS app is a successful one. I have some users, but no paying subscriptions yet. In collaboration with a marketing contractor (thanks again to Upwork), we are trying to get the word out through social media, content marketing and paid acquisition. I have some interest from the WordPress community, but there’s a long road between that and being seen as an essential tool. And I have a lot more features to add to WP Lookout before I can say that I’ve realized my vision for what the service can be. So, stay tuned.
All that said, I feel proud about what I’ve built, and what I’ve learned along the way.
If you have any questions or suggestions/tips from your own experiences, please leave a comment. Thanks for reading!