State of Enterprise GoLang in India

sathish vj
9 min readDec 3, 2018

The GoLang ecosystem is buzzing and adoption is accelerating.

In the past few months I’ve conducted numerous Go training programs for the veritable who’s-who of large enterprises. These include the very biggest companies in finance, networking, chips and semiconductors, telecom, ride hailing, mobile payments, manufacturing & industry, software service providers, and offline & online retail. These have been primarily in India and a few in SE Asia and Europe. With this experience and from my viewpoint of visibility into all these different enterprises, I am seeing some very strong winds of change in the adoption of Go that individual silos in these companies might not have a view of. Why, employees within these companies are surprised to hear that other teams have fully transferred to Go. In this article I’ve collected some of the questions and concerns that I’ve been often asked and I hope to not only allay them convincingly but also encourage you further to adopt Go with confidence.

gopher kong captures the enterprise

Concerns/Considerations of Managers & Developers

Adopting a programming language cannot be a frivolous decision. There are various considerations to be taken into account. These are some of the actual questions I have got from managers and developers that I’ve then paraphrased.

  • Developers: are there enough opportunities in Go?
  • Developers: are there technical advantages in using Go over other languages?
  • Developers: why doesn’t Go have feature X? or why does it have feature Y?
  • Developers: but awesome feature Z in Go does not apply to my case.
  • Managers: are there enough developers in the ecosystem?
  • Managers: will developers be willing to learn the language? Can we train them?
  • Managers: are there advantages to rewriting existing systems with Go?
  • Managers: is this a stable language (or) we’ll have to support this system for many many years.

Then there are these questions I’ve not been asked but probably should be. My guess is that other languages don’t provide anything significantly useful in these areas and we don’t have the knowledge to demand it. (I’m reminded of Henry Ford’s and Steve Jobs’ thought on ‘people don’t know what they want until you show it to them’). Go is brilliant in these areas and it would be amiss if I didn’t highlight them.

  • How does it scale on modern systems?
  • How easy is it to program for scalability?
  • How well does it work in modern container systems?
  • Companies: are there political, legal advantages/disadvantages in adopting Go?
  • How easy is it to deploy Go apps?
  • How easy is it to distribute Go apps?
  • How is the tooling around Go? What else will I have to invest in for code quality checks?

Dev: enough opportunities in Go? Managers: are there devs in the ecosystem? Will they be willing to learn?

This is the most frequent question I receive — a balancing equation between opportunity and availability — and the one I want to address in depth as this is what is apparent to me working with many companies and teams, but seemingly invisible to others working in their own silos. These two points go hand in hand. In the years up to 2017, my discussions with managers usually concluded with me telling them that it is difficult to find many Go developers in the market. (Why that was so for a programming language so good/useful is a subject for another post). But it’s different in 2018. I think the critical mass for catalysing GoLang adoption in India has been reached.

Opportunities are definitely increasing. I see more job posts. I get more job offers. I know there are more projects in these companies being written in Go (even if it is not widely published). Some of these job opportunities are looking for Java/Python/C++ developers who are “willing to learn Go”. I’m getting more and more training requests so that companies can retrain Java/Python/C++/C/Node developers. I’ve trained at least a thousand people in corporate training sessions in the past half year alone. I’m currently booked out into early 2019 for training and consulting. And yes, the opportunities for good trainers are also very high — I expect that as I train more and more people, I will be able to ease my current hectic schedule as people I’ve helped will help the next batch and keep that snowball rolling.

As a consequence of new projects, rewritten projects, and requirements for Go programmers, there are more developers picking it up or willing to pick it up. I don’t have survey statistics specifically for India, but at least the general trend across the world is such. In the Stackoverflow Developer Survey for 2018, Go features among the top of the list for “Loved” and “Wanted”, and does not even feature in “Dreaded” — whereas most other languages do. I will still say that I think Java developers in Bangalore are still the largest pool of available software talent for backend development. The Go pool, at present, is definitely smaller, but growing.

When we started the GoLang Bangalore meetup group in 2012, it was a small group. Today there is a member count of 3,400+. Attendee sign-up for each event is regularly 100+. More companies are offering to host the events. (In an aside, I also definitely have to commend the recent crop of organizers who are doing a great job of holding these meetups at a regular monthly cadence.)

In summary, the ecosystem is looking very healthy for Go and availability and opportunities are generously feeding each other.

How does it scale on modern systems? How easy is it to program for scalability?

Languages like Node and Python are inherently single threaded and are unable to exploit modern systems with scores of CPUs/Cores/virtual-CPUs. You can write multithreaded programs in Java/C++/C#/etc. but it isn’t easy to manage.

In Go, you write a program for concurrency that beautifully scales to high end systems. As part of the training I conduct, the attendees write a fairly complex parallel program in about 20 minutes after going over goroutines, the sync package, channels, range & select over channels, etc. for a couple of hours. Yes, in 20 minutes people completely new to Go and to multithreaded programming have written clean, readable, maintainable, working, powerful code. That would be significantly challenging in pretty much any other language.

