SlideShare a Scribd company logo
Polyglot Programming
and
Agile Development
Shashank Teotia
Pramod Sadalage
ThoughtWorks
Problem Statement
“To create multi-platform gaming hardware
configuration software with crowd sourcing
and backup abilities with an awesome GUI
which looks the same on all supported
platforms.”
- Client
“Adding a new platform / device should be trivial.”
“Of course, don’t forget that the software
should have minimal CPU & memory
footprint.	

!
Gamers hate bloatware!”
“And yes, I have a small team, distributed
across 3 continents. They should be busy
delivering features, not get caught up in the
operational challenges.”
:)
OK, this is not a special situation!
How do you architect?
Lets look at the world
for inspiration
Does the
carpenter
use just
one tool?
credit: homespothq.com
Carpenter
uses many
tools to
get the job
done
credit: homespothq.com
Some time back we
could write a
system with COBOL
The world by nature is
polyglot
Have done it earlier
Bash/Shell
AWK
Perl
SED
etc…
Neal Ford coined
the term in 2006
bit.do/neal4d
Many new languages
on the JVM started
the trend
Java, Jruby,
Jython, Clojure,
Scala, Groovy,
Rhino
Lets talk of our
experience
Observation &
Awareness
“Lets break down the domain!”
- Biz people
“Divide & Integrate!”
- informally dressed devs
Observation
Think Bounded Context
- Eric Evans in Domain Driven Design
“To create multi-platform gaming hardware configuration software with crowd
sourcing and backup abilities with an awesome GUI which looks the same on all
supported platforms. And yes, adding a new platform or device should be trivial. Of
course, don’t forget that the software should have minimal CPU and memory
footprint.”
!
“And yes, I have a small team, distributed across 3 continents.They should be busy
delivering features, not get caught up in the operational challenges.”
GUI
Core
Device Library
Cloud
crowd sourcing
backup
distributed
operational challenges.
small team available
multi-region
PaaS
replication
Device Driver
cross-platform
multi-platform
hardware configuration
looks the same
awesomelightweight
trivial to add a new platform
lightweight
gaming
multi-threaded
build easy
C interface
trivial to add a new device
generic HID USB interface
long running
short-lived
device communication
Awareness
In your search for the right language,
you should underrate your current skills.
Repeat it.
Choosing the right language is a
competitive edge!
Case Study
Cloud
crowd sourcing
backup
distributed
operational challenges.
small team available
multi-region
PaaS
replication
GUI
cross-platform
looks the same
awesomelightweight
gaming
short-lived
Core
multi-platform
hardware configuration
trivial to add a new platform
lightweight
multi-threaded
build easy
C interface
long running
Device Library
trivial to add a new device
generic HID USB interface
Device Driver
device communication
GUI
cross-platform
looks the same
awesomelightweight
gaming
short-lived
Core
multi-platform
hardware configuration
trivial to add a new platform
lightweight
multi-threaded
build easy
C interface
long running
Device Library
trivial to add a new device
generic HID USB interface
Device Driver
device communication
Chef	

Infrastructure as a Service	

(scaling is easy)
Sinatra	

modular RACK app	

(API dev is blazing fast)
RIAK	

distributed, CAP tunable DB	

(backups never fail)
Cloud
Core
multi-platform
hardware configuration
trivial to add a new platform
lightweight
multi-threaded
build easy
C interface
long running
Device Library
trivial to add a new device
generic HID USB interface
Device Driver
device communication
Chef	

Infrastructure as a Service	

(scaling is easy)
Sinatra	

modular RACK app	

(API dev is blazing fast)
RIAK	

distributed, CAP tunable DB	

(backups never fail)
Cloud
node-webkit 	

Native Apps in HTML5	

(write once, run anywhere)
Knockout	

lightweight JS MVVM	

(complex UI modeling made easy)
GUI
Cocoa	

Mac UI Controls
Device Library
trivial to add a new device
generic HID USB interface
Device Driver
device communication
Chef	

Infrastructure as a Service	

(scaling is easy)
Sinatra	

modular RACK app	

(API dev is blazing fast)
RIAK	

distributed, CAP tunable DB	

(backups never fail)
Cloud
node-webkit 	

Native Apps in HTML5	

(write once, run anywhere)
Knockout	

lightweight JS MVVM	

