Breaking down tasks

What do you do with large development tasks?

Whatever the size, I try to break down tasks into their smallest parts - into a number of smaller sub-tasks.

This means that, instead of focussing on delivering the feature as a whole, I can focus on delivering the feature incrementally.

This makes it easier to track progress and quicker to deliver changes.

Each sub-task should be releasable, so we know when it is done, and small and frequent releases are less risky than larger infrequent ones.

If needed, features can be hidden with feature toggles if we don't want them to be visible - but they are still committed and deployed, even if they are not released.

Each sub-task should have its own automated tests, but smaller tasks are also easier to test manually.

And, if one sub-task becomes blocked, it may be possible to move onto another and continue to make progress rather than the whole task being blocked.