Why start a SaaS as a freelancer?

I’ve been a freelancer for 14 years and am currently starting a Software as a Service (SaaS) to supplement, and perhaps replace, my freelancing income.

I’m quite successful as a freelancer. By that I mean I earn enough to pay all the bills and save some extra, supporting my child and wife while our son is young and it’s easier if she does not return to work, all in an expensive area to live in. We’re not rolling in cash, but we’re not in the “just getting by” category so many of our friends are in.

So, why start something extra? Starting something new is going to be a distraction, I’ll have to turn away client work that could have filled that time.

New challenges

Running a product business is a different set of challenges from what I’m used to, and that’s very interesting and has interested me for a long time. This is the second time I’ve tried to get a SaaS going. The first time was just before my son was born, which was very bad timing as I was then too tired to do useful work on it for a very long time. Also, I think I’d made a product that was useful, but not essential, which made it much harder to convince people to use it.

But there are other factors too, which lead me to want to start my own product then and now, seven years later…

“Make money while you sleep”

It’s bit of a trite phrase, but I’d really like to make money while I sleep. Or at least, while I’m on holiday, or fixing my car, or the numerous other things I’d like to do which aren’t directly paid.

Financially, life as a freelancer is straightforward: if you’re working, your earning.

In my case, not at the computer fixing people’s problems? No money coming in for that time. On holiday? No money for then. Before holiday? Lots of stress trying to fit in work that would usually be done over my holiday period.

Yes, I can up my rates to give us more money which means we’re fine to take breaks, and I have. But, upping rates can also mean up-skilling, or taking jobs for companies that want you on-site, or various other factors that mean it’s not quite as easy as just telling people you’re charging more.

Also, even charging more you’re still on the hamster wheel. Not working? Not earning, and now for bigger amounts of money.

So having a product which can be working and earning while I’m not directly in front of the computer sounds great. Getting to that point, that’s hard. I don’t expect to be working a few hours a week and spending the rest of my time counting my money. I know in some ways I’m swapping one hamster wheel for another, I’m just hoping the new wheel has some gearing on it to make it a better business to be in over the longer term.

Retirement

Currently on the amount I’m earning, I should be set to retire just about the time I’ll be the standard age to retire. Yay. I like my work, but I’m not sure I’ll be wanting to do it when I’m in my early sixties. I’d like a financial buffer that means if I want to retire early, or change what I do, we’ll be able to survive.

Getting enough money for retiring early or even just more safety means earning a chunk more than I am now. Doing that is possible in various ways, the one I’m most interested in is having a product that can be scaled up – I work on adding more customers to something, it produces more money. Once I’m past a certain point (roughly £3,200 a month) I can spend all my time adding customers and improving the product, and every extra customer in is adding to my family’s safety. Get three times the minimum amount of money in? That’s a retirement fund that’s building rather quickly, or a set of money I can use to hire other people to help build my business.

Owning the product

Freelancing can be very frustrating. Some of my clients, not all, but a number over the years, seem to have difficulty taking responsibility for running their own business. They are unwilling to take decisions which will take their business in one direction or another (not always to a ‘right’ answer, just in any direction at all.) Being on the pointy end of indecision in their projects is very frustrating, and I’m often in a position where I can only help and encourage to a certain degree. I’m there as a techie, not a business advisor, and it’s difficult to be seen as a bit of the latter role while fulfilling the former.

Owning my own product will let me see the other side of this coin. Maybe it’ll all be plain sailing as I make lots of good decisions, but I doubt it. I will have a project where the decisions are mine, and I get to live with the consequences. That means no frustration about a lack of direction, but also no hiding from causing that lack of direction.

Having seen friends try to build product businesses and fail, the phrase “Well at least I learnt a lot about x” where x is a technology really, really frustrates me. I don’t want to do this to learn about a programming language or tech stack. I do intend to learn a lot more about business, a business that is different from freelancing. If all fails, that will at least help me understand my clients better.

Community

