Hyperbrain Owner's Manual - 3. Keep tasks closed
inter-sections.net
inter-sections.net
Think of it as a kind of extreme-agile approach. Don't plan the whole task ahead of time (well, do plan roughly where you want to go), but before working, do break off a small chunk of the task ahead that you can do in a short time.
I've conducted all sorts of coding tasks in that way, from building new functionality (easy - just make sure you don't break old stuff while building new stuff, until the new stuff is ready and tested, and work in small increments) to major, multi-day refactorings (always do one tiny bit of the refactoring at a time, and commit as soon as it's done).
It doesn't need to be "tested and working" unless it's visible (or non-trivial to hide). If it can be hidden easily and doesn't impact other existing functionality, then it's easy to maintain in a closed state.
With SCM's like Git, you can do that committing into a separate branch so that you even have a "meta" roll-back ability, in case you find out halfway through that actually you were going in the wrong direction.
PS: Also, 15 minutes is just my ideal time length for each sprint. Adjust that for yourself - the key concept is to close tasks regularly, not to worship an egg timer :-)