People often wonder why I love Go (#golang) so much. Aside from it being one of the coolest “new” languages out there, there’s actually more sound reasons. It scales very well and it’s not that other languages don’t, but Go scales in the sense of both technical and business concerns.
Go is a really safe choice for a business to build its web application. I’ll list the reasons first and then explain a little, but it mostly revolves around the fact your web application compiles to a single executable file (or sometimes even multiple binaries).
- Fast and easy deployment
- Cross platform support
- Protected source code
- Parallel processing (think cloud)
- Multi-threaded processing
Deployment is a business concern.
If your DevOps is not involved in your business decisions, you’re missing out. A good DevOps person should be able to save you tons of money. I mean it should be like Coinstar. You’re going to be surprised what’s in your couch and how much the change adds up. But are you gonna reach your hand down there into the couch? You don’t know what’s down there and you don’t want to know. Are you even going to think about it? No. So please include your DevOps person.
Distributing a single binary (regardless of filesize) instead of hundreds or even thousands of files for a web application is faster and easier. When transferring files, things can happen along the way. It’s also slow to transfer many files, this is why we zip them up into a single file and then decompress on the server. Think about how many actions are involved there and how many shell scripts your DevOps is going to have to write. Or in the very least, the time spent with that devil Jenkins.
Of course after you transfer the application, each server is going to need to have the proper software and configuration to run the application. Again, we have fancy tools like Docker and Puppet and Chef…But that’s a lot of time to set things up. Oh and maintain because you want to be on top of the latest version of things for security and performance. PHP? Python? Ruby?! Even Node.js? Well, ensure you have the proper versions installed to match what was written in your codebase. You’re in an endless upgrade cycle, but this is just a fact of life. Or is it?
Deployment is fast and simple with Go and the upgrades can be done on the developer’s machine. That saves time and time is money. Your DevOps will thank you too.
No “web server”
Like Node.js, you don’t need Apache or Tomcat or Nginx, etc. Your application is your web server and it handles HTTP requests. This is a huge benefit that I think is often overlooked. This means less server configuration, less maintenance, and less security issues.
It’s not often you’ll find yourself upgrading Nginx or Apache…But it happens and more importantly is how languages work with these web servers. It simply adds to your configuration and maintanence burden.
You’re still likely going to use a load balancer and proxy like Nginx or HAProxy, but it’s a huge advantage to have your web server close to your application. It will save time and make debugging some issues easier.
You can protect your source code
Not just if your server were to be hacked, but what if your business model needed to take a drastic change. Let’s say you had this awesome SaaS, but someone wanted to host it themselves? Say they wanted to white-label it and sell it to their clients? Sure, you’d have a license to protect you…But how trusting must you be? You surely don’t want to give them the source code! With web applications built with PHP, Ruby, Node.js, etc. you don’t have a choice. The program does not run without the source (though you can try to obfuscate it with things like IonCube, but those tools have their own limitations and complications and costs).
Can’t someone reverse engineer and decompile the binary? That’s very difficult and not worthwhile given what you get when decompiling. The short answer is no.
The “cloud” has a great impact on your business
When you build your application to take advantage of multiple servers and think in distributed, parallel, terms you’ll have a lot more flexibility. You’ll have more flexibility in your operating costs and choice of hosting vendors. You’ll be able to swap components of your platform in and out with ease. You can bring on more servers as needed and remove servers when you don’t need them. Go is the perfect companion to this type of architecture.
Squeeze out every inch of performance to save big
Go is great for multi-threaded processing too. This is important because you can better utilize a server’s resources by leveraging it. Many web application languages are single-threaded and that leaves a lot of waste on a system with multiple cores (most servers). It’d be like squeezing half the juice out of an orange to make orange juice. Think about all the wasted oranges.
It’s all about scalability
Both in terms of the business and the application. Can you scale your servers and get the maximize performance out of them? If so, you can be cost effective and perhaps even be in a position to out price your competition.
Can your business scale and use the software to fit new models? Are you in a position to distribute or white-label your code? Or is your business restricted in this manner? How many customers are being served by one instance of your application? Can you even have multiple instances running in parallel? These things greatly affect a business.
How is your business burdened by maintenance? Technical debt can outright kill a business. If you can’t move fast, your business suffers. If you are stuck fixing things or can’t move on to the next feature without re-building something, then your business could be strangled by the code.
These are the things to pay attention to. If you’re wondering if you’re working with a good CTO or DevOps person…Then these are the questions to ask them. They should be all over this stuff and you all really should consider Go.