How To Solve Big Software Development Problems
This chapter examines how to better solve programming problems. The aim is to get tasks to a level where we can have some functionality accomplished at the end of every day. Then we do not have to be so concerned with the bigger-picture stuff while we solve today's problems.
This chapter, like Chapter 1, is not specific to the .NET Framework. You can use these ideas in other development environments. We will be using the lessons learned from this chapter later on in this book. Be sure that you understand how to break down tasks and make time estimates before you jump ahead.
When mentoring development teams, I often encounter developers who do not (or cannot) break down a task into really small pieces of work that are achievable in a matter of a few hours or minutes. This is a skill that you need to learn. This chapter examines why it is important to have these small tasks, and shows how to break down some complex problems into simple easy-to-solve units of work. This chapter discusses XP practices that help us accomplish this task breakdown.
The Software Development Problem
When developing a piece of software, you are often dealing with many issues at the same time, some of which might detract your focus from the particular problem you are trying to solve. Issues you are dealing with will include the following:
Adhering to the design of the system
Making sure your new code doesn't break any existing functionality
Ensuring you are following the coding conventions
Worrying how this solution will impact future tasks that need to be completed
Wouldn't it be good if you could forget about those other issues? Then you could just code a solution today to the problem you have at hand. Problems are hardly ever so small and focused that you can actually accomplish them today, or even this week.
That is what we are going to attempt to achieve. First, we will explore what makes a good solution. Second, we will work through an exercise that demonstrates how we can carry out focused small tasks that lead us towards the completed solution.