So the question is, do programmers need to be polyglot, or is it the systems that are polyglot?
An interesting case study in Polyglot Programming is the Obama re-election campaign. The entire project was conceived of, designed, deployed, and dismantled in 583 days. It was spread across 3 data centers and 2000 nodes; it consumed 180 TB of data and supported 10,000 requests per second.
Luc Perkins (@lucperkins) says in his blog that the Obama campaign was unbelievably agile. It was 100% cloud based and polyglot. Poly-language, poly-framework, and poly-db.
Harper Reed, the CTO for the Obama re-election campaign, knew from the beginning he was resource constrained, so he bet big on the cloud. Without millions of dollars for servers, Harper chose Amazon Web services to host everything.
A presidential campaign relies heavily on volunteers. So rather than using a rigid architecture with fixed standards, he decided to leverage the varied resources of his volunteer. He created a deeply polyglot framework that allowed people to write code in multiple languages.
To manage these hundreds of different applications Reed relied heavily on APIs. He created a dashboard where citizens could interact with each other, never knowing that each application or sometimes each page was written in a different language. APIs allowed all the applications written in Ruby on Rails, Java, JSON, Node.js to communicate like they were written all written in a mother tongue. There was no tower of Babel.
As an enterprise architect, I would never have thought of doing it that way. I would have set my standards and then enlist the resources I need. Nevertheless, Mr. Reed couldn’t do that. He employed an agile framework that was modular and very iterative. With thousands of volunteers, he had a wildly diverse set of skills. To take advantage of that diversity, he used polyglot programming. He let the best and brightest minds build their own apps with the tools they knew best.
Harper created a framework where all of the different components could act as one. As each module came online, the functionality of the whole system increased. Programmers were able to create their own modules in the language of their choice, leveraging their expertise. The primary donation program was updated daily, and A/B testing occurred in real-time—that’s agile!
The Obama election campaign was certainly remarkable, and Harper was a clearly a genius, but is this kind of programming replicable? Can federal, state and local agencies can use polyglot programming and achieve this kind of agility?—I think so.
Let’s say an agency has an initiative to modernize a monolithic application. Rather than approaching it like a big bang, an agile approach using polyglot programming enables you to tackle one piece at a time in a modular fashion, developing components iteratively. This approach should not be confused with “minimum viable feature set” The goal is not to eliminate necessary features, but bring them on line iteratively. This way you end up with more and better features.
Studies have shown that when factory workers do repetitive work and can’t see the whole project they get bored, and their work quality decreases. The beauty of polyglot programming is that you have small teams or even individuals writing modules, but they also get to see how their module is part of the whole. They take greater pride of ownership, and quality goes up.
APIs are the magic that makes polyglot programming work. Without them you just a pile of separate modules. Agility means changing direction rapidly while maintaining control. Being agile doesn’t mean you have to all go learn a complete Agile framework like Scrum or SAFe, complete with all the new jargon of sprints, and scrum masters. The key to agility is iterative design and modularity. Smaller modules are easier to test. They are typically simpler. Simple is good! You may never be as agile as Harper’s team bringing new code online daily, but with polyglot programming and Agile you don’t need to rewrite you application as a big bang and risk blowing it all up. Agile doesn’t mean just going faster, by leaving out features. It means being able to change direction quickly while staying in control. This means testing earlier, bring code on line sooner, higher quality and a better user experience.
Not everyone programmer is going to be a polyglot—fluent in multiple languages. However your applications can be polyglot. Polyglot programming is the way of the future. It provides more flexibility and it fits the perfectly with RESTful architecture and Internet at scale. Moreover, you might be surprised to find that your programmers know more languages than you think.
Latest posts by Nathaniel Crocker
- Presenting Tech To Decision Makers: Be Bold, Be Brief, Be Gone…. - February 14, 2017
- Seven Trends and Predictions for 2017 - January 21, 2017
- Hyper-segmentation – How to Avoid Cyber Disasters - November 2, 2016