Architecture Weekly #98 - 24th October 2022
Welcome to the new week!
Martin Fowler is less active than before. Still, it’s always worth reading his thoughts once they’re out. He recently wrote about a topic vital to me: Conway’s Law. Mel Conway wrote:
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
Teams that cannot cooperate won’t create correctly working software. Moreover, we’ll see all the communication and organisational issues transpiled into our software design. I wrote on this longer in Sociological aspects of Microservices. Technical issues are much easier to solve than organisational ones. More often I saw projects failing because of such issues.
Still, there’s hope, if we’re able to focus and work on the sociotechnical aspects, of our organisational culture, then we can also make the inverted effect. Event-driven design, with its focus on communication and autonomy, can enable and trigger cross-team collaboration. I wrote about that in How using events helps in a teams' autonomy.
Still, creating that it’s not so easy. Read more in:
Luckily, we can have decent communication in our community. As most of my career is related to coding in .NET, I have always wanted to try F#. I like its concise syntax and precision in defining the type-driven approach. Two weeks ago, I wrote about testing business logic in Event Sourcing and how my testing library called Ogooreck can help you with that. I thought that this could be a decent chance to try F#. I decided to port my samples and see how Ogooreck’s API goes with it. When I did, I asked the community for feedback, and I got it. Thanks to superb input from the community in my PR learned a lot. I love the vibe in the F# community and the willingness to help such noobs like me. See a summary of what I learned:
Testing is super important; we’re finding more and more ways to do that. It’s becoming more important to not only do unit tests but also enable observability and be able to make them in environment close to production precisely. See intriguing takes on joining observability with tests:
George Kinsman - Improving Test Observability with Fixie+Seq
Martin Thwaites - Monitoring Unit Tests with OpenTelemetry in .NET
See also how the biggest frameworks like Java Spring Boot are dealing with observability:
Being able to see the flow, how messages are handled, and tracing business flows are essential in messaging. Operations like deduplication, publishing and integrating events between services are especially vulnerable to edge cases. See more on how to effectively facilitate the message flow:
Andrzej Ludwikowski - Message delivery and deduplication strategies
Gunnar Morling - Open-source Change Data Capture With Debezium
Don’t also forget to join my workshop with Practical Introduction to Event Sourcing!
Check, also other links!
Cheers
Oskar
p.s. I invite you to join the paid version of Architecture Weekly. It already contains the exclusive Discord channel for subscribers (and my GitHub sponsors), monthly webinars, etc. It is a vibrant space for knowledge sharing. Don’t wait to be a part of it!
p.s.2. Ukraine is still under brutal Russian invasion. A lot of Ukrainian people are hurt, without shelter and need help. You can help in various ways, for instance, directly helping refugees, spreading awareness, and putting pressure on your local government or companies. You can also support Ukraine by donating, e.g. to Red Cross, the Ukraine humanitarian organisation. You may also consider joining Tech for Ukraine initiative.
Architecture
GitLab - What are the benefits of a microservices architecture?
Andrzej Ludwikowski - Message delivery and deduplication strategies
VirtualDDD - Exploring Techniques For Modelling Bounded Context Collaboration
Distributed Systems
DevOps
Databases
Testing
AI
Java
Arch Unit - A Java architecture test library, to specify and assert architecture rules in plain Java
.NET
George Kinsman - Improving Test Observability with Fixie+Seq
Martin Thwaites - Monitoring Unit Tests with OpenTelemetry in .NET