
sort of like real then you accept Tec
them to get what you want
quickly and in return you accept the
fact that you have to do more work later
Tec that is also similar to real that in
the sense that it can snowball if you
keep on adding more debt and not paying
it off that is what we’re going to talk
about today I am npj and you are
watching fun fun functions for the ones
of you who have been programming for a
couple of years now
answer me dis when was the first time
you encountered the concept of tech debt
when did you first really become aware
for me it was coming into this code base
that was just horrible to work with
whenever you change something in the
system it felt like you had to do it in
ten different places and there was a ton
of code everywhere that we was not
really sure what he was supposed to
achieve if it’s achieved anything there
were spelling errors in it didn’t have
any tests and there were layers and
layers of abstraction that obfuscated
what was happening and every time we
squash the bug two more bugs flopped up
somewhere else it was nearly impossible
for the team to deliver anything and I
felt horrible and I dreaded going to
work in the morning and that’s the
situation that you end up in if you
don’t manage tech debt so how do you
explain the concept of tech debt to
somebody who has not yet experienced it
themselves I’m going to try something
like that imagine a house and imagine
that the house is about 50 years old
imagine the technical wiring and the
plumbing and imagine that over time
different rooms have been used for
different purposes the room was at one
point it was a spare room and then it
turned into nursery and now the current
owners have turned it into an office so
the room doesn’t have any proper
telephone jack doesn’t have enough
electrical plugs it doesn’t have any
network port so we have fixed that by
dragging some extension cables from
another room
we have hammered them under the skirting
boards so that you can’t see them
however we just intend to do this as a
temporary solution because when we start
plugging like the third extension cable
into the first extension cable then
things are going to start to be a little
bit messy
the analogy falls apart a little bit
here because whether house it doesn’t
change all that much you can probably
get away with doing this for a pretty
long time maybe you move from the house
without ever having to do it properly
like you know running a dark getting the
cables into the walls and putting
ethernet and telephone jacks and I love
enough electrical outlets in the walls
you might get away with that but
absolute project while it is sort of
like a building and it has one key
important difference and that is that it
changes a lot more there’s a lot more
work going on over time in software you
start with you know a few rules and an
extension cable ah
but as time grows on like not a lot of
time perhaps even just a year then you
have over a hundred rooms and like six
interconnected extension cables that
have been duct-taped under these stairs
in analogies are hard do you know a
better one so anyway when a system has a
lot of tech that you take a kind of
interest on it because it’s now slower
and riskier to work in the system if the
system is neatly and correctly organized
just plugging a new peripheral in if
your stroke but if there’s a lot of
proverbial extension cables all over the
place then you have to constantly go
check where they go first in order
because last time you didn’t do that you
blew a fuse and everybody had to stop
working it’s not uncommon that it gets
so bad that it’s just not worth the risk
at all to plug in that new peripheral
and this is why it’s absolutely critical
that you manage TechNet I am
intentionally using the word managed
here and not eliminate because some
tech debt is actually healthy for your
project just like in real life having
some debt is sensible
you can’t hypothetically live your
entire life using just cash but it’s not
insensible to accept some degree of
death you you might allow a friend to
front you when you in front your lunch
when you have forgotten your wallet
taken out a reasonably priced mortgage
or loan that’s also sensible or if
you’re running a business it’s a very
good idea to have a flexible credit with
decent interest rates that allows you to
manage your cash flow of it in software
it’s often not obvious in what direction
to take the system upfront so it might
be a good idea to let tech step
accumulate a bit let a little bit of
duplication grow in order to give you an
idea of what direction you should take
the system so having some tech tests
that’s fine if you can even call it
fancy a side note that makes me slightly
bias is that I assign the papers to
purchase an apartment what is the
situation of death in your country
because in Sweden the rental market is
kind of it kind of messed up so buying
an apartment is it’s very common it’s
kind of funky because Swedes don’t buy
much on credit at all except for homes
and there were your scope bananas
Sweden actually has a negative reference
interest right now it’s not healthy
I don’t think anyone can tell because it
never happened before in history but
that’s a side note ah analogies are
distracting the point is that while some
debt is is fine and healthy it’s
extremely important to be very careful
when taking on more debt because that
generates more debt because you pay
interest on that and if you accumulate
more debt while not paying off the old
debt you will eventually end
up in a situation where you have to take
on new debt in order to pay the interest
on the old debt and this creates this
snowball effect that will you spiral out
of control and yet destroy you a good
software team knows that they are
responsible for shipping things for
getting things out the door but a great
software team is also well aware that
they will have that same responsibility
next month and next quarter and next
year too and take that into account in a
great software team the Monday meeting
can go a little bit like oh hey we
shipped the waffle feature last week
congratulations as you know we did some
dirty workarounds in the payment system
in order to get it out the door
and I would like to take this week to
clean that up I would also like to take
this week after that to clean up and
simplify the authentication system and I
think that is worth it because while
developing the waffle feature we almost
didn’t make the deadline because we
found that there were so many risks and
problems with working in the
authentication system if we spend some
time cleaning it up now it would save us
a lot of trouble in the future and in
order for a discussion like this to even
happen in a software team it’s very
important that leadership in the project
is aware of the concept of technical
debt if you as a leader is not aware
that tech debt is being constantly
generated you will focus on rewarding
shipping there’s nothing wrong with that
but you will believe that the team is
now after shipping ready to ship again
so if you as a leader start tacking on
new development right after shipping
your leadership is incentivizing the
developers in your team to become duct
tape programmers and what I mean by that
is developers that are very good at
shipping in the short term but behind
this
since they are actually taking out these
high interest loans on behalf of the
team in order to make the deadline a lot
SEC that works kind of like that in real
life you get what you want quickly but
in return you have to do more work later
and your tech that will snowball if you
keep on adding more and not paying it
off you have just watched an episode of
fun fun function I release these every
Monday morning Oh 800 GMT ah if you do
not want to wait until Monday you can
check out this episode that the YouTube
machine brain has determined is optimal
for you I am npj until next Monday morning stay curious