Running a product business may involve discovering I’m terrible at running a business that isn’t service based. Hopefully I’ll have enough motivation to get through the early learning and through to making money, and can go on from there.

I was helped out in freelancing by a lot of other freelancers, so I’ve been joining product business groups online and am now running a small meet up for early stage product businesses  in Brighton, which I’m hoping will have the same benefits for me as a product business owner. My friend Jon has done the same, but with a much further advanced group of people. Personally, I need to be around the people just starting out or making their first thousands a month. Being around people who are full time on their products and have built up teams and are scaling is great, but just feels daunting to me. I need to level up to that, and hopefully others in the group I’m running will at the same time too.

The near future

For now, work will remain broadly the same. I am currently juggling multiple projects for clients, some involving organising sub-contractors. Within lots of other work, I’m jamming in trying to find time to build up an audience for my own product, Brisk.

As part of starting up, I’m going to try to blog more often about this process. It’s too easy to look back on what you were doing with rose tinted spectacles, whether the business goes well or badly. Documenting things as I go along should help me stay grounded in what I was actually doing, not what I thought I was doing.

If you’re also building a product, please get in touch. I’m aways happy to meet more people on the same journey as I am.

Secure certificate registration – ensure you choose ‘www’ or not

I’ve been helping a client move their website from their existing host to a new one, as their old host is closing down.

This was quite straightforward once they’d decided to only move the site I had written the code for, not another which was a complicated unknown entity.

The only wrinkle was they have a secure certificate to give them an https connection and we had to register a new certificate as part of the move. I did this through their host at their request, but hadn’t realised that most SSL certificates are specific to the domain, including the sub-domain. This was a mistake as they used the ‘www’ version of their address for their website, and I registered the new certificate for the non-www version.

To stop this being a problem, I put a redirect in to the .htaccess file to redirect all traffic to the non-www version on the secure connection:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]

The only further foible was as this was an existing site, Google had indexed the site, and shows the https version in the search results, even though the home page is not explicitly https. Now, because it points people to the https://www version of the site, it shows an unsecure error before showing the site, because the certificate isn’t valid for that on the new site.

Solution?

  • Used Google Search Console (AKA Webmaster Tools) to update the preference to the non-www name
  • Updated the DNS of the www. version to point to the old server while it is still working
  • Added the above .htaccess redirect on the old server to point everyone across to the secure version of the non-www address
  • Created a new XML sitemap of the site at the secure, non-www address and re-submitted it to Google Search Console
  • Wrote an apologetic e-mail to the client explaining the mistake
  • Wrote this blog post and linked to the new site address to help the non-www address get indexed

All this means – searchers go to the old host so no security warning, then get forwarded to the new host while we wait for Google to respond to the preference change. I hope it comes through quickly.

And now I’ll go back to my scheduled work a wiser, if more tired, man.

Sending a push notification to your browser or mobile with ColdFusion and Push Engage

Push Engage is a service which lets you easily send push notifications to a browser or mobile phone, using a little code on your website. It’s very easy to set up and they currently have a very generous free account, allowing you to send a notification to up to 2,500 browsers/devices.

I’m using it as part of some alerts in the background of a client’s website. They’re using ColdFusion, so I needed to work out the code to send the alert from them, the API documentation on Push Engage has an example in PHP, but it’s very simple to convert. Here’s a CFHTTP call that will send a notification:

<cfset api_key = “(your API key here)”>

<cfhttp method=”Post”
url=”https://www.pushengage.com/apiv1/notifications”>

<cfhttpparam type=”header”
value=”#api_key#”
name=”api_key”>

<cfhttpparam type=”Formfield”
name=”notification_title”
value=”The text for the alert title”>

<cfhttpparam type=”Formfield”
name=”notification_message”
value=”The smaller text of the message of the notification”>

<cfhttpparam type=”Formfield”
name=”notification_url”
value=”http://www.example.com/”>
</cfhttp>

I’ve already followed their steps for adding Javascript to a page on the website, visiting it using a browser on my computer and my phone and accepting notifications from the site. Now, when I trigger the page with this on, I get a notification a few moments later. Lovely!

