I love how everything has a fancy name now. We've been doing StartInTheMiddle / MinimumViableProduct / Prototyping / GetSomethingOut / StepwiseRefinement for years:
Customer: I must have anything I want from the database without asking you.
Me, 1 hour later: No problem, here's your screen.
Customer: This only does does Customers. I want to pick any table.
Me, 1 hour later: No problem, now you can pick your table.
Customer: This dumps every column. I want to pick my own.
Me, 1 hour later: No problem. Now you can pick your columns.
Customer: This doesn't sort. I want it to sort.
Me, 1 hour later: No problem. Now you can sort.
Customer: But I want multiple sorts, some ascending, some descending.
Me, 1 hour later: No problem. Sort any way you want.
Customer: It dumps the whole table. I want to filter.
Me, 1 hour later: No problem. Now you can filter.
Customer: It only give me local columns. I want columns from other tables, too.
Me, 5 mins later: Give me an example.
Customer: Here. Give me these linked columns and accumulators, too.
Me, 2 days later: OK. I figured out how to give you all this data too.
Customer: OK. This will work. Why didn't you do all this in the first place?
Stepwise Refinement Method: Time to beta: 1 hour. Time to production: 3 days.
Waterfall Method: Time to beta: not applicable. Time to production: who knows?
The problem with the approach you just described is that it's missing analysis. You got a list of features, not use cases. Maybe the customer wanted to solve a particular problem, but the only way they got to elucidate it was in terms of incremental functionality. Better than the wrong thing, but not the way to delight your customer either, I bet.
The problem with the approach you just described is that it's missing analysis.
It's not missing analysis, it's missing the analysis phase.
Instead of working against human nature by tediously building use cases, data flow diagrams, logic flows, process breakdowns, etc., etc., etc. before doing any development, analysis, design, development, testing, and deployment are tightly coupled in many small iterations. That's the whole point.
No, I'm not talking about an analysis phase in a waterfall development. I'm talking about the blindness you can get when you're incrementally developing at the level of features, when you can no longer see the bigger goals.
The key question is "Why" that needs to be asked. A customer may think they want to sort, select, and aggregate the data, but fundamentally "get the data" is very rarely the real reason for doing something.
That data is used to make a decision, and it's important that developers seek to understand exactly what that decision needs. Your users will often walk their way into a bad solution to their real problem because they will use their (incomplete) understanding of what is available.
Indeed. When I ran a small-business software shop, the customers hardly ever were willing to spend enough time explaining what they wanted, because they couldn't imagine anything but what they wanted, and viewed having to specify it as some sort of attempt on our part to get out of doing something. Customers want to give a short summary of what they want, and then be pleasantly surprised by the great customized product they get in return. Once in a while, that even happens.
My hard-drive is littered with projects where I did tackle the cool bits first. It's how I work. Most of them aren't finished though because I lose interest when I hit the boring bits.
The only way I get through boring code it would seem, is by getting paid to slog through it.
This will likely lead to premature aging and an early grave for me...
I started to write this exact comment this morning and then got distracted. Upvote for you.
Luckily, my current side project has someone offering feedback and is interested in turning into a real product. That is the motivation to handle the boring bits.
Same here. I was kind of confused as to why anyone would start a project and think, first, "Well, we need a user registration system."
Of course, I also become bored by these little details. So I wouldn't say it's any better, but it is certainly more fun to work on the interesting bits first.
I do exactly the same thing. So many projects I've finished to 80%, because I got the thing I set out to do achieved. That final 20% is documenting, finishing a UI, etc - and I'm not forcing myself to do (in my mind, the difficulty level) trivial, uninteresting things.
Hell, I probably wouldn't want to do those last things for money, either!
Can't say that I've abandoned that many projects due to distraction of starting from scratch... I just haven't started that many, but I mostly agree with this line of thinking. I think programmers (myself included) tend to get distracted by optimizations and minutia which actually have no bearing on project/product success. That makes the boring, routine part much longer than it needs to be.
This is exactly why I switch hobbies every few months. You spend so much time learning to do the thing before you actually try it. Like kayaking, or rock climbing, then you figure out that once you know what you are doing it just becomes repetitive. I wish there was a to just jump past the learning curve to experience things before you learn how to do them.
I absolutely concur, at least with respect to my own motivations and habits. Every successful project I've built started in the middle; whereas every abandoned project started with grandiose organizational plans.
Customer: I must have anything I want from the database without asking you.
Me, 1 hour later: No problem, here's your screen.
Customer: This only does does Customers. I want to pick any table.
Me, 1 hour later: No problem, now you can pick your table.
Customer: This dumps every column. I want to pick my own.
Me, 1 hour later: No problem. Now you can pick your columns.
Customer: This doesn't sort. I want it to sort.
Me, 1 hour later: No problem. Now you can sort.
Customer: But I want multiple sorts, some ascending, some descending.
Me, 1 hour later: No problem. Sort any way you want.
Customer: It dumps the whole table. I want to filter.
Me, 1 hour later: No problem. Now you can filter.
Customer: It only give me local columns. I want columns from other tables, too.
Me, 5 mins later: Give me an example.
Customer: Here. Give me these linked columns and accumulators, too.
Me, 2 days later: OK. I figured out how to give you all this data too.
Customer: OK. This will work. Why didn't you do all this in the first place?
Stepwise Refinement Method: Time to beta: 1 hour. Time to production: 3 days.
Waterfall Method: Time to beta: not applicable. Time to production: who knows?