Episode notes: https://threedots.tech/episode/ama-1/
Quick takeaways
In this special 10th episode, we answer community questions in our first AMA format before taking a summer break.
We discuss Go’s role in AI development, Clean Architecture implementation, career transitions in tech, and distributed system timeouts.
After the break, we’ll switch to pre-recorded episodes with improved production quality. We still plan running some live episodes like this one, so stay tuned!
Full episode notes: https://threedots.tech/episode/prs-that-get-merged-the-same-day/
Quick takeaways
In this episode, we discuss how to make code reviews fast and effective by keeping pull requests small.
We explore why big PRs are problematic, what causes them, and practical strategies to create PRs that can be merged within a day.
Instead of waiting days for reviews with 200 comments, we focus on techniques that help teams achieve smooth, fast review cycles where work flows quickly from code to production.
Introduction
Full episode notes and transcript: https://threedots.tech/episode/event-driven-architecture/
Quick takeaways
Full episode notes: https://threedots.tech/episode/sync-vs-async/
Quick takeaways
In this episode, we discuss when to choose synchronous versus asynchronous architecture for backend systems.
We talk about the trade-offs between simple, predictable sync communication and the complexity but resilience of async approaches using message queues and event-driven architecture.
Instead of picking one approach over another, we focus on understanding when each makes sense and how to avoid common pitfalls like distributed monoliths and over-engineering.
IntroductionShow Notes
Episode notes: http://threedots.tech/episode/history-of-watermill/
Quick takeaways
In this episode, we share the story of how Watermill, our event-driven library for Go, grew from a side project to a popular open source library with over 8,000 GitHub stars and 100+ contributors.
We discuss the key decisions and strategies that helped make Watermill successful, from focusing on solving real problems to maintaining backward compatibility and building a community around the project.
Full episode notes: https://threedots.tech/episode/unpopular-opinions-about-go/
Quick takeaways
In this episode of No Silver Bullet, we share some of our unpopular takes on the Go programming language. After working with Go for eight years on all kinds of projects, we’ve seen many discussions about what idiomatic Go means. We talk about what worked for us, but we keep in mind that different projects have different needs. We question some common Go beliefs and share tips we’ve picked up along the way.
Links:
In this episode, we discuss how to learn effectively as a software engineer. Why some people seem to learn faster than others? What are some practical ways to speed up your learning? Instead of promising magical shortcuts to becoming a principal engineer in months, we focus on a more balanced approach that helps you build skills by mixing theory with practice.
Quick takeaways
Notes
Full episode notes and transcript: http://threedots.tech/episode/learning-software-skills-fast/
In this episode of the No Silver Bullet podcast, we discuss Clean Architecture and whether it's overengineering or a best practice for organizing code.We talk about why the pattern is often controversial, when it makes sense to use it, and how to implement it effectively.We share our experiences using Clean Architecture across different projects and teams, including the common concerns developers have when first seeing it.
Quick takeaways:
Notes:
Full episode notes: https://threedots.tech/episode/is-clean-architecture-overengineering/
Quick takeaways
Introduction
In this episode of the No Silver Bullet podcast, we discuss frameworks in Go and when they're useful or problematic.We talk about why the Go community generally avoids frameworks compared to other languages, and how small, modular libraries are often preferred in Go development.
We share our experiences with frameworks across different projects, including tradeoffs between productivity and long-term maintenance.
Notes
Quotes
The happy path is easy enough, but the happy path is usually not the hard part of software. We often overvalue how much effort the boilerplate requires. - Miłosz
Framework knowledge tends to become out of date. You can spend days or weeks learning something about a framework, but it can be outdated. And if you switch to another programming language or company, a lot of effort that you spent to learn stuff will be just wasted. - Robert
It's more important to learn even-driven architecture because you learn the theory behind it and how it works in general - it transfers better to whatever you will do later. Focus on timeless skills like how to split modules in your application, how to make it decoupled, how to write business logic so it's easy to read and modify. - Miłosz
The Go language is heavily influenced by Unix philosophy - write programs that do one thing and do it well, write programs that work together. It's visible in Go's standard library. This is why Go promotes building independent components that you can connect together. - Robert
You need to be careful not to go too far with foundations. It's better to start with some modular libraries, have some reasonable setup in place, but don't go too crazy with it. Most of the time you'll need to refactor the project anyway, whatever you do, because it can change drastically. - Miłosz
One big decision at the beginning may cost you six months of work later. Understanding if something is tightly coupled to your application is simple - just think about how easy it would be to remove it. - Robert
Full episode notes: https://threedots.tech/episode/when-you-should-not-use-frameworks/
Quick Takeaways
Introduction
In the first episode of No Silver Bullet live podcast, we talk about the balance between writing high-quality code and taking shortcuts.
Based on nearly 20 years of working together on various projects, we discuss when it makes sense to move fast rather than aim for perfect code, and how to avoid technical debt that can kill your project.
We focus on making mindful engineering decisions instead of blindly following rules like "always do X" or "never do Y".Different situations need different approaches to code quality.
Notes
Quotes
Quality is not about some kind of elegance of code because it's just an artificial thing. It's not really helpful for your team if it's pretty. - Miłosz
Often you have in the code places that you don't touch often or it's not earning a lot of money... Ask what are the places that we're changing the most often? What are the places that are creating most of the value? - Robert
I remember one project when we started applying Domain-Driven Design... Everyone loved it in the team... But what I also remember is that it had no paying users and we had to shut it down. - Miłosz
If you did your dirty POC, don't miss the time when you should clean it up, because it's easy to go into a spot where it's no longer possible to do that. - Robert
After working with [legacy systems] for long enough, you might think, 'I've had enough of this, I won't allow my next project to rot like this one.' It sounds like a good idea, but it can also be a trap. - Miłosz
Sometimes it can be even the opposite. Having everything super consistent can actually be worse than having inconsistent things, because keeping this consistency requires effort... Sometimes it requires you to use an approach that is not optimal just because 'we're doing it consistently.' - Robert
A useful mental model here is to care about the useful product first, not the technical design, which of course is important, but I think it's easy to overvalue it. - Miłosz
Try to find some places where you can do refactoring in one week... Often you don't need to rewrite an entire service. You can just do some refactoring in the code and iterate on that. - Robert
Episode notes and summary: https://threedots.tech/episode/when-to-write-low-quality-code/