Monday, June 27, 2011

Services, practices and tools that should exist in any software development house / department - Part 3.

Code quality: (Practices and tools): Code quality is very similar to testing. Everyone acknowledges that you should move forward implementing practices  and actions  enforcing quality of the delivered software but then again these actions are usually considered as waste of time, badly planned or non existent at all on any project time plan. On the other side developers either poorly trained or with no realistic time to tackle both the problem of the actual business development + building their solution with less mistakes and using best practices. Luckily enough there are ways to tackle the time and effort problem by using tools during development that can scan your code and provide reports, tips and todo's.  We must point that all these tools  can not - detect issues like a poor architecture or design but can proactively secure you from writing lazy or non efficient/'fast' code. 

The following list is a set of tools that any Java Developer can integrate to it's daily work + IDE. These tools can also be automated by wiring their execution on the life cycle of a continuous integration server which will perform code analysis tasks upon request or on predefined intervals. That way you can remove the extra processing (resource) burden on each developer's machine and assign it to a central machine - sharing all the results and reports to the team or making it available to senior stuff.
  1. FindBugs
  2. PMD
  3. CheckStyle
  4. JDepend
  5. Google CodePro Analytix
  6. Sonar (one stop shop-code quality- platform)
  7. Prevent (commercial)
  8. EclEmma
(feel free to comment on other  -that work either as standalone tools or plugins on your favorite IDE).
All the above tools (or many others added in the comments) provide us a first line of defense from our code development mistakes - but can not be considered as the holly grail of code quality. You still need developers with skills and will to learn and adapt. Enforcing or introducing these tools shall be on a department level - part of the development life-cycle. The more you apply such concepts on a wider level the better chances you have to see the results of this practice on the majority of your software development activity.

Continuous (Practice): The road towards developing quality software solutions is related to tools, practices and people. This last part, the people part is the most important. As we have already said in the previous posts none tool or practice is effective unless the people applying it are eager to participate, have a common sense of what is quality and love their job (that is software development). How can a company or department though help to preserve or even increase the skills of their people? How can we make people more motivated and how we can ensure that our people are capable of implementing and delivering the business promises we've sold to our customers? 

It indeed a big question and may have multiple answers - on this post I would like to raise the importance of training (as a potential answer or activity on the above issues). I will try to list some practical and pragmatic actions.
  • Buy technical books: Every software house or department should have its own mini tech book library. I would recommend, bring something new every month. There are lots of companies that do buy books from amazon or so - but only when they are necessary. If you go one step further with minimum amount of money (come ...just a portion of other bonuses and freebies - in terms of budget the company is willing to pay to its employees. 
  • Send people to training sessions: This practice indeed costs a lot more comparing to buying a few books every month. Good training sessions are considered a good investment and provides a quick and flexible way on acquiring certain skills that can be leveraged through a specific project. Realistically I would propose to  every company to provide some sort of less 'other bonuses' and invest on training of its stuff. In the software /IT business knowledge is power, the more in you invest on knowledge skills the better the investment on the future and on the abilities on delivering to your potential customers.
  • Engage people internally : Organize internal sessions, code reviews between different development teams and encourage people who seem to be more active than others to give talks or workshops. It can be a great way of engaging the developers and raise expectations.


    1. Well Done Paris! I am very glad that we have exactly the same ideas about software development.

      To be honest we have evaluated all tools you describe here and in previous two parts of your posts and we actually using plenty of them.
      I have posted also a blog about my experience regarding Sonar :-)

      Keep up with the great posts.

    2. @Patroklos
      Thank you very much Patrokle. Any comment or addition is much appreciated. So keep posting and spreading the word.