Thanks to Dave Child for introducing me to Post Engage.

 

Worried about the Google mobile update? Check your Google Analytics first

If your website is not suitable for easy use on a mobile, i.e. it’s not ‘responsive’ or you do not have a version of the website just for mobile phone users, you will be affected by the Google update coming next week. Basically, if someone searches on their mobile phone, they won’t see your website in Google’s search results any more. However, if they search on their laptop or larger computer, they will see it as they do now.

I’m seeing a lot of scare mongering on social media about this and articles which are prodding people towards panic. Before you get too worried, please remember this affects:

  • People using their smartphones to search Google and find your website

Here is how you find out how many people that is, if you use Google Analytics:

Login to Google Analytics and go to the report for your website.

On the menu on the left, click ‘Audience’ (this will probably already be chosen,) then ‘Mobile’, then ‘Overview’

Google Analytics - mobile overviewThis shows you how many mobile users you have looking at the website. The screenshot above is for one of my personal websites, so the traffic generally is quite low. In this case, I had 102 visitors to the site using their mobile phone to view it in the last 30 days.

However, that doesn’t tell me how many will be affected by this Google update. For that, I need the number coming from Google’s natural search results. So, to find those:

Click ‘Secondary dimension’, then ‘Acquisition’, then ‘Source / Medium’

Choosing where people have come fromLook down the list and find the line which says ‘mobile’ and ‘google / organic’. If it’s not immediately visible, try making the ‘show rows’ bigger in the drop down list under the table of results.

Affected mobile visitorsSo for this website, I had 61 visitors come through Google search to the website on their mobile phones in the last 30 days. This website isn’t built in a responsive way, so basically I’m likely to lose that after the Google update comes out.

I don’t want to lose that, but then again, I’m also very busy at the moment and don’t have time to re-build the CSS and potentially the HTML of the website, so I’m just going to have to put up with that. It’s not great, but it’s 7% of my traffic. That’s not going to kill the website.

Checking through my client’s websites, I’m seeing mobile use between 15% and 40%, and traffic from Google’s natural search results – remember, the bit that will actually be affected by this change – being between 2.5% – 13% and one outlier at 29%.

If you’re a business and have Goals set up, it’s worth digging further in to Google Analytics to see how many visitors using their mobiles are converting in to customers – although this becomes tricky, as people often research on their phone, then buy on their computer.

If you’re thinking of doing a quick conversion to a responsive website, check your Analytics first. If you’re only going to lose a small percentage of visitors, it will be worth considering not doing a hurried conversion, but holding off and giving it some more thought and doing a better update when you’ve had more time to work out what you want done. Yes, you’ll lose some traffic in the short term, but doing a hurried conversion that doesn’t work quite right won’t get you any more sales anyway. Don’t react just because the update is coming in now, improve your website by making it work better on phones because you want to give those visitors a good experience of your business.

Setting up ColdFusion 11 and SQL Server Express 2014 on Windows 8

Recently I installed Windows 8.1 in a virtual machine so I could set up IIS, ColdFusion (Developer version) and SQL Server (Express), which would match some of my client’s hosting well enough to use as a test environment.

SQL Server Express and ColdFusion developer edition can be used for free by developers, which makes this a nice, low cost development environment.

I hit big problems trying to get ColdFusion to talk to SQL Server Express, so I thought I ought to document the setup process for next time I tried and hit these problems. Sorry if you’re reading this and some of the notes are not detailed enough, I’ve set up ColdFusion and SQL Server enough times that the basics have stuck, if you need more help you might find it useful to search YouTube for help videos.

Setting up SQL Server Express 2014

Download SQL Server Express 2014 and running the installer. This all worked fine so just Google for wherever Microsoft are putting the installers now (which is a different place whenever I look, which is several years apart.) Try to find out if you’ve got a 32bit or 64bit version of Windows first, as you need to download the version which matches your Windows.

Setting up IIS

Go in to Windows settings > Control Panel > Programs > Turn Windows features on and off

