I’ve been thinking some lately about Operating Systems, software, functional programming, DevOps, and composable services.
I think they all may be headed for a common future.
Currently, when we want to make things happen, we move between imperative-style coding, where state is scattered all over hell and Georgia, to complicated deploy scenarios, where services talk to each other over all kinds of protocols, to even worse server architectures, where they’re set up once they just kind of grow in place. All of these pieces are moving targets with various versions and constraints. As each layer gets more complicated — the language, the services, the protocols, the architecture — we end up with more and more complex work of keeping all the pieces together and running smoothly.
We’re seeing some patterns. Pure functional programming is composable. Actually, that’s the whole idea: you compose functions into a larger transform. The Unix O/S service model, where you pipe together things like ls, grep, awk, and so forth, is also composable. Composable pieces are scriptable and easily testable; you can “play them back” to verify correctness. In addition, server architectures are also becoming scriptable, where you describe the server architecture in script and then the script builds the platform.
So why not join this all together?
Picture this: A pure FP language where you could either compile the entire code as one piece, or automatically split it up into chunks and deploy separately. You could keep the code in one place and the only thing you’d need to tweak would be the chunking. Want one big app with an input and output? Click this button. Want a dozen apps that talk to each other over a common format? Click that button. Now layer in some DevOps on top of that where certain pieces would talk to other pieces on a schedule, or across a wire, and this format, scheduling, and protocol could be specified in the code (perhaps using attributes). You could meld this into a Puppet/Ansible-style system where not only do you code the solution, but you code the deployment as well.
So you end up with one source file(s), in the same language, that covers app, inter-app-communication, scheduling, and deployment. Learn one system you learn the whole thing. Heck, roll in JS deployment and html while you’re at it. Go back to the days where you coded in one place and the things you coded just ran — you didn’t have to worry about 43 different pieces of complicated wiring spread everywhere.
Ok, now somebody go make that happenIf you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.