The Black Triangle (2004)
rampantgames.com
rampantgames.com
Working on something for weeks before getting it into a testable state is a surefire recipe for an over-designed system with superfluous features and long debugging sessions.
Buildings are constructed foundation first, followed by the scaffold. Trying to construct a building room-by-room would be a disaster.
Developing software incrementally requires diligence in refactoring to keep the code clean, but development goes faster despite the "extra" refactoring time and the end product is better for it.
That said, I wonder if he'd demonstrated a need for a custom TCP replacement before he wrote one. That feels a little excessive, but I was born into high bandwidth network coding so I don't remember the bad ol' days as well.
But before lecturing the rest of us, you might want to consider that not everyone's work works that way. In my own work, it is not at all unusual to go weeks without having anything that could be usefully shown to a customer; and by the same token, the customer's desires are usually simple and unchanging.
Let me give you a concrete example: importing the geometry and topology from a Parasolid XT file. Now, the good news is that the file format is publicly available. The bad news is that it more or less amounts to a direct serialization of their internal data structures, in a format where there is absolutely no room for error: a single misread byte will make the rest of the file unreadable garbage. And of course, every version of Parasolids (there are 75 or so now) used a slightly different format, and a number of crucial details were left vague or thoughtfully undocumented.
As you might suspect from that, it took well over a month to get the basic file parser done. What was I going to show the customers in that? Me: "Well, here's the dump of this file as I parse it now. As you can see, it gets completely screwed up about three-quarters of the way through." Customer: "That's great progress! But we've been talking it over, and we think your debugging dump should be colored chartreuse."
That would be the norm for my work. On shorter things (adding a simple new feature or fixing a simple bug), it usually takes less than a week, and we get as much feedback from the customer as possible. On longer things, usually the customer's only feedback is "We want to read these files" and there is little meaningful I can show them in the middle of the project.
* "this is how I work"
* "fool! You should be doing TDD/AOP/Agile/XP/NIH/WTF/BBQ!"
* "actually, that's not possible for reasons X, Y, Z."
The problem is that the respondent always assumes that the writer of the original post is in the same environment, subject to the same conditions. There's a name for this fallacy, but I don't remember it.
A similar problem is when posters assume that their situation is the typical one: I see this all the time as people post stories like "how to do X", omitting the crucial phrase "... in Ruby", or "in the web development world", or "on Windows". Knocking them down with "I think you'll find telecoms is a little different" seems to be a habit of mine.
My fundamental point was that it both took a long time to develop the parsing stage and there was no opportunity for useful customer feedback to be had during that development. In order to make a marginally usable importer, the code had to be able to parse nearly every type. The customer could not tell me what to skip. There was just no way for them to provide useful feedback at this stage other than "these are the sorts of files we need to be able to read."
As a programmer, I aggressively attempt to not implement features my customers do not need. It is the only plausible way to write this sort of code as a one-man shop. But as feedback, it usually works the other way around -- I implement the minimum needed to make the files they send me work for them. So it's not me saying "Do you need this?", it's them saying, "Hey, we need this."