Neal Ford is Software Architect at ThoughtWorks. He is the designer and developer of
applications, instructional materials, magazine articles, video
presentations, and author of 6 books, including the most recent The Productive Programmer.
consulting focus is the design and construction of large-scale
enterprise applications. He is an internationally acclaimed speaker, having
spoken at over 100 developer conferences worldwide. Visit
his web site at http://www.nealford.com.
These are the six questions I asked Neal, and the answers that he gave me…
1. What has been the most effective motivator for you to do your best work ever?
I would have to say it's working with smart, impassioned people. One of the things that I really love is pair programming. While this is a pretty controversial topic out in the world, there is no question in my mind that it produces much higher quality code. This is one of the reasons that I work for a consulting company like ThoughtWorks — it is very difficult as an independent consultant to convince someone to pay you to pair program because perception is that you're being less productive if you are pairing. Those who have done it for real realize that you are actually more productive when you're pairing than when you're an individual. You write just as much code, but the quality of the code is significantly higher.
Software is much more about people than technology. Working with the best people motivate you to do the best work. If you don't go to work every morning thinking about what kind of cool thing is going to happen today, you should probably find another employer.
2. What work has been the most difficult for you to delegate to others?
Because I've been a technical lead on projects for so long, I have very little problem delegating tasks to people that I trust. If I had to choose something, it would probably be something that I think that I do really well (whether that's true or not), simply because I think I could get it done more quickly and efficiently than delegating it to someone else. Of course, this is a slippery slope: even if I can do something more quickly than someone else, there are probably more things that I should be doing that I cannot delegate.
3. How would you define the purpose or goal of your work?
This question is easy! I had to make this decision about five years ago when I decided to leave my position as CTO of The DSW Group. I wanted to go to work for a company that was investigating the possibilities of agile on an enterprise scale, and I certainly found that in ThoughtWorks. However, I also wanted to be involved in a company that had the potential to truly revolutionized the IT industry. ThoughtWorks allows me to do both of those things. I could actually make significantly more money as an independent consultant but it is much harder for an individual to make an impact on the overall IT landscape. Working for a company like ThoughtWorks allows me to work on interesting, large scale agile projects and also push the envelope on what the true potential of software really is. I fundamentally believe that software is going to have as much or more impact on civilization as Gutenberg's printing press. Thus, it is important for people to make sure that software isn't co-opted by people who view it only as a way to make money. Can you imagine what would've happened to Gutenberg if a catalog merchant had gotten to him before he started printing Bibles.
The other really important aspect of my employer is its social conscience. ThoughtWorks as a company is very committed to try to make the world a better place using software as the lever. Not only do we contribute lots of projects to the open source world, we do charity and pro bono work for people we believe are making a difference. There are a lot of things both within the IT industry (like the general dearth of female software developers working professionally) and in the real world that represent solvable problems. Attacking and diminishing solvable problems is one of my goals.
4. How have you tried to achieve excellence in the work you do?
Reflection is key. I try to look at all the artifacts I create in the most objective light possible (which is sometimes very difficult). I actually like negative criticism because generally people who are in negatively criticizing you are telling you the truth. In fact, based on comments from an attendee at one of my conference presentations, I ended up changing my entire presentation style. And that led to what I'm working on right now, which is a book about presentation patterns and anti-patterns.
I try to accept criticism as gracefully as I can, even if initially it seems unjustified. Even the harshest criticism has at least a kernel of truth in it, and paying attention to that can allow you to find things that you think you did well but have room for improvement. One of the nice things about ThoughtWorks is the almost nonexistent hierarchical structure within the technical community. Any person on any team can point out deficiencies in architecture or design, which will hopefully lead to making it better. Needless bureaucracy and formality is poison to software projects! You need active, engaged people who will speak their mind at any point in time if you hope to achieve the full potential of the development team.
5. Of which one of your failures are you most proud?
I would have to say that my most noble failure was a project I worked on at ThoughtWorks back in 2005. It was a difficult client, and a difficult problem domain coupled with very difficult technical challenges. We finally delivered some software, but it was not the quality that I would like for it to have been. The part of this project about which I'm most proud is where we managed to invent some interesting mechanisms to improve communication between developers in the US and the distributed developers in Bangalore. I have since used a lot of these techniques on other projects, and even wrote about a few of them in my book The Productive Programmer.
6. And which of your successes was completely undeserved?
That would be just about all of them! I work for a company that embraces collaborative work. Even if I was ostensibly the main person who benefited from the success of the project, it is always a group effort. I probably wouldn't characterize it as completely undeserved, but I fundamentally believe that collaborative work always yields better results than singular work, especially when you're building something as complex as software.
Well, these are the answers given by Neal Ford. I hope you liked them.