SlideShare a Scribd company logo
Dennis Doomen | @ddoomen | Aviva Solutions | The Continuous Improver
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Isolation
(can I do this without affecting anything else)
Testability
(is it doing what it is supposed to do)
Diagnosable
(why and when did this happen)
Traceability
(why did we do this)
Readability of code
(what does it try do and how)
Discoverability
(where is this done)
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
"Code that can be changed by any developer
in the team without fear and with
confidence"
"Has a low cognitive load. The energy needed
by your brain to read and comprehend the
code"
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Lessons learned from two decades of professional software development
Dennis Doomen
@ddoomen
Dennis Doomen | @ddoomen | The Continuous Improver

More Related Content

PDF
15 Years of Insights from a TDD Practitioner (NDC Oslo)
PPTX
Using Boundary-Driven Development to beat code complexity
PPTX
Getting a grip on your code dependencies (2023-10)
PPTX
Tools and practices to help you deal with legacy code
PPTX
What you can learn from an open-source project with 250 million downloads
PPTX
Getting a grip on your code dependencies
PPTX
My Laws of Test Driven Development (2023)
PPTX
Design patterns for Event Sourcing in .NET
15 Years of Insights from a TDD Practitioner (NDC Oslo)
Using Boundary-Driven Development to beat code complexity
Getting a grip on your code dependencies (2023-10)
Tools and practices to help you deal with legacy code
What you can learn from an open-source project with 250 million downloads
Getting a grip on your code dependencies
My Laws of Test Driven Development (2023)
Design patterns for Event Sourcing in .NET

More from Dennis Doomen (20)

PPTX
Automate Infrastructure with Pulumi and C#
PPTX
What is the right unit in unit testing (UpdateConf 2022)
PPTX
Slow Event Sourcing (re)projections - Just make them faster!
PPTX
50 things software teams should not do.pptx
PPTX
What is the right "unit" in unit testing and why it is not a class?
PPTX
A lab around the principles and practices for writing maintainable code
PPTX
How to Practice TDD Without Shooting Yourself in the Foot
PPTX
Decomposing the Monolith using modern-day .NET and a touch of microservices
PPTX
Event Sourcing from the Trenches (DDD Europe 2020)
PPTX
Practical introduction to DDD, CQRS and Event Sourcing
PPTX
How to practice TDD without shooting yourself in the foot
PPTX
Decomposing the Monolith (Riga Dev Days 2019)
PPTX
A lab around the principles and practices for writing maintainable code (2019)
PPTX
The Good, The Bad and The Ugly of Event Sourcing
PPTX
Event Sourcing from the Trenches (with examples from .NET)
PPTX
How To Practice TDD Without Shooting Yourself In The Foot
PPTX
Decomposing the monolith into embeddable microservices using OWIN, WebHooks, ...
PPTX
Strengths and weaknesses of dependency injection
PPTX
Build Libraries That People Love To use
PPTX
Decomposing the Monolith using Microservices that don't give you pain
Automate Infrastructure with Pulumi and C#
What is the right unit in unit testing (UpdateConf 2022)
Slow Event Sourcing (re)projections - Just make them faster!
50 things software teams should not do.pptx
What is the right "unit" in unit testing and why it is not a class?
A lab around the principles and practices for writing maintainable code
How to Practice TDD Without Shooting Yourself in the Foot
Decomposing the Monolith using modern-day .NET and a touch of microservices
Event Sourcing from the Trenches (DDD Europe 2020)
Practical introduction to DDD, CQRS and Event Sourcing
How to practice TDD without shooting yourself in the foot
Decomposing the Monolith (Riga Dev Days 2019)
A lab around the principles and practices for writing maintainable code (2019)
The Good, The Bad and The Ugly of Event Sourcing
Event Sourcing from the Trenches (with examples from .NET)
How To Practice TDD Without Shooting Yourself In The Foot
Decomposing the monolith into embeddable microservices using OWIN, WebHooks, ...
Strengths and weaknesses of dependency injection
Build Libraries That People Love To use
Decomposing the Monolith using Microservices that don't give you pain
Ad

