Skills fostering a rethink

Pro

1 April 2005

Imagine for a minute you are putting a new kitchen into your house. You   call a carpenter, and he arrives with the latest power tools, the newest circular saw and the latest in nail-gun technology. But this carpenter, with all his cool, new equipment hasn’t the first clue about how to make joins, measure up for new cabinets, or how to level the countertops. It would not fill you with confidence, and I seriously doubt whether he would get hired again in a hurry.

Yet this is precisely what is going on with software development skills today. We’ve focused almost entirely on teaching people the latest technologies and newest languages; CVs are chock full of Java, XML, EJB, Servlets, J2EE, and the like.

With all this apparent ‘skill’, the software industry is still bound by failure: teams work at breakneck speeds with lots of overtime, they promise the world and deliver very little. What they do deliver is usually late and buggy. And if it does get out on time, it is only after heroic efforts. The statistics measuring this chronic failure are jaw dropping — three-quarters of all software development projects fail — and that is probably a conservative measurement. This repeated failure has huge economic and human costs.

 

advertisement



 

Although there are a multitude of issues at play, one critical issue is that we have forgotten to teach developers the core skills that would give them a true mastery of software development. Bleeding-edge technologies are of little use if you can’t use them properly. By focusing on technology alone, we have created an evident skills gap.

Mind the gap

Universities give students a good grounding in software development theory and commercial training courses keep them abreast of the latest technologies and languages. Developers gather their certifications and then they are expected to become commercial application developers. However, most of these developers are ill equipped for real projects. Any recent graduate working today will tell you that university and lab work is pale preparation for commercial application development. Being a certified Java developer, only tells me you can pass the Java certification exam — it does not tell me anything about how you develop software. What is needed is a deeper understanding of the best, most appropriate practices in software development that ensure you develop really great software.

I’ll give you a basic example. Our company recently went through a round of hiring. We were amazed to find that developers with five years plus of experience lacked good, elemental software development practice such as unit testing or refactoring. Some had a cursory knowledge of design patterns — usually Singleton, and many looked at me quizzically or laughed when I asked: ‘what is the last software development book you have read?’.

So whose job is it to give developers these core development skills — universities, companies, government? Although many of these entities have attempted to help, it is usually left to developers themselves to get the necessary skills. The self-motivated — the ones who read the books, seek out mentors, etc — upskill themselves. A few lucky ones work for a company that values mentoring and so they meet someone who teaches them these approaches. Most, however, never really get the right skills. These are the developers who may look great on paper, have a few years of experience, but are not as effective as they could be — and there are a lot in this group. These developers need to be equipped with the right skills to make them as effective as possible.

You may think, ‘well, big deal’. But this gap in skills between average developers and those with a deep understanding of how to develop good software is costing companies in the long run — remember that high failure rate?

Software craftsmanship

To date, software development has largely been seen as a commodity, resources that can be swapped in and out. But software development is not a commodity — it is a thinking, knowledge-based trade, so we need to start rethinking how we manage these vital skills.

What we need to do is begin to view software development as a craft: part science, part engineering and part art — with people at the centre. Any good developer would agree — you need the technology, the basic skills, but the rest comes down to feel, experience and a deeper understanding of programming skills.

Core skills

The development practices as captured by eXtreme Programming (see illustration: The XP ‘Circle of Life’) are a good reference for understanding the type of skills we are talking about. Although there may be debate about the sufficiency of eXtreme Programming, and degrees of implementation there is universal acceptance that these practices are fundamental to good software development.

In the inner circle we have developer practices, that developers perform every day. Take for example, Test Driven Development (TDD). Nobody argues against the value and necessity of automated unit testing to create robust maintainable software, yet almost nobody does it. Very often it is because developers have never been taught how! TDD teaches developers how to drive their development through tests, this means quality is in-built and code is delivered tested. Importantly, this also acts as an enabler to Refactoring, which ensures that we keep our code as clean as possible and provides valuable design benefits.

In the middle circle we have the team practices. For example, countless studies have shown that a key indicator of project success is the ability to deliver working software early and often. To enable this we need to practice things like Continuous Integration, which involves knowing how to create a development environment that allows us to continuously build our software, integrate it and test it in an automated fashion. Again, these skills simply have not been taught to developers.

Finally, we come to the outer circle and the project management and planning practices. For example, studies have shown that incremental development cycles are better because they produce software that matches customer’s needs (because of feedback), and is more predictable than the traditional waterfall approach. Why then do we persist with waterfall? Probably because we are too busy failing to succeed, but that’s a whole other article.

These are just examples of some of the skills that it takes to become a good rather than adequate software developer, but they are getting lost in the mad rush to get the latest technologies and the newest tools.

Many of the skills in the diagram above concern people and communication issues — fundamentals to software development, that no amount of language training, technologies or certifications will ever address

Positive impact

Upskilling positively impacts the entire industry, from the individual right up to the national level. Software developers thrive on doing good work and being rewarded. We hate failure. We like learning and appreciate investment in our career development. Upskilling as described above means I get skills that will last me a lifetime rather than until the next ‘XML’ technology comes along. It means I am constantly learning and am able to take real pride in my work.

Individual responsibility and pride can very obviously impact the overall team morale. It also encourages cross learning, knowledge sharing and a build-up of tacit knowledge on the team. This shared and tacit knowledge allows the team to be more effective and productive and can positively impact other teams as well.

Team effectiveness in turn is of vital importance to companies these days. We cannot simply ‘throw more bodies at the problem,’ we need to do a lot more with fewer people. Highly skilled developers in any type of process are going to be much more effective. They are more like marathon runners: highly efficient, very effective and with a clear goal. For example, building in quality comes naturally to skilled developers — meaning less bug fixing and easier maintenance in the long run.

Now imagine what this sort of effectiveness, pride and productivity means for Ireland? Ireland is a maturing market, and in a way a victim of our own success. We’ll never be as cost effective as places like India or Eastern Europe now. We need to raise the bar and be competitive in the global market — raise Ireland to the next level. By cultivating top class skills, we not only differentiate ourselves, but move from the rather precarious reliance on the latest transient technology to focusing on people, their development and creating a highly skilled, highly effective software development industry.

The industry is already changing. This is not just my view. Companies all over the world and all over Ireland are realising we need to look at a different type of upskilling. There are many companies taking the first approaches to these skills through agile methodologies like eXtreme programming — and it has been highly effective.

The government is also taking an interest through programs that are looking to fill these skills gaps and encouraging continuous learning through public and private partnerships. These are all encouraging signs and we certainly need more programs and initiatives like these.

Jim Highsmith articulated it best when he said: ‘the best processes in the world will not save a project from failure if the people involved do not have the necessary skills to execute the process. Conversely really good developers can make any process work’.

I challenge Ireland to shape its own future, take up these skills and drive change in the software development industry. We are certainly well positioned and able to do it, but more importantly we cannot afford to ignore these skill issues.

The author is managing director of eXoftware and has 15 years of software development experience. He can be reached at shanly@exoftware.com.

10/10/2003

Read More:


Back to Top ↑

TechCentral.ie