Once upon a time, a Task was given to a young engineer. The engineer was delighted to start working upon it, since this was his first big task to do within the big system he was working with. “It’s not a funny task”, cautioned the Master Programmer to the young engineer. Nevertheless, the engineer sat down to examine it, for he was very interested in building this great Task with which he was entrusted.
He went to his room, and examined the Task in detail. It was small, and round; and when he held it in his hand, it seemed to be strangely heavy. He placed it carefully on top of his desk, where it rested gently. He turned his attention to the system infrastructure into which this great Task would be incorporated. Many hours passed, indeed, days passed without the young engineer rarely lifting his eyes from the specifications. He went home to sleep, and came back early in the morning and continued where he had broken off.
When he finally lifted his eyes from the papers, he happened to look at the Task. To his surprise, it was no longer a small object, it had grown in size and was now about a foot in diameter; and it seemed much heavier than before. He looked at it in amazement, and wondered how it could grow like this. And he realized with a sigh that it would be more difficult to incorporate it now. The Task would require further study, and further experimentation, to fit into the system.
So he went back to his papers, specifications, and documentation. He pondered and he read, he studied until his eyes were red from tiredness. And at long last, he sat up again, and thought to himself “Now I have the answer! Now I know what to do!”
It was then that he saw that the Task had grown even more! It was no more a foot in diameter, it was now a huge, black sphere, over a yard across! The engineer didn’t know what to do. He said to himself: “My initial estimates must have been grossly wrong! I must study much, much harder”, for he was still determined to solve the problem and incorporate this great Task into the system.
So he went back to his papers, specifications, and documentation. He studied so hard, he worked so much, he tested and implemented and debugged so brilliantly, that after weeks and, indeed, months of hard work he had produced a solution, a great environment, into which the Task could be fit. And then, as he went to fetch the Task, he had the shock of his life! The Task had now grown even more, and was not only a yard across, but it occupied the entire room in which he sat!
Discouraged, and at a loss for any explanation, he went back to the Master Programmer to ask him why the Task kept outgrowing his solution. The Master Programmer looked at him and said:
“The Task grows because it has not yet been fully defined. Every task is first incubated, and then hatched. When it is first hatched, it is very small, and it was in this shape that you received it. As you kept studying and researching, you added definition upon definition to the task, and this caused it to grow bigger. It continues to grow until it has been fully researched. No one knows how big it will be by then; not the engineer, not the architect, and not the project manager. This is a great mystery.”
The young engineer then asked “so what will I do with this Task I have been given?” The Master Programmer replied, “You cannot limit the size of the Task. But if you choose your environment carefully, you can have more fun while researching. This is why you should always code in Delphi.”
And thus the young engineer was enlightened, and walked away.