(complex UI modeling made easy)
GUI
Cocoa	

Mac UI Controls
Google Go
Core
Interfaces & Build constraints	

(easy multi platform dev)
Simple and unambiguous	

(focus on the domain)
CGO	

(call C code)
built-in concurrency primitives	

(no multi-threading hell)
cross platform libraries	

(just specify the build env)
Device Driver
device communication
Chef	

Infrastructure as a Service	

(scaling is easy)
Sinatra	

modular RACK app	

(API dev is blazing fast)
RIAK	

distributed, CAP tunable DB	

(backups never fail)
Cloud
node-webkit 	

Native Apps in HTML5	

(write once, run anywhere)
Knockout	

lightweight JS MVVM	

(complex UI modeling made easy)
GUI
Cocoa	

Mac UI Controls
Device Library
Lisp	

data is code	

(add new device)
good old C
Google Go
Core
Interfaces & Build constraints	

(easy multi platform dev)
Simple and unambiguous	

(focus on the domain)
CGO	

(call C code)
built-in concurrency primitives	

(no multi-threading hell)
cross platform libraries	

(just specify the build env)
Chef	

Infrastructure as a Service	

(scaling is easy)
Sinatra	

modular RACK app	

(API dev is blazing fast)
RIAK	

distributed, CAP tunable DB	

(backups never fail)
Cloud
node-webkit 	

Native Apps in HTML5	

(write once, run anywhere)
Knockout	

lightweight JS MVVM	

(complex UI modeling made easy)
GUI
Cocoa	

Mac UI Controls
Device Library
Lisp	

data is code	

(add new device)
good old C Device Drivergood old C
Google Go
Core
Interfaces & Build constraints	

(easy multi platform dev)
Simple and unambiguous	

(focus on the domain)
CGO	

(call C code)
built-in concurrency primitives	

(no multi-threading hell)
cross platform libraries	

(just specify the build env)
A 10 member team manages it all
The Secret Sauce
Feed the Build
Pipeline
Build Pipeline
Core
Func Tests
tarball
report
FrontEndpackage.nwgit
git
git
Promote Build
DeviceLib Drivers
lib
Promoted Build artifacts
Installer
pkg
Go exe tarball package.nwlib
Deploy package artifact
A good choice!
Working with an
embedded Chromium
browser helped!
A simple RESTful
SOA
tested using Cukes!
Keeping a tight
control
over test code
quality helped!
#failfast
Speed & simplicity
of building Go
meant a tighter
turn around!
Skype channel for
communication
Challenges!
Paradigms are hard to
master
Debugging can be
tricky
Don’t succumb to
the Highlander
Fallacy
bit.do/highlander_fallacy
"Always code as if the
g u y w h o e n d s u p
maintaining your code
w i l l b e a v i o l e n t
psychopath who knows
where you live."
Ultimately what
matters...
... is a happy
Client
And remember
superheroes!
bit.do/superpowers
Thank you!

More Related Content

PDF
20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경
PPTX
Data Management and Streaming Strategies in Drakensang Online
PPTX
C++ on the Web: Run your big 3D game in the browser
PDF
A deep dive into Android OpenSource Project(AOSP)
PDF
Containerize All the (Multi-Platform) Things! by Phil Estes
PPTX
QA Club Kiev #20. Making life easier with Docker
PDF
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
PPTX
DockerCon 15 Keynote - Day 2
20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경
Data Management and Streaming Strategies in Drakensang Online
C++ on the Web: Run your big 3D game in the browser
A deep dive into Android OpenSource Project(AOSP)
Containerize All the (Multi-Platform) Things! by Phil Estes
QA Club Kiev #20. Making life easier with Docker
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
DockerCon 15 Keynote - Day 2

What's hot (20)

