…on architecture, code design, testability, documentation,
team maturity and process
50(ish) things software teams should not
be doing…
Dennis Doomen
About Me
Hands-on architect in the .NET space with 25 years of experience on
an everlasting quest for knowledge to build the right software the right
way at the right time
Architecture
Treating a
monolith as
something bad
Micro-services as
an escape plan
Rebuild to break
with the past
Misalignment
with (non-)
functional
requirements
Cool technology
Extension points
and the
responsibility
that comes with
it
Misalignment
with team
organization
Tactical vs
strategic
inbalance
Layered
architecture
Code Design
#
Dogmatically
using design
patterns
Adding
complexity to be
future-proof
Organizing code
by technicality
Code structure
misaligned with
architecture
Code optimized
for writing
Obfuscating the
algorithm
Applying DRY
outside
boundaries
Too little or too
much logging
Using YAML for
anything but
simple stuff.
Testability
#
Not practicing
TDD
Insufficient test
coverage
Using code
coverage as a KPI
Using test-per-
class by default
Not
understanding
the internal
boundaries
Using DRY in test
code
Showing what is
not important
Hiding what is
important
Asserting against
production code
Not treating tests
as specifications
Testing more
than condition
per test
Testers doing
structured
testing
Tolerating
flakiness
Unrealistic
performance
tests
Not
understanding
what “concurrent
users” means.
Documentation
Maintaining a
central UML
model
Treating code as
the
documentation
Not
understanding
the audience and
actuality
Not
communicating
about internal
design and
pattern changes
Not capturing the
why, how and
what
Messy source
control history
Team Maturity
#
Use the right tool
for the right job
Ignoring the
phase of a
system
Developers
working in
isolation
Not refactoring
Ignoring
technical debt
Building the right
thing the right
way at the wrong
time
Messy pull
requests
Superficial or
delayed code
reviews
Not learning from
open-source
development.
Process
#
Treating user
stories as
requirements
Doing Scrum to
be agile
Being pedantic
about a stable
team velocity
Trying to assign
business value to
every user story
Artificial sprint
goals
Not burning
down your chart
Loosing sight on
the global
priorities
Long-running
stand-ups
Ignoring the WIP
limits
Not getting
things done-done
Intrusions that
hamper
productivity
Boring
retrospectives
Not using a well-
defined
branching and
merging
strategy.
Q&A

50 things software teams should not do.pptx