I think most developers are familiar with getting in the “zone”. The place you get when you are totally in focus and in the flow of development. The code comes quickly, the ideas are together and everything just seems to work. It is the sweet spot of productivity. I have found the best way for me to get into the zone is to put on my headphones, arrange some uninterrupted time and just start going.
There is another zone, however, that I think is just as important. This is getting into the zone with the customer. At the beginning of a project, or even just joining a new company, you have to get to know your customer. It involves a lot of learning the business rules, processes, and just plain communication style. In these early stages, there is a bound to be some misunderstandings. This is where the iterative development process really shines. With each feedback cycle, you get closer and closer to thinking and understanding what the customer and the business wants and needs. As your project development you can start be in such harmony that you can consistently develop what they need on the first try and even anticipate areas of improvement that will delight the business user. To me, to get into the development zone and the customer zone at the same time is the really sweet spot.
What happens if you are just in you development zone and not in the customer zone? Well, cranking out beautiful code that the doesn’t serve the business needs is not beneficial. Your code can be the most beautiful and elegant ever produced, but if it doesn’t do it’s job, what use is it? What happens if you in the customer zone and have achieved a mind meld with your user and have internalized exactly what they need, but you get never get into your development groove. Let’s say for the sake of argument, you are constantly being interrupted and pulled into pointless meetings, so you can never concentrate long enough to get into the groove? The code doesn’t write itself. It remains unrealized and of course that business never realizes the value either.
So, I think, really you need to get in two zone simultaneously to be the most productive developer that you can be. Luckily, following an agile development process will get you there.