For years, I’ve done almost all of my development in the cloud. Most of this has been spent with Cloud9 (and then AWS Cloud9 after Amazon bought the company). Now that I’m using an iPad Pro full time (more on that in another post) this has become more important to me. And following the success of Cloud9, competitors have started springing up. Today lets examine Cloud9 vs Microsoft’s new offering, Azure Codespaces.
What is a cloud IDE?
For this purpose, I’m defining a cloud IDE as a application delivered through a web browser that allows you to write arbitrary code as if you were developing on your own local machine. Cloud9, Codespaces, and CodeReady Workspaces are examples of what I mean. The solution should be ideally fully managed (I don‘t need to provision a server and worry about patching/updates/maintenence) and should work on pretty much every machine I might use (PC, Mac, iPad, Chromebook, etc).
AWS Cloud9 is backed by EC2. The smallest instance Cloud9 offers is a T2.micro (1 core, 1GB RAM), which costs $0.0116 per hour (about $8/mo for 24/7 usage). You also pay for storage, which costs $0.10 per GB per month.
Codespaces smallest instance is a Basic instance (2 cores, 4GB RAM, 64GB SSD) which costs $0.085/hr (about $60/mo for 24/7 usage). You also pay for storage, which costs $0.0088/hr (about $6/mo).
A comparable C9 instance is a T2.medium which costs $0.0464/hr ($33/mo 24/7), making Cloud9 much cheaper than Codespaces. Amazon estimates your total C9 bill at just over $2 per month assuming you work 4 hours per day for 20 days a month (80 hours of work). For 100 hours of work, Microsoft estimates the cost at $23.30. This makes Codespaces more than 10x the cost of Cloud9, and you pay outrageous fees even if your Codespace isn’t actively running thanks to the cost of storage. In fact, cutting that 100 hours of active user per month to just 40 only saves you $3 because the cost of storage is so much higher than what AWS charges.
Codespaces also requires you to create a “billing plan” that’s assigned to a subscription and then assigned a plan name. AWS just charges your default account. It’s minor and ultimately doesn’t matter much but it’s another bit of classic Microsoft leaking through. I don‘t care about these things, I just want to write code.
This reinforces my view that Azure is an enterprise cloud (because an enterprise wouldn’t blink at $20/mo) while AWS is the cloud for everyone. Of course both services offer a free tier that can give you 12 months free, but after you’ve used those 12 months, the cost can really start to pile up. It won’t matter to a funded startup or an enterprise, but for personal use or a bootstrapped company, $2 vs $20 is a huge cost savings.
Let’s get two facts set out of the gate.
- Yes they both work on an iPad
- The mouse doesn’t scroll on either of them.
I know. Absolutely ridiculous. Cloud9 at least used to support mice, between iPadOS 13.1 and iPadOS 13.4, but after that for some reason the scroll wheel stopped working inside both of these applications. You can still scroll with a finger on the touchscreen, but not with a scroll wheel. To be honest I blame Apple on this one (as does the team who supports the editor used in C9 and Codespaces) but it‘s still a mark against both products and absolutely annoying. Not a deal breaker, but… annoying.
Other than that, they both work exactly like you expect on the desktop. I can write code, pull in npm/gem/pip/etc packages. It works.
Likewise I can do npm run and open another browser tab to see my application. Everything works as expected.
Codespaces has some weird Microsoft quirks that make it especially annoying on an iPad. When you switch browser tabs (like to view your site or check documentation), Microsoft suspends your instance way faster than the 30 minutes it’s set to by default. When you resume, you are greeted with a message that it will auto-reconnect in five seconds. Why not now? Why not just do it? Why tell me what you‘re about to do?
Likewise every time you resume your Codespaces instance it opens a connection window telling you how far along in the connection process the server has gotten. Cloud9 hides this behind a loading screen. Ultimately it doesn’t matter, but Codespaces makes you close the connection window manually. It’s a minor thing, but again I’m just left wondering… why?
In another minor annoyance, Codespaces doesn’t seem to offer a one-click preview of your running web app. Cloud9 has a handy Preview button at the top. Now it does annoy me a little that it defaults to opening in a tiny window in the terminal, but it’s just one more click to get to a full browser window. Two clicks and you’re running your site like production. Codespaces on the other hand… well first you need to forward some ports, maybe make a launch.json file? I’m not sure, I never actually got it working. I was too afraid of how much it was costing me to figure out how to configure something that takes just two clicks in AWS’s solution.
The winner is Cloud9. Hands down. It does everything I need it to do, it costs as close to nothing as you can get, it works out of the box, it doesn’t go out of its way to annoy me at every opportunity, and did I mention how much cheaper it is?
The only reason I would pick Codespaces is if I was running the code server on my own equipment, or if I needed a completely private/on-premise server (like for sensitive client work). But anything that can be done in the cloud… Cloud9 wins.