I am pleased to have undertaken a three month engagement, formally as a software engineering consultant, in fact acting as a change agent for empowerment. By the end of the engagement, as a leadership team we had certainly seen a marked improvement in performance and engagement. Most of the positive feedback I received was themed around mentoring, experience and knowledge.
The explicit services expected of my role were to deliver software process improvements, to identify the gaps between current and best practice, define team structure, roles, KPIs for the engineering team and individual team members, responsibilities and accountabilities. In reality, the team needed to lift their spirits and confidence, to acquire the necessary skills and knowledge (or at least start on that path), and to be empowered to do their jobs effectively.
Effective KPIs are extraordinarily difficult to construct for software teams and even more so for individual developers. There are very useful project metrics to track, for example, the total number of issues, the number of new and resolved issues. For individual developers, KPIs should not be used as a stick; rather as a tool to identify training and development opportunities.
Part of the role was to help with current projects so I acted as software team leader, demonstrating by my own actions and words the behaviours and outcomes expected of a professional software engineering team. We introduced effective tools and lightweight processes for requirements and test management, issue-tracking and task management. However, daily stand-up meetings immediately led to improved visibility of the status of work-in-progress and greater engagement by the team members.
It is relevant to acknowledge the importance of bringing the team up-to-speed on contemporary patterns and practices, technology and professional conduct. The 'bookends' of requirements and testing envelope the regular, daily work of software engineers who undertake coding and unit testing.
Introducing modern C++ and C# practice included training and coaching in STL containers and iterators, Boost smart pointers, const-correctness, C++ idiom, unit testing frameworks, and so on. The relevance of design patterns, architectural layering and interface contracts also needed to be introduced as practical tools in the professional toolkit.
Of overriding importance over all of these facets of any engagement is that the role of the consultant is to empower both staff and management. Some consultants have a tendency to behave as if they are management themselves instead of coaching the existing managers, thus empowering them to manage effectively and to lead by their own example.
Competency 2020 - complete version!
15 years ago