Software development is often described as “writing code” which conjures an analogy of authoring a book where you start from page 1 and go through it all in a linear fashion. As anyone who has done software development knows, this is not a good analogy. Much better to think of software development as like ironing a shirt. You work on one section of the garment at a time and each pass of the iron smooths out some wrinkles, but to complete a section or even a part of a section you sort of go back over part of the last stroke. Each stroke slightly overlaps the last stroke, it’s iterative.
So you do a bit of code then go back and tidy up some of the last bit of code, then do a bit more and tidy up some of the bit before and so on until you complete a whole sub-system or class or library or whatever. Also at the end of ironing a shirt you have to revisit some areas that you’d previously ironed because the act of moving the shirt around on the ironing board has created new creases, something like bug fixing, or iteratively adding features to previously built areas of the code.
I think it’s a good analogy, but when I’ve described it to other developers they often look a bit underwhelmed. Maybe their mamma still irons their shirts.