How well does it work in modern container systems? How easy is it to deploy Go apps?

It is one thing that almost every project in the container ecosystem — Docker, Kubernetes, and others — are written in Go. That by itself says a lot. But we are talking now about apps written for them. In using container systems, Go absolutely shines because it requires no dependencies and additional installations. The programs compile into a single, statically built executable that can be simply copy-pasted to deploy. With no need of a VM installation (like Java/C#) and no need of an interpreter (like Python), the deployment process is super light and easy. Imagine the startup speed difference between containers and pods with a minimum 300–400MB JVM installation prior to running your app and a few MBs of your entirely self-sufficient Go program. Also imagine the reduced resource utilization when running them.

Companies: are there political, legal advantages/disadvantages in adopting Go?

Go is open source and community owned. Go is yours as much as anybody else’s. C# is with Microsoft. Java is with Oracle, and personally, I don’t think they’ve been good players in the community. Who knows how the licensing is going to change next or what is going to be charged? For licensing reasons, it has been difficult for me to recommend Java these days. I wonder if companies are thinking the same thing. (update: I was talking to a few people in Jan 2019 who gave me concrete information about some big banks moving away from Java and rewriting their code because of licensing concerns).

How is the tooling around Go? What else will I have to invest in for code quality checks?

Go’s tooling is top notch. I’ve learnt that companies have spent millions of dollars on tools for code coverage, unit testing, benchmarking, tracing, debugging, etc. Here you get a bunch of great tools all for free.

Unit testing and benchmarking are part of the standard library. Go’s runtime is able to easily capture profiling data allowing you to optimize your code. It also produces coverage results. Call graphs give you the flow of code. And tracing helps you track goroutines and system resources like memory and threads. Documentation lives alongside code and is extracted from it. Using ‘go fmt’, all code written by anybody looks consistently the same improving readability and maintainability.

Coverage, Tracing, Benchmarks (with flame graphs)

Multithreaded/parallel/concurrent program is powerful but also difficult. The Go runtime is able to identify issues in your code, like deadlocks and those insidious race conditions. Demonstrate the -race option to a person who has been tortured by unpredictable code or “it works on my machine” syndrome caused by race conditions. If this was Hollywood, he/she would stand up and start clapping slowly.

Did I mention that all of this comes to you for free?

How easy is it to deploy Go apps? How easy is it to distribute them?

Go has pretty much become the de-facto language in which to write command line tools these days. Docker and Kubernetes are the mega popular ones. Why? Partly because the cross compilation to different platforms is straightforward and easy.

More importantly, the Go approach actually solves the cross-platform compatibility much better than others. Java/C#/Python/Ruby/Node requires you to have the same environment you coded in wherever you are deploying it. Try distributing apps with that rider. As I like to say “they’ve just kicked the can further down the road”. Go’s runtime is comparatively smaller by many orders of magnitude and it is a part of the executable, wherever you take it. Yes, the executable is probably bigger by an MB or two but compare that to the 100s of MBs that needs to be on every deployed machine as part of the VM, libraries, or interpreter.

Developers: why doesn’t Go have feature X? or why does it have feature Y? Developers: but awesome feature Z in Go does not apply to my case. Managers: are there advantages to rewriting existing systems with Go?

I get a lot of these questions but I couldn’t detail the responses here, but there are lots of articles and opinions on the net about these. Companies have seen great benefits in using Go and they have been effusive in their praise. They’ve done benchmarks and seeing Go performs very well. However, I do not claim that Go is perfect and it does not suit every single use case. I myself am a full stack developer who is language agnostic and uses up what works. It’s just that Go works very well for me and for many, many others. As Brad Fitzpatrick put it: Go, 90% perfect 100% of the time.

Is this a stable language (or) we’ll have to support this system for many many years.

One global firm that I consulted for was trying to figure out what language to adopt for their future. To avoid bias, they outsourced the research. The research, from a very established institution, concluded that it should be Go. Apart from the very relevant points we discussed — technical benefits of the language, great tooling, speed, distributability/deployability, etc. — one other point that stands tall is the governance around Go and what might have additionally supported the research.

The software for these firms have been running for decades. They need any new software to also be around for decades. Is the governance around the language suitable? For Go, there is a documented backward compatibility guarantee. So the programs you wrote for v1.0 still build and run on even the latest versions.

New features are vetted strongly before being added. The general approach is not to simply imitate other languages but verify that it works with other design choices in the language. Note that, holistically, even build speed, execution speed, readability, working with dependencies, etc. are also language features and not just keywords. Over the years there have been many improvements in terms of optimization, garbage collection, and other non-language features. So we have a very stable language that continues to run better.

tldr;

In India, Go has made a significant jump in adoption across enterprises & startups. In addition to always being a powerful bet, it is now a safe bet too.

I am an architect, an investor, and a tutor. You can find me at LinkedIn and Twitter.

--

--

sathish vj

tech architect, tutor, investor | GCP 12x certified | youtube/AwesomeGCP | Google Developer Expert | Go