Software development is challenging and lot of fun, but there are several factors that interrupt the teams from succeeding in IT projects. These factors are usually not the tools or technologies but it is the people that affect the success of software development projects. Venkat Subramaniam talked about the facts and fallacies of everyday software development. He gave a keynote presentation at the recent CodeMash 2009 conference on what developers and project managers should watch out for to ensure the success of their projects.
Here are some of the fallacies in software development Venkat talked about in the keynote presentation:
More money and time will solve our problems:
Venkat said it's important to have clear "business objective" when working on the projects. He showed the statistics that 64 percent of the features implemented in a project are rarely or never used and the longer the duration of a project, the lower the probability of that project being successful. Software developers need to develop what he called the "capable and relevant software".
It's gotta be good because it is from this large vendor:
He questioned if we really needed EJB which (in some cases) made the development complicated and heavy-weight. The developers are partly to be blamed for this situation (by using the EJB's for pretty much all use cases). One of the reasons for the adoption of EJB was that the competition (not the need) led the way. The need should determine technology, not technology determining the need and it's not a good evolution for standardization to occur before innovation. Frameworks like Rails and Spring have shown us that innovation before standardization does lead to useful and relevant development frameworks driven by the community rather than the vendors.
We're off-shoring because it will save us money:
Venkat talked about the current off-shoring model and if it's really working or not. He compared the model when companies did everything here in US and we still didn't succeed. So he asked, why would you put oceans between designers and programmers and expect different results? Off-shoring model has mainly become a "Fail-for-Less" strategy. He suggested that project managers hire smart skilled developers, those who can learn fast and then give them the sharpest tools, tools with high essence and low ceremony. A small team of highly capable developers is better than large team of below average developers. He asserted that off-shoring is here to stay so we should take the advantage of real talent worldwide.
Dynamic Languages are not safe:
He talked about Java being strongly typed and you can still get ClassCastException if you are not careful when coding in Java, so are Ruby and Groovy languages. Strong tying by itself doesn't improve the code. Compiler is useful, but is often overrated because no compiler can absolutely verify the programmer's intent. He also recommended the developers to take the advantage of new dynamic languages.
Static typing is essential for code clarity:
Venkat said with discipline, the developers can write readable, understandable, and maintainable code in any language. He suggested the following practices to keep the code clean and maintainable.
- Make method/class names descriptive.
- Write short classes/short methods.
- Let the team interact and communicate.
- Write automated unit tests. Unit tests has redundancies of expectation. It forces you to design right.
He also discussed the importance of unit testing in software development life cycle. Unit testing is the software equivalent of exercising and that's even if it's so good, more programmers don't really use it. It helps improve the health of the code and if code is testable, its design is good. Venkat concluded the presentation stressing that it's important to express the "intent" in the software.