Testing frameworks, development processes and operating systems are often very controversial among developers. Some developers hate Windows and only like to work on Linux. Some despise both and only work on Macs. Some hate RSpec and only like Test::Unit, some prefer test/spec. Some prefer HAML, others like RHTML.

Does it matter if you use SCRUM, XP or some other agile development process in the end? If you use RSpec, test/spec, Shoulda or Test::Unit for testing? If you use Windows, Linux or Macs for development in Ruby or Python? The result is important, and the result should be the same in all cases. Don’t force developers to use a technology they hate. They are most productive if they are not forced to use something they don’t like. In the end, working software is all that matters.

The best development processes and testing frameworks are useless if there is no working software in the end. We should not forget that they are only tools to produce running software. Code that works well is better that clean code that doesn’t work, even if it is less beautiful. Often beautiful code helps in producing working software, though, and the next best thing after code that works well is of course to write brief and clean code. The best code is no code at all.

Today I stumbled upon this blog post from Micah Wedemeyer, who puts it like this:

“A program that runs is simply superior to one that does not. Program foo may be better architected, better designed, more scalable, and more extensible, but as long as bar runs and foo does not, then bar is better. In other words: No matter what nasty hacks or deals with the devil you had to make, the fact that you have working software trumps everything else. UML diagrams, n-tiered architectures, and design patterns work well in our minds, but running software is the ultimate goal. So, do your best to get things right, but do whatever it takes to get things running. In the end, working software is all that matters.”