To anyone who has never been a professional software developer (managers, business analysts, even amateur programmers), there is a whole bunch of stuff that goes into developing real, commercial software that's tough to account for intuitively and leads to wild disconnects between how long someone might think a piece of software will take to build, and how long it actually takes. Heck, even professional developers often struggle with estimation and forget to account for a lot of this stuff.
So I wrote this article (pdf, 13 pages) that walks through the creation of a simple Windows application to add two numbers together. This simple application gives us a lens through which to explore and explain all of that stuff (usability, UI, internationalization, unit testing, accessibility, refactoring, etc) that non-engineers just aren't accustomed to thinking about, or may not even be aware of.
I'm hoping this will be helpful to those who want to understand software engineering, and those who need to make others understand. Feedback welcome.
Why Software Takes a Long Time