Octopus Deploy is a small and relatively simple software start-up, with no employees (yet!) Even so, there's a surprising number of services that go into keeping it running. In this post, I'll go through the key services that Octopus depends on.
The OctopusDeploy.com website uses a small, custom built CMS to manage the home page, this blog, documentation, and so on. I hacked it together with ASP.NET MVC 4 and RavenDB over a weekend a few months ago, and it's working well. I'd have made the GitHub repository public but I accidentally checked in some API keys etc., so I'll need to clean up the history before sharing it. Comments are provided by Disqus, which kept the CMS engine quite simple.
The site is hosted on a pair of Amazon EC2 machines in two availability zones at the Virginia data center (the two servers aren't for performance, but for reliability after the site was offline due to the EC2 outage a few months ago). The RavenDB database is hosted at RavenHQ in a replicated instance. Someday I'll move the RavenDB databases into the EC2 instances to keep the data closer, but for now it's nice having the backups taken care of for me by RavenHQ. Images and downloads are hosted on Amazon S3, with the CloudFront CDN enabled. Amazon Route 53 is the DNS server.
For support, I use Tender, which is at help.octopusdeploy.com. Most support is done via Tender, though people can also just mail firstname.lastname@example.org or chat on Jabbr. I figure the more channels for support the better.
One of the key metrics I look at in Tender is response times for support requests. They tend to vary based on time zones (as the request might have been posted just as I went to bed) or difficulty (some require research). Although there are over 250 installations of Octopus being used today, support isn't taking up as much time as I thought it would. I get about 4-5 queries a day, but most are pretty easy to resolve. My goal is to respond to all requests within 24 hours.
When customers buy a license for Octopus, the purchase page is hosted by FastSpring, who then take care of the transaction, applying VAT, and so on. The purchasing page uses custom HTML/CSS (hosted by FastSpring servers) to keep a consistent look with the main Octopus Deploy website. After purchase, FastSpring invokes an REST API hosted on our Amazon EC2 instances to generate an XML license key, which is included in an email sent to the customer.
I can't begin to tell you how much I love FastSpring. Although their main web site doesn't look to impressive, their administration system is awesome, and they support so many features in a really simple way. Their claim about having great support is also true in my experience. Prior to FastSpring, I used SWReg, which was, well... not so great.
To give customers an idea of the roadmap, I use a public Trello board. While most companies make their bug tracker public, they are usually quiet about features. There are some "big, huge, top-secret" ideas for future versions of the product that aren't on the list (mostly because they need more thought), but for the most part I don't see a downside to making the upcoming features public, and I think more companies should do this. For feature suggestions we also have a UserVoice site.
Finally, I've started using Google AdWords to help increase awareness of the product. I'm still new to Adwords, and I don't think I'm using it quite right yet, but it is responsible for about 70% of the traffic to this site now. I have about a dozen different ads in a handful of ad groups, and an automatic budget of about $30/day. Most of the traffic comes from the display network; very little from search ads (though a lot from organic search).
Microsoft's BizSpark program has been quite helpful in providing MSDN licenses for the Microsoft products I use. I'm sure there are other advantages to being in BizSpark, but I haven't really taken the time to work out what they are yet. Although Octopus Deploy Ltd. is a UK limited company, I'm actually enrolled in the Australian BizSpark program because that's where I was based when the business started.
For source code, I set up a GitHub organization for Octopus Deploy which hosts not only the open source projects, but also has private repositories for the main Octopus Deploy product source code, this website, and other private code repositories. In fact, when customers buy a source code license for Octopus Deploy, they get invited to the private GitHub repository. Although many software companies provide source code licenses, I think having access to the GitHub repository makes customization and merging much easier.
For automated builds, I use TeamCity from JetBrains. Although I use the free Professional Edition license, I have had to buy two additional build agent licenses. This is because Octopus Deploy runs on many different versions of Windows, so I need to run integration tests on different configurations to discover any compatibility bugs. The different test configurations are below:
The Octopus Deploy website is deployed using... you guessed it... Octopus Deploy! Before each public release, I install the release candidate on an internal Octopus server, upgrade the Tentacles, and then re-deploy the public website. In addition to the integration tests, this gives me confidence that there's no major problems in the release.
These development servers (the TeamCity server, 5 build agents, and Octopus server) are all hosted on a single Hyper-V server hosted by LeaseWeb. While not as reliable as hosting on EC2 (since there's only a single server with no DR), this works out to be a lot cheaper and gives me more choices for the OS configurations (for example, I was running Windows Server 2012 beta servers for a while). And they aren't mission critical - if I had to spend a day or two provisioning and reconfiguring a new build/deploy server, it wouldn't be a huge problem.
To monitor the OctopusDeploy.com website, I use a few different services. Of course, Google Analytics plays a big part, and I've been fortunate enough to have the help of the brilliant Alistair Lattimore to optimize the site and understand the analytics results. Pingdom gives me a graph of uptime and notifications of downtime. Appfail.net integrates with the website and reports any exceptions to me via email, and provides a nice graph of errors.
I have an Office 365 subscription which provides email for the
@octopusdeploy.com domain as well as my personal email. Mailboxes like
email@example.com are set up as distribution lists. For release announcements and product updates, I use MailChimp (subscribe here).
Accounting for the business is done using Xero. Xero is probably my favorite service on this whole page (FastSpring are #2), which says a lot given it is an accounting system. I do have accountants (Dennis & Turnbull) to help prepare returns, but I like to do most of the accounting and VAT returns myself. Everyone complains about bookkeeping, but for me it only takes a few hours a month, and with Xero it's quite enjoyable.
Octopus is VAT registered, but that's mainly because of the contracting that I did before working on Octopus full time. Xero is very helpful for preparing the VAT returns. As FastSpring act as the vendor of record, which means that they collect the VAT (if applicable) and pay it - my VAT returns don't include VAT for Octopus sales. I've spoken to people who seem to think that using a third party like FastSpring to process sales means they'll pay VAT twice, which isn't true.
The last site I'll recommend is the HMRC website. It takes a while to get set up (you have to register for each service, they'll post an activation code, you activate), but it means I can log in online to see how much is due on each of the different taxes that the business has to pay. That's very useful.
Well, that's a long list. As you can see, even for a small business like Octopus Deploy, there's a lot of services working together to make everything run smoothly. Some take a real time investment to set up, while others take five minutes. Some are interesting if not mission critical, while others I couldn't live without. It definitely takes a village to raise a start-up!
What does the future hold? Currently, to find information on my customers I depend on email history and the above services like FastSpring/Tender to store the details - bringing that into a single (basic) CRM system will probably become more important. If you have a recommendation for me, leave a comment in the box below.