Efficiency: Improvement of Software Engineering Teams

Date:   Thursday , January 08, 2009

Every organization is now facing the challenge of gearing up itself for the upheavals of economic slowdown and needs to act swiftly to prepare for it. Swiftness will decide whether an organization can survive and maintain competitiveness or not.

For software engineering managers or program managers, this may require a mindset change since most of them have grown up in the industry from the grassroots level (software engineer level) to their current position, and generally have seen times when companies were ready to go to any extent to attract and retain talent, and hence the expectation that they need to optimize the cost or improve efficiency may seem foreign to them. Inertia and the time taken for this change may prove disastrous for the corporations. They are not expected to just optimize and reduce the cost but also need to look at improving efficiency of their teams.

Improving the efficiency of the teams may turn out to be a complex affair from the very first step, since a software engineering team’s efficiency improvement is not a well understood term. How do we define it and measure the level of success is a complex issue.

Do we take efficiency improvement as a simple productivity improvement? If yes, how do we measure it – measure hour wise, day wise, or by any other unit. Measuring it will have a significant impact on the methods or strategies chosen to improve it. Efficiency may also be a function of quality of deliverables. If we improve productivity, but at the same time allow quality to go down, can it be considered efficiency improvement? For some, efficiency may be how quickly the engineering team can respond to the customer requirements or needs.

The first step in improving efficiency could be to understand this aspect and define clearly what improvement we are looking for. That done, we need to look at the aspects that may impact the efficiency. This also may not be so simple. The engineering team’s efficiency, as we have understood, may be a function of the following – process, tools, techniques or methods, competency of people, and ability of the management. We need to look at each of the aspects and check what in each category impacts efficiency, and what could be done to improve each aspect of efficiency as defined earlier. A well-chosen and focused strategy here may give the desired results. May be, all four aspects of process, tools, techniques, and the competency of people and ability of management need to be considered in detail.

The efficiency improvement model chosen by us considers these four aspects and adopts a focused strategy based on an analysis of business situation, customer feedback, internal competency assessment, project release results, and root cause analysis. To respond to the markets and customers quickly, in process, we have to focus primarily on the agile development model. To improve efficiency and to enhance quality, the automated analysis of code and test automation has to be our focus in tools, techniques, and methods. For enhancing management ability, we have to focus primarily on the capability of the new and middle managers that directly supervise software development. For people competency, based on root cause analysis, we have to mainly focus on enhancing code competency.

Defining strategy and execution may be two different aspects. There may be a considerable gap between the two due to distinct situations of the software engineering teams. Software teams, in general, have to fulfill the continuously increasing expectations from their clients, thus leading to overtime or overwork, which is a very common phenomenon across the industry.

This may impact the execution of strategies since the teams may always be busy with their day-to-day project execution and business tasks. In time management parlance, being always busy with urgent tasks and not able to take out time or focus on executing efficiency improvement strategies mostly fall under the ‘not urgent but important’ category. It may be equally important to focus on the execution part and make sure that strategies are executed well and corrective and preventive actions are taken in a timely manner to fine tune them. It may also be important to periodically review the impact of strategies and their results and then reconsider them.

Overall, our experience has proven that all these three steps are important in improving the software engineering teams’ efficiency:

1 Defining the strategic target for efficiency (What do we mean by efficiency, what we are looking for, what we want to achieve),

2 Deciding the strategic choices for each of the influencing factors (process, methods, tools, techniques, competency of people, and ability of management), and

3 Execution of the strategy

We face major issues in strategy execution, where due to business pressures and short-term focus of managers, efficiency improvement becomes secondary. The leader’s vision and determination, along with team support, is crucial to overcome the difficulties and barriers in execution.

The author is VP and Head of Central R&D-Huawei Technologies India.