• This is a topic near and dear to my heart. I've been a professional developer for about 24 years, and before that was a building contractor for 15 years.

    Having built hundreds of homes as well as hundreds of software projects, there is one difference that stands out between the two:

    You can SEE what's being built on a construction project. You can stand on the site and see the carpenters are framing the second floor, that the plumbers and electricians are roughing in the basement and ground floor, etc. You can see whether the lumber package for the roof has arrived or not.

    With software, you have coders sitting in cubes hunched over their computers (or nowadays, they're in some other country). You have NO idea what they're doing. Are they coding? Playing games? It's only during periodic reviews of their submissions or during status meetings that you find out what they've accomplished, and that assumes they're telling your the truth and not blowing smoke up your butt.

    So, while there are many valuable parallels and much to be learned from them, at the end of the day it boils down to the ability to inspect progress that separates the two disciplines.

    One useful thing I took from construction and applied to development, though. A crusty old framing foreman once told me that it doesn't matter how much layout you did during the day, even though it was vital for a successful project. What mattered is that by the end of the day you had SOMETHING "up and showing". He told me to be sure to frame at least one wall before leaving for the day, so that the superintendent could have something to see as he made his rounds. Chalk lines aren't visible from his pickup truck.

    Applied to development, this means that as important as planning is, you also need to show real progress on the project each and every day. Make it easy for the project manager to see that you're contributing to the effort.