In 2014, I have written a blog post titled Web Development Trends For 2015 And Beyond, in which I have predicted that Go will become an emerging programming language in 2015 for developing web backend systems. In 2015, Go was gradually becoming a language for building RESTful backend systems and Microservices. I predict that 2016 will be the year of Go and the Go adoption will reach at its peak level since its first release in 2009.
In the past few years, a paradigm shift has been taking place in software development and solution architectures. A paradigm shift to simplicity, minimalism and pragmatism. Go programming language represents the paradigm shift of being a simple and pragmatic language with inbuilt support of concurrency, to write high performance and efficient software systems.
Real-world Experiences Of Go Adoption
In my country, India, I have been working as a Consulting Solutions Architect on Go, and helping several organizations for the successful adoption of Go in their software engineering teams. Let me share my experience and observations on Go adoption regards with my consulting experience with various teams.
Learning Curve For Adoption Is Extremely Easy
The learning curve is an important factor and decision making parameter when you adopt a new technology. When you adopt a complex technology stack for new software system, you may face some difficulties to deliver the product on time. Faster time to market is a super critical thing in the highly competitive era of products. I have guided many organizations for adopting Go for their product engineering. Let me share some experiences about the learning experiences on Go.
First, let me share the experience of a ten member fresher engineering team. They were completely new to the world of real-world software development, with just having an academic background on C and C++. I have provided two- week training to the team on Go language and Go’s HTTP programming. After completing the training, the team had been worked on example Go web apps for two months. After this period, the fresher engineering team were very solid on Go’s HTTP programming for building RESTful backend systems, and since then, they have been working on mobile backend systems in Go without any productivity issues, for a product on mobile. Many people are saying that Go is not good for fresher engineers. But in my real-world experience, Go is also good for fresher engineers as well if an experienced Go developer can guide them properly by providing guidance on conceptual things of Go.
The next experience is about a team of 2–3 year experienced engineering team. Before Go, their experience was on system-level programming with C and C++. With Go, they were planning to build RESTful APIs as the backend for mobile apps. Here I have provided one-week training on Go language, HTTP programming and data persistence with NoSQL databases. After the one-week training I have provided platform architecture guidance on Go for building RESTful APIs, and the team has spent one week time on it . Then the team has started to work on a real-world backend system for mobile apps where the team were working on tight delivery schedule, but they delivered the app on time. Now the team has been working on another mobile backend system and working like experienced developers.
The next story is about the Go adoption of an experienced team. The team were developing a mobile payment platform using .Net stack on the server-side stack. During their development using .Net stack, I had a technical discussion with the Co-Founder/Architect of the company and mentioned about Go. He is a passionate technologist and a veteran .Net developer, who asked me to provide a technical guidance on Go, not for using any application, but just for understanding the stack. Then I have provided guidance on platform architecture of Go for one-week duration for developing highly scalable backend systems using Go. After this technical guidance on Go for a week, he was super excited about Go especially about its simplicity and pragmatism. This excitement on Go, led to him to adopt Go for the development of mobile payment platform. His team stopped the development using .Net stack, and since then, they have been working on Go for their next-generation mobile payment platform. Even though Go is a new technology for them, the team has been getting more productivity and better performance with Go when it is compared to .Net stack.
We have discussed three different stories about the Go adoption where the teams were from different backgrounds and experience level — fresher developers to senior developers and architect. In all these three categories, the learning curve was super easy and adopting Go for a real-world application was very smooth. Even there is a observation that Go is not good for fresher engineers. But in my experience, a freshers teams also picking Go in faster way and was able to develop real-world applications within short time of learning. The reason behind the faster adoption of Go is very simple — the simplicity and pragmatism of the language. Go is a language designed to be a simple language while it provides all batteries for building large-scale applications.
A Case Study — Aspros Instant Money (AIM)
Let me share one of my consulting experience on the successful adoption of Go for the engineering of an innovative product.
Aspros Instant Money (AIM) is an innovative e-Remittance and Payment platform developed by aspros Technologies, Doha, Qatar. The application is highly secured with a Dual Authentication mechanism. Using AIM, an account holder can Send or Receive Money Cross-Border, Send Money to Bank Accounts, Send Instant Cash to a wide Network, Withdraw Money from any ATM (Card / Cardless), Pay Utility Bills, Fund Transfer, E-Commerce Payment, AIM POS Payments, etc.
The application development was initially started with .Net technology stack using ASP.NET MVC framework for backend. In the middle of development, the team has decided to adopt Go, and then the development has restarted with Go for developing a massively scalable backend APIs. The platform was initially developed for the market of middle east countries, especially for Qatar. But now the platform is targeting to more countries and markets including India. The Go adoption has been really helped the product engineering process. The immediate results are high productivity, better performance and faster time to market. We have used a simple, but scalable architecture for Go based implementation and haven’t used any Go framework for the development of backend RESTful APIs. We have extensively used HTTP middlewares which is handled by negroni stack. The Go adoption for this product was huge success in all aspects and I highly recommend Go for developing RESTful backend systems.
Go Trends For 2016
I predict that Go will dominate in year 2016 and you can see the Go adoption in the development of various kind of applications — RESTful APIs and Networked Servers, Distributed systems, Infrastructure tools, Internet of Things (IoT), Native Android development, System-level applications, and many more.
Let me summarize some of the predictions on Go for 2016.
Go Will Dominate On Backend Systems And Microservices
In the mobility era, backend RESTful APIs are becoming the backbone of modern applications and our backends are just becoming an API. At this moment, we have been using variety of technologies for developing backend APIs which includes Go, Node.js, Java, .Net, Ruby and Python. IMHO, among these technologies, Go is ideal for developing backend API systems. Go is the technology in the era of Microservices architecture. In 2015, we have seen lot of adoptions towards Go for the development of backend APIs and Microservices. I predict that this will reach at its peak level in 2016.
Re-engineering of Backend Systems To Go
Java and .Net stacks have been the choice in enterprises, and Node.js, Ruby and Python stacks have been the choice in startups and mid-sized companies, when we develop backend applications. Many of the existing Java and .Net based applications have been struggling due its complexity when we scale-up applications. Ruby and Python stacks have been sucking due to its performance problems, complexity on maintainability and scalability challenges. We all know that dynamic type languages like Ruby and Python can provide high productivity and a great stack for startups when they quickly build their products. When these products get successful and then we try to scale-up for solving new scalability challenges, the advantage of using a dynamic type language will stab you in the back with performance problems and maintainability and scalability challenges. Another thing is that many conventional web applications have been re-engineering as backend APIs.
When we re-engineering applications, Go is gradually becoming a choice for the new applications. This is widely happening for Ruby On Rails. Interestingly, most of the early adopters Go was Ruby developers. In 2015, I have observed that many Ruby On Rails applications have been migrating to Go. One of the example is Parse, a Mobile Backend as a Service (MBaaS) which was developed with Ruby on Rails, has been migrated to Go. Check out Parse team’s blog post on this at “How We Moved Our API From Ruby to Go and Saved Our Sanity”. Now the Go powered MBaaS platform provides backend for around 6,50,000 mobile apps.
Node.js has been using in many mobile backend systems, which provides high performance when it compared to many traditional technology stacks. Node.js is great for building mobile backend systems which I had been used for some systems. When your HTTP requests are having resource crunching logic on the server or your backend systems are having distributed computing components, Node.js is simply fails. Check out an interesting blog post from TJ Holowaychuk, who was a prominent leader in Node.js land, about his decision to leaving Node.js and adopting Go at Farewell Node.js.
In 2016, lot of web based systems will be migrated to Go from Ruby, Python, Node.js, Java and .Net.
Go Will Continue As A Language For Container Stack
Decades ago, C and C++ was the default choice of language for building system-level applications. In the world of application containerization, this is Go. Go is an undisputed leader in the container world and all major tools in the containers stack are being developed with Go. Docker, Kubernets, rkt and most of the tools in the container stack was developed with Go. This monopoly will also continue in year 2016. Go is also a great technology stack on DevOps and building infrastructure tools.
Go — Startups’s Choice Of Language
Startups are early adopters of new technologies and innovations. When they start a new product they will choose a most emerging technology. In the past, it was Ruby and Node.js. In 2016, you can see that Go will be widely used as a programming language in the startups when they begin engineering of new products. IMHO, when you start new engineering team from the scratch, Go is the ideal choice of language because its simplicity and pragmatism. You can speed-up the engineering of your product quickly as possible because of the least learning curve and high productivity. Go provides the productivity of a dynamic type language while keeping it as a static type language.
Go As A Choice For Native Android Apps
The Go Mobile project supports native mobile development for both Android and iOS. I predict that Go’s mobile development support will improve in each new version. In 2016, Go would be used for building Android apps in a minimum level and it will be widely used in near future.
At this moment, Go is a ultimate technology stack for building scalable backend for mobile apps. The Go Mobile lets Go developers to build native mobile applications. So Go developers can build applications for both backend and mobile frontends.
Go Adoption Will Happen In Enterprises
I strongly believe that Go is the biggest thing in enterprise application development after the arrival of Cobol and Java. In enterprises, the current challenge is cope with enterprise mobility and expose enterprise data into mobile devices by exposing RESTful layers and building distributed computing components. The solution architecture of modern computing is different than the days of Java was born two decades ago. Nowadays we are building systems on Cloud infrastructure, Applications Containers and Container Clusters, Servers with multi core infrastructure. We use Microservices architecture for building larger systems over the monolithic architecture. Go is designed for solving modern challenges and targeting for building massively scalable systems on modern computers ad modern IT infrastructures. Go is the new language of choice in enterprises in the era of Cloud computing, application containerization and concurrent applications for modern multi-core machines. Go will be the next Java in enterprises. In 2016, lot of Go adoption will happen in enterprises and this will get big momentum in 2017.
In a nutshell, Go will be the next big programming language, which will be dominated in year 2016 for the development of backend APIs, re-engineering of backend systems, distributed systems, tools for application containers and infrastructure, and DevOps. Go will get lot of attention as language for building native Android applications. And finally, Go is coming to the enterprises as the next Java and a language for solving modern challenges. Welcome to the world of simplicity and pragmatism over the academic and intellectual thoughts. 2016 is going to be the year of Go.
You can follow me on twitter at @shijucv. I do provide training and consulting on Go programming language (Golang) and distributed systems architectures, in India.