I must say, I partially miss those days as a junior programmer, where a build of your system would take 20 minutes on your local machine and you could slack off for a coffee and a cigarette (I used to smoke back then). The professional in me must say though that we have it better these days as server builds and continuous integration make the feedback time on a build so much faster these days. 🙂
I have released a course on Pluralsight called Agile Fundamentals that talks about Agile Software Development in detail.
I was reading a book called ‘Software in 30 Days – How Agile Managers Beat the Odd, Delight Their Customers, and Leave Competitors in the Dust‘ by Ken Schwaber and Jeff Sutherland , and there was a fantastic analogy that summed up technical debt, which I wanted to quote for you here.
In cold climates, when the temperature drops, the pipes in houses often start knocking. Whenever you turn the water on at the tap or use the washer or dishwasher, whenever the heating system starts up, the pipes start banging against one another, against the framing, and against the walls. Sometimes they sound like a jack-hammer, especially when they start knocking in the middle of the night. Knocking pipes are hard to fix. They rattle because they weren’t properly secured. When they become loose and knock, precisely locating them is difficult.
The knocking may be happening at a different place from the insecure pipe. Over time, they become looser. It is difficult to find the exact place where they should have been secured, as the noise may be located a short distance away. Frequently, you have to make a large hole in the wall, remove any insulation, and start looking. Then, with a little luck, you can secure the pipe properly. The cost of securing a pipe correctly when it is installed differs minimally from securing it incorrectly. The cost of securing it once the building already has been constructed is much higher.
There is a powerful lesson here in that you should try to build your software as best as possible from the start. If you start making compromises in the design and testing, then you will create technical debt which you will have to pay back later, but you always end up paying it back with a lot of interest.