Go Hard Early
icelab.com.au
icelab.com.au
On the other hand you have projects with incredibly detailed architectures all mapped out, way too much time discussing / planning / envisioning what to build, when to build it and how best to go about it. Not a single one I can think of actually followed the plan (you will always get kinks in the road), and as such these things are always over due and over budget.
I guess it's more about finding a balance with what works - perhaps keep an end goal in sight; with a simplistic high level overview of the project/feature, thus giving you the freedom to move around any problems that may arise, but also not tying you down to a detailed plan / architecture that almost certainly will need changing. Iterate fast, stay flexible(?)
But one thing I definitely agree with - and that's to get started immediately; whether that's to plan or to code - just start. It will always take longer than you think, and that last 10% is equivalent to first 90%, if not more.
I'm actually thinking about Fabrice Bellard, who was featured in a article that was met with success here two months ago[1].
> Bellard made it seem natural to pull together his mathematical insight, broad experience at instruction-level coding, and careful engineering to advance the field this way
When you look at his achievements[2], I have trouble finding one that would have succeeded with OP's "advice". Between an app for coffee-lovers and QEMU, I think the careful thinking and engineering crushes the hype of "let's do it". Sure it sounds good, but that is not the way you will achieve something meaningful.
I may sound like an ass while it is not my goal, but
- I'm kind of surprised to see the success of this article (50 votes for 2 hours) given the low level and amount of content it offers
- I distrust analogies, and this gamma-correction one is definitely unsound (not to say dumb)
I think both you and the parent got the wrong impression.
The article is not saying "just start coding -- and skip planning and engineering".
He says "just start working hard on the problem from day one, INCLUDING the planning and engineering parts -- instead of leaving it for later, or doing only low hanging fruits in the beginning".
"Start working hard early on != just start with coding immediately".
>- I distrust analogies, and this gamma-correction one is definitely unsound (not to say dumb)
Nothing unsound or dumb about it. It's just that he could reduce it to the curve shown --taken to mean project completion--, without mentioning gamma at all.
The curve is the important part of the analogy, not gamma.
It's not "get stuck in and don't think about it", it's actually: "think about what needs to be done, then start with the hardest".
It's actually something I learned during a group project during university. The process is something like:
* Group all your main features
* Plot them on a graph of importance (y-axis) vs difficulty (x-axis)
* The features in the top-right (high importance/high difficulty) are the first things you do
* The features in the bottom-right (low importance/high difficulty) are the last things you do
This is something you have to keep evaluating over time, using a process/method of your preference (that works, of course).
The reason you do the hard/important things first is because it lets you know whether the project can go ahead for the minimal cost.
To take the group project I did as an example: we had to do a mapping application on a mobile device. Most groups went and wrote some code in Java, and wrote a routing algorithm. A few of us realised that getting something running on a device was the "hard" part, so set about getting that working. Afterwards, we went and drew some graphics, and handled some simple I/O with pre-programmed behaviour. When it came to writing the routing, we again tried everything against the device ASAP, so we knew what its real-world performance was.
Those who started writing Java without the device realised they had to convert it to J2ME before they could make it run, wasting a bunch of time. A good percentage had nearly nothing running by the end of the year demo because of this.
You have a nice big project you’re about to get started on. Delivery is in a few months, so you have time to plan, sketch out some initial ideas, to let it germinate in your head.
Right?
No. Start now.
He is saying that you don't plan. You don't have time to let it "germinate in your head". Don't look for the hard parts of the problem and tackle them first because, if the problem is nontrivial, you probably don't know what the hard parts are, anyway. The hard parts are the ones you don't expect from the start.
The author's thesis is that you should start early so that you can encounter the hard parts as soon as possible. It is about the fact that you will encounter unexpected challenges that will force you to reassess your strategy. I'm not taking a stand one way or another. I think your strategy has its place (and in fact, is closer to the way I tend to do things) as well as the author's.
I don't think he's completely wrong in his assertion. My feeling is that he is aiming that sentence at developers who have a tendency to over-think. I've seen developers (including myself) sit and think and research and think and research and not really do anything.
In those situations, just putting your fingers on the keyboard and writing anything will be an improvement.
I'm a graduate student who still leaves homework for the last moment sometimes. This mantra of going hard early can also be applied to a few of my assignments and academic projects.
Properly designed academia would probably remove procrastination from K to PhD.
The deadline is just so the setter has a schedule to assess it, and the next one will be coming at some point in the future.
With work it's usually all coming now. If you're not doing task a, you could be doing task b, c, d or e instead. Of course good planning and management will mean time is organised between all the tasks to get them done one at a time (or as close to) and it's not a daunting pressure, but I find there's always a sense that there's lots to do.
In the cases I've had where there doesn't seem like a lot to do, that's when I tend to procrastinate with what I'm meant to be doing, looking at this and that other interesting thing we could be doing.
[Edit] Also, money always helps ;)
I always fall for the trap of expecting the last 20% to take 20% of the time. Not sure why I don't learn my lesson.
Be honest, ask to sacrifice a couple of hours to throw at a proof-of-concept, and then you should have a better idea of how long the full feature will take to implement.
This creates a sort of an impedance mismatch if you do your work in sprints - it's good to do the initial chunk in one sprint and the actual body of work in the next one. Unfortunately this means that features' implementation latency goes up.
Heh, I think it depends on the feature ;)
Past the first few projects, you should have a pretty good feel for how long standard CRUD, user auth, email fun and other such things should take.
Basically, the more experience you have, the fewer times you should need to sacrifice time for proof-of-concepts - but there'll always be a need for them :)
1) "exponential" - which gets everybody happy at the beginning and then crushing them with hard reality after things start getting more and more complex. There are a lot of real life examples of doing this and I can rarely find the one which has brought the value at the end. In software development experience I have found this very wrong.
2) "logarithmic" - when you do a lot of investments into solving the hard structural/strategic problems at beginning and then riding much more far on the benefits they provide. This approach works pretty good in real life as well like investment into fundamental understanding, saving early so accumulated benefits get higher.
...
Early discovery to outline a draft strategy in small committee (one person is sometimes enough) helps the team with reaching velocity quickly once it gets started. The hard part is sustaining it until delivery of whatever it is you've set up as the target.
That's why sprints can be handy, reducing the amount that needs to be delivered so that the team doesn't get slowed down on a big block of work.
Such a common teenage response we all know it - yet it makes part of out formative years and so as professionals we need to unlearn our teenage years
Check in with mission control (customers / clients) regularly to make sure you're on the right path.
As they say - fail to prepare, prepare to fail.
Work expands so as to fill the time available for its completion.
[1] http://en.wikipedia.org/wiki/Parkinsons_lawBut as the author suggests, just getting into it and working hard from the beginning won't make a difference. That will just ensure a project-long crunch which will be highly detrimental to team performance.
No method guarantees project success, as can be seen from plenty of failed high-profile projects. But basic project management and estimation methods applied not only at project start, will definitely get you out of the very basic problem of "90% complete, forever".
There is no "past performance" for most projects, because they are different enough to prohibit extrapolations.
The above holds for large IT projects and software construction of course.
For a small shop making indie games or for a web shop churning websites what you say is perfectly possible.
As a project gets underway, you get the best possible indicator, namely past performance for the specific project. If you do regular re-estimation, progress monitoring and risk management (and you should, if you are a professional PM), you might not know if you are 52 or 53% done, but you will definitely know if you are ~80% done or ~50% done.
If you want sources, read McConnell's "Software estimation" and references, or if you are in a hurry, take the bite-sized blog post about "Yesterdays weather" from Fowler: http://martinfowler.com/bliki/YesterdaysWeather.html which is based on the same experience and literature.
As for projects going over initial budgets, that's a different problem from progress monitoring, though they often go hand in hand.
It's a balance.