I’m not sure I needed all of these, but I ended up turning them on while trying to solve problems:

Tick all of these (where nested, tick the ones inside the nest, not just to install everything):

.Net framework 3.5
.Net framework 4
Within Internet Information Services:
– Web Management Tools:
– – IIS 6 Management Compatibility
– – – IIS Metabase and IIS 6 configuration compatibility
– – IIS Management Console
– – IIS Management Service
– World Wide Web Services:
– – Application Development Features:
– – – .Net Extensibility 3.5
– – – .Net Extensibility 4.5
– – – ASP.NET 3.5
– – – ASP.NET 4
– – – CGI
– – – ISAPI Extensions
– – – ISAPI Filters
– – Common HTTP Features:
– – – Default Document
– – – Directory Browsing
– – – HTTP Errors
– – – HTTP Redirection
– – – Static Content
– – Health and Diagnostics:
– – – HTTP Logging
– – Performance Features:
– – – Dynamic Content Compression
– – – Static Content Compression
– – Security:
– – – Request Filtering

Setting up ColdFusion 11

Download from http://coldfusion.adobe.com

Run the installer

Choose the option to install a standalone web server, then, later in the install options you can choose to connect it up to IIS.

Setting up a database user in SQL Server Express 2014

In SQL Server Management Studio

Create a database:

Right click on Databases in the left column ‘Object Explorer’ > ‘New Database…’ and run through the short form

Create a user:

In left column ‘Object Explorer’, click on Security, right click on ‘Logins’ > ‘New Login…’

Add a new user, e.g. ‘CFUser’

Choose SQL Server authentication, give it a password.

Uncheck ‘Enforce password policy’

In the ‘Default Database’ drop down, change it to your new database

On the left hand ‘Select a page’ click on ‘User Mapping’

Tick the your new database, further down add them as a type of user to the database – ‘db_datareader’ & ‘db_datawriter’

Configuring Windows Firewall to allow access to SQL Server

As per these instructions from Microsoft I ran WF.msc then set up an Inbound Rule to allow TCP on port 1433 for local use.

Configuring security to allow ColdFusion to get data from SQL Server Express 2014

Apparently by default, SQL Server Express doesn’t allow remote connections, but configuring it to allow a remote connection so ColdFusion could get data from it was very hard, as the 2014 version of SQL Server Express is more locked down than previous versions. I wouldn’t have got it working without this Stackoverflow question about SQL Server Express 2012.

Open ‘SQL Server Configuration Manager’ (by searching for ‘SQL Server configuration’ on the Start screen.)

Under ‘SQL Server Network Configuration’ > ‘Protocols for SQLEXPRESS’:

Change ‘Named Pipes’ to ‘Enabled’ (by right clicking) (I’m not sure this step is necessary, as I found it in a bit of advice while I was still trying to get everything working.)

Change ‘TCP/IP’ to ‘Enabled’, then right click again and choose ‘Properties’

Under ‘IP2’ set the IP address to be that of the computer’s IP address on the local subnet (I found this out by running ‘netstat -a’ on the command line and looking down for port 1433 while I was trying something else, I’m sure there’s an easier way of finding it.)

Scroll down to the settings for IPAII.

Make sure ‘TCP Dynamic Ports’ is blank (not the 5 digit number that mine had in there by default.)

Make sure the ‘TCP Port’ is set to ‘1433’ (mine was blank by default.)

You may also need to go to ‘Services’ (by searching for it in Windows) and turning on the SQL Server Browser service (and setting it to run automatically) – I already had mine turned on during other debugging, I’ve read different advice on whether it should be on or off.

Some of the settings for SQL Server don’t take until you’ve re-started the SQL Server service. I think in the end I restarted Windows to be sure things were going to take long-term.

After all of this, I was able to go in to ColdFusion administrator and successfully set up a datasource using the database user I’d set up. Just getting SQL Server and ColdFusion to talk to each other was 3-4 hours of messing about with my settings, hence writing up these notes to make it easier next time.