Recently there has been a lot of talk around my work place about ease of adoption on a software project... essentially how easy is it for someone who has never looked at the code to go into TFS, download the code and run it and the unit tests. I am a firm believer that I should be able to simply open my source control window, and double click on the solution file. There shouldn’t be any third party items that HAVE to be installed separately, no libraries that need to be referenced out of the GAC, none of that. In my eyes, if I have to do any more than a simple double click and run the project is a giant failure. I mean it, at this point I think it would be appropriate to delete all of your code, and go register yourself back in school because you do not deserve to be developing on an enterprise level.
Now here’s why.
1) Recently I’ve taken on a new project, and it’s taken me two weeks to find all of the third party libraries that I needed, install them, and configure my machine to actually work with this project and the others I have installed. This is caused mostly by versioning issues, when the new project is expecting a different version of a DLL than I currently require for something else, who should win? Well, the second I got it working I pulled everything into a library folder and checked it into our source control. This took me all of about half an hour to accomplish once I got it working, and if I could have saved myself the previous two weeks or non-sense work I would have greatly appreciated it.
2) Talking with the developers on the same project as I had all the issues with, they had the exact same problems as I had, and actually listed it as one of their biggest headaches.
3) The ability to move the code to a build server. For those of you who have never had the luxury of using a build server I strongly suggest that you go out and download one such as TeamCity by Jetbrains. It is one of those things that I’ve just started to use and I could not justify stopping. It makes deployments as easy as copy and paste. Also, when you’re working with other developers who might not be as anal about running unit tests as we are, you can set up the build server to automatically run them every time code is checked in. Guess what that means, no more downloading someone else’ broken code when you get latest!
4) And finally, why not? For the half an hour that it took me to fix it, it probably would have taken 20 minutes to do it right the first time...
The most common excuse that I’ve heard in regards to this from other projects is we don’t have the time to do it right, so we made it work the only way we knew how to. At what point did our profession become more about getting it done, and less about getting it done right? I’m sorry but I don’t know of a single user that would object if I said I was going to spend an extra half an hour on a three month project to make it so that any changes they ever wanted would take half the time to implement... but maybe that’s just me...