Architecture Weekly #136 - 17th July 2023
Welcome to the new week!
I feel that the DevOps aspect of Event Sourcing tooling is not covered enough. Knowing how to put data in and out for development needs is not enough to know how to run Event Stores on production or even get the best developer experience. Burying that hole will be one of the lite motives of my upcoming works.
In my latest article, I explained setting up a Docker image for the Marten application. Not as complicated as it may seem, the most important is correctly configuring the code generation setup to get the best performance.
Interestingly, we’re still using the Docker image term even though it’s not a Docker image anymore. The image definition and build process are already transferred to Open Container Initiative. We already have popular Open Source tooling like Podman, but if you’re searching for alternatives for macOS, you may have a look at OrbStack:
If we want to tackle scaling, we rarely can just let the operations team or Cloud Auto Scaling deal with that. Of course, it may be possible in some basic scenarios, but typically we need to design a plan and make our application aware of it. The latest episode of .NET Rocks podcast with Derek Comartin is a must-listen. Derek explains the basics of why we need to scale and how to untangle common myths around it:
You can also check my article, where I explain how to scale monolith when you’re in a rush. It may give you some time to define a proper strategy:
And consider if we shouldn’t also be scaling down:
One of the biggest factors blocking us from scaling is coupling. But what does that even mean? That’s easier to say but harder to define. Yet, Vlad Khononov decided to tackle that in his talk:
I like the methodic approach of separating the wheat from the chaff. Nice food for thoughts on why our systems are getting overcomplicated and what we can do about that.
Databases are one of the things that we try to scale, but also those that hide implicit complexity. We need to know how to operate them and what use cases we want to handle. It may appear that our idea won’t be aligned with the database design. We may need to select different types to handle our usage characteristics. Relational databases can take a lot, but we don’t need to live only with them, especially if we want to optimise critical scenarios. Watch a nice video from the Developer Voices channel with Ben Stopford discussing the evolution of databases.
The number of options we need to take into account makes the cognitive load skyrocketing. Some say that “when I was starting you had to be versatile and understand more”. And that’s true to some degree, as our tooling and learning materials were terrible and low-level. Now we got abstractions speeding up our development process, but we also got more tools to orchestrate. In theory, newcomers have it all when they start, but they also need to learn all that. Plus, the global world and related problems of distributed systems. Not only technical but socio-technical. That’s why I agree that the times of 10xdevelopers are behind us.
We should focus on collaboration instead of justifying the weird behaviour of great tech people that cannot work as a team. If you want to go fast, go alone. If you want to go far, go together.
Still, no one said we cannot try to make ourselves as effective as possible, right? I watched Dennis Doomen talk at NDC Oslo, and I can say that’s a great set of tips&tricks that you can apply to your project. It’s a story of Dennis’ open-source work, but the advice is universal:
And hey, do you know that the Thumbs-Up emoji is valid as a contract signature? It is, at least in Canada.
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 the Ukraine humanitarian organisation, Ambulances for Ukraine or Red Cross.
Architecture
DevOps
Database
Frontend
AI
GPT Engineer - Specify what you want it to build, the AI asks for clarification, and then builds it
MIT Technology Review - ChatGPT can turn bad writers into better ones
AWS
AJ Stuyvenberg - Understanding AWS Lambda Proactive Initialization
Yan Cui - A self-healing Lambda function that adapts its throughput based on performance
Java
.NET
Oskar Dudycz - How to create a Docker image for the Marten application
David Fowler - A sample showing how to setup ASP.NET Core Identity API endpoints for authentication
Nobuaki Tanaka - Managed Doom - A Doom port written in C Sharp
Coding Life
Management
Industry
The Verge - Evernote has laid off most of its US staff and will move most operations to Europe
AI News - Databricks acquires LLM pioneer MosaicML for $1.3B
The Washington Post - ChatGPT loses users for first time, shaking faith in AI revolution