software — and teams. You might know me as creator of Flask or other Open Source projects. • Armin @mitsuhiko Ronacher • mitsuhiko.at • Bluesky: bsky.app/profile/mitsuhiko.at • Twitter: x.com/mitsuhiko • GitHub: github.com/mitsuhiko
and reusable libraries • Build for a long time • Iterate carefully • Backwards compatible • I like building products that make users happy • Iterate fast • Find product market fit
open • Arbitrary Constraints • Made up deadlines • "Must be written in Python" • Business Constraints • Product must be cheap • Must support on-prem deploys
• Good constraints enable opportunities • “State must fit into memory” • Why? Eg: Enables the use of simpler algorithms, wider choice of storage • Bad constraints take things that are needed • “State must remain in-memory” • Why? (There is no good argument in favor) Consequence: cannot serialize, cannot use a remote in-memory database
tendency to over-complicate • Most abstractions are not needed • Only start to abstract once you have an actual need • Refactoring is cheap if you don't have abstractions yet • Functions beat classes for a long, long time • Remember: YAGNI & The Rule of Three
companies do not a lot of cases of re-use • You might however have very common code paths: • getting a database connection / firing a database query • logging a debug message • serializing a API response • triggering a background task
a defined interface • If the interface is unstable, you create churn • Requires lock-step movement between two code bases • Same code base: just an internal isolation, not a library • Start with modularizing your code base
a single repository for as long as you can • Enables lock-step changes across multiple modules and components • Simplifies tooling • Modularize within the repository
the second law of thermodynamics • Entropy increases in a code base over time (tends towards disorder) • It takes extra energy to go back to order • Some increases of entropy are irreversible in practice (external API contracts) • Computers are fast, chaotic systems appear efficient • Humans more or less stay the same, chaos results in worse iteration times
The Impact • How long do my tests take? • How long does a deploy take? • How long do I wait for a PR review? • How long do I spend on common additions?
• Given two options they pick the one that is easier to use • Forcing people to use "the right one" is a losing battle • Make the right path the easy path
my PR review take that long? • Because reviewer don't show up / spend too much time • Because there are too many changes • Because it takes too long to run the PR locally • Because the test coverage does not give enough confidence • Because the changes are too hard to reason about
more complex a system, the harder it is to reason about it • Distributed systems when not herded well, turn into complex organisms • The earlier we lose basic understanding of behavior, the harder it becomes • It becomes critical during incidents