How much information, in general, would you as experienced programmers need to produce your own working version of an existing program? I figure if you have the data model and the User interface you can pretty much create your own version of a program (in some cases you probably only need the UI).
How about the most important part? A solid understanding of the problem domain. Data model helps. UI stuff helps, but the most important part is not an understanding of how the program does things buy why it does it a certain way.
Many programs have non-trivial algorithms in them. Those you can't duplicate with just data models and UI.
To clarify, the above goes for complex systems. If you tell me to implement an email client that can use the protocol defined in RFC 1939, the RFC is all I need to make that happen.
Point well taken when the point of the program is to execute an original non-trivial algorithm.
I disagree with rexguo. In fact, most applications do NOT have unique or difficult algorithms. The major value is putting together a UI around a data model and business logic that's derived from business knowledge.
Fog Creek Home