Friday, June 6, 2008

Can You Please Stop Screwing Up?

Is it ok to screw up code? Is it ok to create architecture that is so complex that no one can use it?Is it ok that people do stuff that they know is bad? Is it ok that some people go ahead and do something entirely different from what they agreed on?

When being asked these questions, most developers answer something like "no, it is not ok". But when it happens to us, what do we do? Are we making sure that the person responsible for the screw up get to know about the effect what they have done? Or are we just ignoring it and hoping it will not happen again?


Be rational, be polite, but make sure that your point gets through. Do not confuse telling people about what they have done wrong with punishment. Punishment does not help, enlightenment does.

In professional software development, it is way too expensive to ignore screw up's. And it is even more expensive to accept them over time.

Would a professional football team accept it if their goalkeeper kept letting goals in because he was occupied with something else every time the ball get close?

Would it be ok for a professional race driver to constantly ignore the map reader, making every race a crash?

We are professional developers, act like it.

Are Microsoft Developers Missing Out On Agile?

The last couple of years I've been speaking more and more on multiple platform conferences (like the annual XP-seminars), rather than pure Microsoft conferences. It is getting clear to me that it does not matter if you choose .NET or Java as your development platform, from a technical comparison point of view.

For several years now, MS has caught up on the technical stuff. In my opinion, we (MS developers) have a small advantage over the Java guys. I guess a Java guys will say the opposite. It's all based on where you have your expertise.

One thing that seems strange tough, is that it seems like that Java developers have a more clear view on Agile. The evolution of Agile tools happen in the Java community and after a while, it is being ported to .NET.

Why is this?

My guess is the following: The Java guys are used to invent stuff by them self. They do not have a large company providing them with all they need. That might have lead them to be more innovation. On the other hand, the .NET-developers can always rely on the fact that if something is good, MS will implement it in a couple of years. Just have a look and unit testing and server side build. This might have lead to the MS developers becoming lazy. In most cases, lazy is good for enterprise development. Use stuff that you can buy, rather than build it your self is usually a good idea.

But, when it comes to the values of Agile, it becomes a problem. This week I've been at the Teched Developers USA. I've spent a lot of time discussing with different developers and I am a bit startled over how many say they are doing Agile, when they are really doing smart waterfall with some added tooling. I've noticed the same for quite a while now.

I finally think I know why. Let me try to explain what I mean in an overly simplified way:

Java Developers get the ideas of Agile based on evolving needs in their process and create the tools to support it.

Microsoft developers get a tool from Microsoft (like unit testing) and fit that into their process and try to decipher the reasoning for it afterwards.

The examples are many, like a feature I really enjoy in Visual Studio: The Visual Class Diagram Designer. This is just great as it gives you a really good, live updated, view of your class and you can actually do refactoring from here. In Rosario the support for this will be even better.

But the usage of it comes from Microsoft saying "we have this great tool for you, would you like to use it?" instead of the developers saying "We need a better way to view our classes, who will create a view?"

Does this make sense? Or have I completed my journey to lunacy?

Generally I think that Microsoft tools have a very high quality and I will not be changing platform anytime soon. But I will advice the ones of you that are MS developers to start looking a bit outside of what is given to you. Participate more on general development discussions, rather than technical discussions. I know it has given me a much better insight into building high quality software.

If we as Microsoft Developers are going to be able to compete and even win over the Java Devs, we need to take this serious.

We must be the guys with the best ideas; we must be the driving factor behind professional development. Regardless of technology.

We did it for SOA, now let's do it for Agile :-)