When writing software, we have to contend with different environments, runtimes, dependencies et. all across potentially several developers, CI/CD processes and cloud deployments. With all this variance between where the source code is written and where it is run, it can be hard to manage all the sidecar scripts and random bits of tooling that accumulate over time.
We all know containers have revolutionized how we build, deploy and test our services, I think this is only the beginning. A lot of teams run into challenges where they suffer from bloated zombie deployment code that no one understands, or some error prone manual process for creating releases. What if developers had a universal configurable control plane that is the interface for every stage of development and deployment? What if it consistently behaved the same way on any machine from localhost to prod?
An la carte set of components operating under a common deployment interface like a helm chart and tilt. Errors could be surfaced far before a release rolls out. And what about how code is organized and structured? If there's a small team, it can be often difficult to keep track of what is going on across a critical mass of repos. How can we design our systems with strong contracts and loose couplings? Developers need to be able to iterate quickly, but autogenerated APIs like Hasura, Postgrest and Postgraphile are not the answer.
I've been thinking quite a bit about this lately at Cash and will be kicking off a new blog series on this subject. Going to throw out an obligatory disclaimer, these are just my opinions and do not reflect the stance of Cash Engineering.
Every team, and problem have their own considerations. These abstractions may or may not work for your use case or teams. This is not intended to be the ideal setup, but rather an examination of strategies for spinning out the flywheel that allows devs to get going quickly.
The map is not the territory
For small to medium sized teams, I've found that monorepos offer a high degree of visibility for development, additionally with some effort on CI/CD it can drastically simplify the build processes while accelerating the cadence and reliability of deployments.
Above is a sort of living sandbox that we'll be exploring in this series. Consider it a starter for Sourdough, I'll be exploring various topics and ideas on a generative basis. So rather than a more standard tutorial, this will be a bit more long form. Also if theres any ideas or suggestions, please open a PR! Contributions are totally welcome.
stay tuned.
Top comments (0)