No question about it, as software developers our single most important task is to delive business value for our customers. The software industry is turning their back to the classic waterfall style of development and embracing agile methodologies. Still, teams struggle to deliver functional value at a regulart steady pace. There might be several reasons why this happens. In this post I like to focus on one important factor in the process of software development, the development environment.
A solid investment in a good IDE is usually thought to be a good investment, the hope being that the developers can deliver more business value per time unit. Eclipse (my personal favorite) has certainly made life a whole lot easier with their great plugin architecture. Also, Maven 2 has made it extremely easy to set up projects (either by using the mvn eclipse:eclipse command or by using the M2clipse plugin). Sometimes though, I feel that my IDE actually slows me down. This slowdown seems to increase as the code base and the complexity grows. Wow, big surprise.
But what causes this “IDE slowdown”? My two main suspects are:
- Lack of handling maven dependencies and
- Over-eager usage of Aspects in projects
Lack of handling maven dependencies
Handling dependencies is hard and it can be both tedious and boring. And since Maven 2 has made it so easy to set up the project, it is easy to just create the initial pom and start development. With Maven´s transitive dependency management this can be a dangerous approach since you may end up lots of “unwanted” jar files in your class path. Even worse, some of these may conflict with each other, producing subtle errors hard to track down. The more complex the environment, the greater the chance is for this to happen.
Action: Know and control your maven dependencies
Over-eager usage of Aspects in projects
We use aspects to solve some cross-cutting concerns in our application. However, I feel that sometimes the AspectJ plugin causes me too much pain. If it truly is crosscutting, should it bother me at all when coding business logic? I believe not. When coding I want as few interferences as possible so that I can focus a 100 % on doing TDD in as short cycles as possible. Any unexpected breaks will bring me out of this cycle. Remember: Aspects are supposed life easier, not harder.
Action: Be conservative with the use of Aspects
A good IDE is supposed to make a developer’s life easier. If you find yourself spending too much time setting up and tuning your development environment, it is likely that you have a problem. My advice is to sort them out so you can get back to spending time on what’s truly important: Producing business value for your customer