Recently uploaded (20)

PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Encapsulation theory and applications.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Spectroscopy.pptx food analysis technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Approach and Philosophy of On baking technology
PPTX
Big Data Technologies - Introduction.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Encapsulation theory and applications.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Understanding_Digital_Forensics_Presentation.pptx
Spectroscopy.pptx food analysis technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Machine learning based COVID-19 study performance prediction
Digital-Transformation-Roadmap-for-Companies.pptx
“AI and Expert System Decision Support & Business Intelligence Systems”
Spectral efficient network and resource selection model in 5G networks
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
NewMind AI Weekly Chronicles - August'25 Week I
Programs and apps: productivity, graphics, security and other tools
Approach and Philosophy of On baking technology
Big Data Technologies - Introduction.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Ad

Lessons learned from two decades of professional software development

  • 1. Dennis Doomen | @ddoomen | Aviva Solutions | The Continuous Improver
  • 8. Isolation (can I do this without affecting anything else) Testability (is it doing what it is supposed to do) Diagnosable (why and when did this happen) Traceability (why did we do this) Readability of code (what does it try do and how) Discoverability (where is this done)
  • 18. "Code that can be changed by any developer in the team without fear and with confidence" "Has a low cognitive load. The energy needed by your brain to read and comprehend the code"
  • 32. Dennis Doomen @ddoomen Dennis Doomen | @ddoomen | The Continuous Improver

Editor's Notes

  • #6: Understand the context of when a tool, practice or principle applies and when not. Don't reject it because of misuse (e.g. IoC, OR/M, DRY, TDD).
  • #7: Design patterns are communication tools, not goals on itself
  • #8: Gut feelings are really Design Heuristics Heuristics are ideas or experiences that give progress, but no guarantee
  • #10: Monolith can't be avoided, unless you overengineer. A long-living monolith is a testament for success.
  • #11: There's too much knowledge hidden in that old code. The new system may never catch up the old one It'll cost too much capacity to maintain old and new Instead, rebuild pieces bit by bit in the same code-base
  • #12: Don't hide the magic Avoid inheritance Control dependencies
  • #13: Explicit ownership of each repository Adopt Github Contribution through pull requests Standardize read-me explaining code of conduct for contributions
  • #14: Captures important decisions and changes What was the problem, what were the options, what was chosen en why and what does it mean for other devs
  • #15: Technology is almost never a solution to a problem (except for OWIN, Git, .NET Core). Unless you rebuild a piece
  • #16: Be consistent within a boundary, don't bother outside (allow different patterns for different solutions) Architectural seams
  • #17: Understand the layers of testing Test the boundary, not the internals Clear cause and effect Show what's important. Hide what's not. Avoid DRY
  • #18: Makes it easier to rebuild pieces Avoids too much coupling Consider DIP No common/foundation/shared stuff Be consistent within a boundary, don't bother outside (allow different patterns for different solutions)
  • #19: Reads like a book Acknowledges the Magic Number of Seven Code explains the what and how.. …so doesn't obscure the algorithms Aligns code with the boundaries
  • #20: Don't use static mutable state May seem convenient, but they hurt you
  • #21: Build local as you build remote Treat your build process as first-class citizens PSake, Cake or Nuke
  • #22: Clear Source Control History Track the why of a changeset/commit, not just the what Separate refactoings from functional changes Don't squash unrelated changes
  • #23: You are not the only audience Logging statements Exceptions Configuration surface
  • #25: You are not the only audience Logging statements Exceptions Configuration surface
  • #26: You are not the only audience Logging statements Exceptions Configuration surface
  • #27: After 1.0, be responsible Choose a release strategy Apply SemVer Avoid breaking changes Document your code
  • #28: Understand the audience and accuracy of your documentation
  • #29: Technical Debt is inevitable. Plan for it. (e.g. 20% per release)
  • #30: Keep refactoring -> code rot => boy scout rule Natural Cause of Refactoring
  • #31: Work with somebody that has radical/out-of-the-box ideas and then find a middle ground
  • #32: Don't take anything at face value (especially speakers at conferences and events)