PDF
Docker multi-stage build
PPT
Programming
PDF
DCEU 18: Continuous Delivery with Docker Containers and Java: The Good, the B...
PDF
Containerd + buildkit breakout
PPTX
Docker for .NET Developers
ODP
DevOps @ OpenShift Online
PDF
Docker at Cloud9 IDE
PDF
Red hat cloud platforms
PDF
Use React tools for better Angular apps
PDF
Ansible 2.0 - How to use Ansible to automate your applications in AWS.
PDF
Build and run applications in a dockerless kubernetes world
PDF
DockerCon US 2015 - Engine Breakout Session
PPTX
Developer South Coast 2018: Modernizing .NET Apps with Docker
PDF
Knative makes Developers Incredible on Serverless
PDF
Efficient multimedia support in QtWebKit on Raspberry Pi (GStreamer Conferenc...
PDF
Adventures in docker compose
PPTX
Docker Orchestration: Welcome to the Jungle! JavaOne 2015
PDF
Docker in practice
PPTX
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
PDF
Kubernetes buildpacks - from a source code to the running OCI container with ...
Docker multi-stage build
Programming
DCEU 18: Continuous Delivery with Docker Containers and Java: The Good, the B...
Containerd + buildkit breakout
Docker for .NET Developers
DevOps @ OpenShift Online
Docker at Cloud9 IDE
Red hat cloud platforms
Use React tools for better Angular apps
Ansible 2.0 - How to use Ansible to automate your applications in AWS.
Build and run applications in a dockerless kubernetes world
DockerCon US 2015 - Engine Breakout Session
Developer South Coast 2018: Modernizing .NET Apps with Docker
Knative makes Developers Incredible on Serverless
Efficient multimedia support in QtWebKit on Raspberry Pi (GStreamer Conferenc...
Adventures in docker compose
Docker Orchestration: Welcome to the Jungle! JavaOne 2015
Docker in practice
GCP - Continuous Integration and Delivery into Kubernetes with GitHub, Travis...
Kubernetes buildpacks - from a source code to the running OCI container with ...
Ad

Similar to Polyglot programming and agile development (20)

PDF
Experiences using CouchDB inside Microsoft's Azure team
PDF
Minko - Scripting 3D apps with Lua and C++
PDF
Embarcadero's Connected Development
PPTX
Confoo - Javascript Server Side : How to start
PDF
Rapid and Reliable Developing with HTML5 & GWT
PDF
All good things scale - ohs 2020 - 03.13.2020
PDF
QNX, C/C++, Qt, Cascades, HTML5… So what’s now BlackBerry 10 application deve...
PPTX
Docker 101
PDF
Demystifying Docker
PPTX
Demystifying Docker101
PDF
Extending DevOps to Big Data Applications with Kubernetes
PDF
Ballerina Serverless with Kubeless
PDF
Ballerina Serverless with Kubeless
PDF
【BS1】What’s new in visual studio 2022 and c# 10
PPTX
Crosswalk and the Intel XDK
PPT
Snug2007 Presentation
PDF
Docker module 1
PPTX
Nodejs Native Add-Ons from zero to hero
PDF
Add the power of the Web to your embedded devices with WPE WebKit
PPTX
Hybrid Mobile Applications
Experiences using CouchDB inside Microsoft's Azure team
Minko - Scripting 3D apps with Lua and C++
Embarcadero's Connected Development
Confoo - Javascript Server Side : How to start
Rapid and Reliable Developing with HTML5 & GWT
All good things scale - ohs 2020 - 03.13.2020
QNX, C/C++, Qt, Cascades, HTML5… So what’s now BlackBerry 10 application deve...
Docker 101
Demystifying Docker
Demystifying Docker101
Extending DevOps to Big Data Applications with Kubernetes
Ballerina Serverless with Kubeless
Ballerina Serverless with Kubeless
【BS1】What’s new in visual studio 2022 and c# 10
Crosswalk and the Intel XDK
Snug2007 Presentation
Docker module 1
Nodejs Native Add-Ons from zero to hero
Add the power of the Web to your embedded devices with WPE WebKit
Hybrid Mobile Applications
Ad

Recently uploaded (20)

PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Encapsulation theory and applications.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Approach and Philosophy of On baking technology
PDF
cuic standard and advanced reporting.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
A Presentation on Artificial Intelligence
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Electronic commerce courselecture one. Pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
NewMind AI Weekly Chronicles - August'25 Week I
Review of recent advances in non-invasive hemoglobin estimation
Chapter 3 Spatial Domain Image Processing.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Encapsulation theory and applications.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Approach and Philosophy of On baking technology
cuic standard and advanced reporting.pdf
Empathic Computing: Creating Shared Understanding
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
A Presentation on Artificial Intelligence
The AUB Centre for AI in Media Proposal.docx
Electronic commerce courselecture one. Pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication

Polyglot programming and agile development