Now, I’m not sure the extreme versions of the core ideas of CD and CI are actually the best ones in practice, but part of that could simply be that we need to find a way to make it practical.
As I recall, those ideas came out of XP, which obviously was all for eXtremes. XP really loves making everything continuous, I actually wish they’d have called pair programming continuous code review, feel that would have had a stronger impact on people if they named it that.
Within XP, you might be able to achieve finer granularity, if you truly do TDD for every single function and pair program all things, use feature flags, I can see how you could maybe get to a place where you integrate and deploy every changes that can compile. Still, I feel this isn’t practical quite yet.
If we could connect our editor changes and REPL evaluations to that pipeline instead, with a sufficiently smart test-on-demand system, based on what each change meant needed to be tested, we could indeed have all those continuous changes flow directly into a truly Continuous Integration process and then into a truly Continuous Deployment process
And this is super inspiring. Because I never really thought, why should Clojure leverage the practical tooling that other languages had to setup to enable them practically apply CD and CI practices? Can’t Clojure do something better here?
It made me think:
What if we had a shared REPL? What if the whole team connected to the same REPL? What would it take to achieve this and make it practical? Could we design a REPL that enabled this and made it practical?
What if feature flags could be built into Vars and our REPL ? When I send a form to the REPL, what if instead of swapping the Var root, it like added itself to the Var and a feature flag.would control which root you’d be getting ? What if it even had nice A/B testing functionalities built in like running both and comparing their result, or running B X% of the time and A the other. Etc.