Anatomy of a domain-specific PaaS - what is a domain-specific PaaS anyway?!

· 649 words · 4 minute read

Languages are amazing things. For all the beauty of music and dance, neither has the ability to convey information as precisely as human language. Sure, there’s few better expressions of romantic love than Percy Sledge’s When a Man Loves a Woman, or more convincing statements of intergalactic dominance than an enthusiastic performance of the Hammer dance. But if you need to give someone directions to the railway station, or explain the poor numbers of the sales unit in the quarterly report, you’re probably better off using a human language rather than humming or interpretive dance.

As it is with human to human communication, so it is with human to computer communication. Point and click user interfaces, and low-code platforms are extremely capable these days. And who would argue against the spreadsheet being the most important software application of all time (ok, web-browsers we see you, please sit down)?. However, in some scenarios, when we need to direct a computer in precisely the manner we desire, there is no substitute for the expressiveness and fidelity of a programming language.

# If you want to tell your computer you love him/her/it, 
# you will need a programming language
while True:
    i.love(you)

Learning some basic programming is also not that hard. A language like Python has a syntax similar to English, and there are a huge variety of high-quality resources online to help beginners start coding.

Learning the entire discipline of software engineering, on the other hand, can be a life’s work. Non-functional requirements such as security, monitoring, version control, build systems, logging, dependency management, deployment, resource isolation (and more!) can easily turn one hour of coding into months of enterprise bureaucracy.

Enter the PaaS 🔗

The promise of PaaS’s such as Heroku or OpenShift is to increase productivity by enabling engineers to focus on the development of an application. They achieve this by standardising and automating as many non-functional requirements as possible, thereby reducing complexity and lead times. If you’re a developer used to emailing IT to obtain a VM/database on which to run your application and waiting hours/days/weeks for it to be delivered, the empowerment you will feel when handed the keys to a PaaS is priceless.

However, for the most part, you do still need to be a developer to use these systems. Because the intention is to constrain the user as little as possible, they leave a lot of choices to be made during development. They also require familiarity with the command line, git, databases and other tools normally outside the skill-set of non-developers.

For this reason, over the last few years, a new generation of hyper-focused domain-specific micro-PaaS’s have been brought to market. These systems enable a user to write a tiny amount of code - perhaps just the body of a function - directly in a browser based IDE. The user code either has pre-configured access to domain-specific APIs, or may be written in a Domain Specific Language (DSL) itself.

There are many examples in the crypto space - for example, you can use Trality to create managed trading bots, and Remix to develop and deploy smart contracts for Ethereum. In more traditional finance, QuantConnect is a platform that can be used for backtesting and live-trading automated strategies using Python and C#. In the IoT world, the ThingsBoard rules engine allows you to write JavaScript to react to incoming events. Something more fun, but no less valuable - Code Combat is a game-based learning platform that teaches kids how to code.

The rise of tools such as Kubernetes and VSCode-for-the-Web has reduced the cost of developing a domain-specific PaaS dramatically, creating opportunities that wouldn’t have been economically viable just a few years ago. The remainder of the posts in this series will describe one possible architecture of such a system.

The next post continues with the example use case and presents the platform at a high level.