good Monday morning check that it looks 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 [Music]