This is a good time to be a developer on a small team or start-up; at this point in 2015, it feels like a lot of long-standing infrastructure problems have been automated away if you’re willing to pay for the service. With that in mind, here are some quick reviews of various platforms that I’m using for my personal website development. One quick note is that part of my selection criteria is that there needs to be a free tier for most of this; I don’t want to put in any more money than I have to, especially when my revenue stream is non-existent.
Web and Server Hosting
- Right now, I’m using Azure for web hosting. They have a free tier which is pretty limited, but it’s enough to host an MVC website. I can’t have a custom URL or SSL certificate until I go up to the standard tier, but that’s okay for now. One thing I like is that the Azure marketplace has a number of free and paid application services available to you. What I don’t like is that their dashboard is a bit schizophrenic. The current dashboard’s marketplace is different from the new dashboard’s marketplace, so if you install New Relic (for example) using the old dashboard, it doesn’t show up on the new and vice versa.
- For file hosting, I’ve got an S3 account but also hear good things about Azure Blob Storage.
- For my corporate website and e-mail, I’m using Webfaction. Webfaction is a paid host, but I’ve been with them for several years and plan to be with them for quite a while longer. Their admin panel is extremely smooth and removes a huge setup burden—upgrading Django from one version to another is something you can do in a few minutes without having to worry about managing libraries and dependencies. I will say, though, that I wish they had an easy upgrade path for apps like Django better than “do it yourself” or “delete and re-create.” Yeah, I want them to do everything for me…
- I haven’t nailed down SQL Server hosting yet, but most likely it will be on Azure unless I find a compelling alternative. I’m using AppHarbor’s SQL Server instance for a defunct version of my current project, but the limitations on the free tier are pretty strict.
- For source control, I’m using Git. My host of choice is BitBucket. They’re free for my project size and, unlike GitHub, the free tier lets me make my repo private. I use GitHub for public repositories, mostly because GitHub is better-known and I’ve had an account with that service for a longer time.
- Communication and project management tools are kind of expensive in general, but I landed on another tool which is free for a small team: Slack. Prior to this, my business partner and I communicated through e-mail, Skype, phone calls, instant messages, and Google Drive documents, whatever was convenient at the time. The problem is that when you have documentation spread across a number of different services (including some which you cannot archive), it’s easy to lose important pieces of information. Slack bundles things together. It’s like corporate IRC, but a lot more powerful. In fact, one of the big reasons I use Slack is because of its ability to interact with other tools on this list. Every time somebody checks in code to BitBucket, we get a message on a dedicated Slack channel. Every time a build goes out to Azure, we get a message on a dedicated Slack channel. Every time I create a Google Drive document, it gets shared and we have it available to us in the same place that we can chat about the documents and work out requirements. I think we need one or two more people on our team to take full advantage of Slack, but I like what I’ve seen so far.
- In order to get Slack and Azure to work together, I’m using Zapier. Zapier’s free tier is a little limiting, but it works for what I want. This company’s business model is to integrate inputs and outputs from other services. For example, Azure can post a specifically-formatted JSON message whenever a web deployment completes. Zapier reads that message and sends another message (whose contents I’ve configured) to Slack, which results in Slack displaying the Azure deployment results in a specific channel.
- Another tool that I’ve hooked into Slack is New Relic. New Relic is a tool that I picked up on during my AppHarbor days, and they integrate quite well with Azure. What New Relic does is application performance management: they’ll see how long pages take to load, what kinds of error codes you receive, and other important website information. I’m on the free tier here, which limits how far back I can go in the logs but doesn’t really cripple functionality, so I’m good with it. I also have integration between New Relic and Slack so I get a message whenever my server’s performance is at a critical state. If New Relic gets to be expensive, I’d probably go with ELMAH for error logging and pick something else for application performance.
- I’ve been a MailGun user for a while, again going back to AppHarbor days. They let you send 10,000 e-mails per month for free and their scale-up pricing isn’t too bad. Their API is pretty smooth and I found a Gist which shows how to make their API call asynchronously.
- I am also trying out SendGrid. SendGrid has a nice integration with Azure, and they allow 25,000 e-mails per month for free when you sign up through Azure. They also have a NuGet package which makes life easier. My one critique about the SendGrid API is that when you send an e-mail asynchronously, they return a void Task, whereas the above Gist for MailGun is a Task<HttpResponse>, so I can get the response code for integration tests.
I’m sure each of these services has its competitors, but these are the ones I’ve settled on. The fact that I can hook into a service to send e-mails (rather than configure and host a mail server), host my websites (rather than configure and host web servers), centralize communication (rather than track each item separately), and store my source code securely in the cloud (rather than host my own source control server) works wonders for me as a developer. I like learning about infrastructure, but there are so many ways to get systems administration wrong that I’d prefer for work purposes that somebody else get them right…especially when it’s free until we get to a point that we have a real revenue stream.