I’ve just started to work in a new place, and I see several things they do that I find really terrible, and I want to know if they are indeed so wrong, or I am just too strict. Please let me know if my criticism is in place, and your opinion on which problem is the worst and should be fixed first. The developement is all in Java.
-
Not using svnignore. This means svn stat can’t be used, and developers forget to add files and break the build.
-
Generated files go to same folders as committed files. Can’t use simple maven clean, have to find them one by one. Maven clean doesn’t remove all of them.
-
Not fixing IDE analyze warnings. Analyze code returns about 5,000 warning, of many different kinds.
-
Not following conventions: spring beans names sometimes start with uppercase and sometimes not, ant properties sometimes with underline and sometimes with dots delimiter, etc.
-
Incremental build takes 6 minutes, even when nothing is changed.
-
Developers only use remote debug, and don’t know how to run the Tomcat server internally from the IDE.
-
Developers always restart the server after every compilation, instead of dynamically reloading the class and saving the server’s state. It takes them at least 10 minutes to start checking any change in the code.
-
Developers only compile from command line. When there are compilation errors, they manually open the file and go the the problematic line.
-
A complete mess in project dependencies. Over 200 open sources are depended on, and no one knows what is indeed needed and why. They do know that not all dependencies are necessary.
-
Mixing Maven and Ant in a way that disables the benefits of both. In one case, even dependency checks are not done by Maven.
-
Not using generics properly.
-
Developers don’t use Subversion integration with IDE (Eclipse, Intellij Idea).
What do you think? Where should I start? Is any of the things I mentioned not really a problem?
Answer
I’d look at it like this:
- Anything that affects productivity should be solved first
- Things that affect profitability solved second (most productivity fixes are profitability fixes too)
- Nitpicky stuff last
Therefore, you should have the following (in order of my opinion):
- 7 – Restarting the Server after Compilation
- 5 – Incremental Build Speed
- 6 – Remote Debugging only
- 8 – Compiling from command line
- 12 – Subversion Integration (kind of in the same league as 5. above)
- 2 – Generated Files
- 11 – Not using Generics Correctly
Then
- 1 – svnignore
- 9 – Project Dependencies (this will take a great deal of time i’m sure)
- 10 – Mixing Maven + Ant
- 3 – IDE Warnings
- 4 – Conventions
The reason I have the ordering in this sense is time vs. benefit. If it takes a user 16 minutes to compile and check their code, it’s bloody well insane to be honest. Say a developer compiles 5x per day, we’re taking about 80 minutes, doing nothing.
After that it’s productivity. If you speed up the rate at which your developers can do their work, the turnover of work completed will rise substantially. (Profitability++
)
After this is the “nitpicky” things. I say this not as to infer that they’re not important, but the fact is from the looks of things you have much bigger fish to fry, so get those done first before correcting casing in code.