Michael Galloway
01/15/2025, 11:21 PMTomas Riha (AWS)
01/16/2025, 7:03 AMTomas Riha
01/16/2025, 10:41 AMBrian Newton
01/16/2025, 5:06 PMStill I agree with all I said..That's quite the accomplishment 🤣 Agreed. It takes restraint to avoid the "big ball of mud" with monoliths. I like Tomas's approach to lay a golden path by making it harder to have tightly coupled modules in your monolith. I've seen it done wrong more often than right, but that also applies to microservices (distributed monoliths are painful).
Michael Galloway
01/17/2025, 4:54 AMIt takes restraint to avoid the "big ball of mud" with monoliths.This is an interesting point, and one of my concerns. I'm not sure this is a problem Platform Engineering is suited to solve, other than helping to design tooling that simplifies "doing the right thing". @Tomas Riha it sounds like you've had to build support for this. Any suggestions on tooling we should consider (already assuming Bazel).
Tomas Riha (AWS)
01/17/2025, 2:10 PMdo build
or do test
(do being what ever tool we chose). The first reason which I never compromise on is portability. If I can do do build
and do test
locally with the exact same line of code as I do in the pipe then good things will start happening. You might need an argument s but the code for that step is the same regardless if you build locally or in pipe. The second reason is that it allows for different build, test and iac tools and swapping them out doesn’t touch the pipe.
This can be done by Bazel, Make or what ever. All suck. ;) But it’s an execution tool not a build tool we are looking at here. Even though Bazel and Make are called build systems, they are more then just that where as maven is just a build system in my mind. I want to be able to implement all steps in that orchestration tool. So from make build
to make deploy
.
I can now switch between Github and Gitlab by just rewriting my pipeline yml. I can swap from Java to Python withouth affecting my pipeline. In your case you can break out a module into its own micro service by pretty much just adjusting the pipeline.
bazel build
bazel test :order_test
bazel test :fulfillment_test
bazel run :deploy
Alt
bazel build
bazel test :allmodule_test
bazel run :deploy
So if the pipe contains these four steps, then it’s easy to just make add the Bazel run :deploy_fulfillment
or move duplicate it to a new pipe where you just remove testing of the others.
If using you use a collection target for all tests or not kind of depends on how much you wana force the issue on isolation and how you do bootstrapping of new modules. If this was micro services I would go for the later. In the modular monolith I might choose to be bit more explicit.Brian Newton
01/17/2025, 5:14 PMMichael Galloway
01/27/2025, 2:57 AM