Building Qualified Software Engineering Teams in Our Tertiary Institutions
The role of software in technological development is very key and has led to an increase in the demand for Software Engineers. In some ways, the most stiff competition between tech companies is not solely based on market share, but also the urgent need to hire highly skilled software engineers.
In 2013, a non-profit organization, Code.org, was launched campaigning to get more students in computer science courses. Bill Gates, Mark Zuckerberg, Jack Dorsey and other famous tech leaders featured in their campaign video encouraging students to get into programming.
To put the demand of engineers in a better perspective, Mark Zuckerberg had this to say: “Our policy at Facebook is literally to hire as many talented engineers as we can find. There just aren’t enough people who are trained and have these skills today.”
It is no surprise that in June 2016, the Chan Zuckerberg Initiative invested $24 million in Andela, a startup company in Lagos on a mission to bridge the gap between skilled software developers and companies that need them.
In the last few years, I have had the opportunity to interact with a number of tertiary institutions & discuss their goal to build an in-house team that will manage and develop their software requirements. While some progress is recorded, the paucity of high-skilled and trained engineers is affecting the process.
Drawing from my experience, these are the key factors that our institutions should consider in building a qualified and sustainable development team:
Investing in Software Engineers
This is the first and most important factor that I think only a handful of schools pay attention to. Due to the high demand of software engineers, the cost of attracting and retaining experienced developers is expensive. Most of our tertiary institutions depend on in-house staff to build their development team. There is little investment to bring in experienced developers to lead the team and therefore the team members are limited to the experience of the best developer amongst them.
To really attract skilled-engineers, the traditional public service recruitment and remunerations will not work. A different recruitment process and welfare standards must be applied to get and retain good engineers.
Providing sufficient and continuous training to the team is also very crucial. Creating an opportunity for them to network with other experienced engineers through conferences and similar events would expose them and facilitate capacity development for the team.
Without the awareness and support of the management to invest in such a process, this goal will be difficult to achieve.
Adopting Software Engineering Best Practices
Software Engineering standards ensure that a level of quality is delivered in software applications in the most effective way. Often, these standards can only be implemented with experience and not by trial and error. The following best practices and culture should be adopted in most of the development teams:
- Defined Methodology
Most of the time, application development are done haphazardly without a well defined methodology. It is important to acquire experience in a certain methodology that best suits the team and employ it in all their development activities. Agile methodology is recommended but most people implement it wrongly.
- Source Code Management
It is still common to find many development teams sharing code through flash disks. It is quite interesting to imagine how pieces of code are integrated using this approach. Adopting source code management tools such as Git and Mercurial is very necessary to ensure code quality, version control and speed up development among team members.
- Testing and Quality Assurance (QA)
The concepts of Unit Test, Integration Test and System Test are still alien to many development teams. Most teams are yet to understand or value the need of automated tests making it difficult to achieve the acceptable level of quality in our applications.
- Code Reviews
This is also part of Quality Assurance. It is a process that ensures that every piece of code written by any of the developers is reviewed by the team members. Until such code is reviewed and unanimously approved by the team, only then can it be integrated with the main branch of the code repository.
Empowering All Team Members
The structure in most of the development teams in our institutions is usually dependent on one “champion”. The other team members can barely contribute significantly in the absence of the champion. Empowering all team members to be able to take part in very important development tasks is very necessary
Valuing User Interface/User Experience (UI/UX) Designers
A common mistake in software development in our institutions (and many organizations as well) is neglecting the need of experienced UI/UX designers. Most often, only hard core programmers are employed as part of the team. Unfortunately, this greatly affects the final presentation and usability of the applications. UI/UX designers are very key in the overall success of software projects and staff with such specific roles are required.
In a situation where the institution has a capable team but lack experience in some key software engineering standards, engaging consultants to train and guide the team members will help in bridging the gap.
Outsourcing is a major trend in business in which organisations contract out some of their job functions to outside companies in order to reduce costs as well as get the job delivered on time and efficiently. As earlier established, to attract and retain experienced developers is quite expensive and not trivial to achieve by most of the schools. Outsourcing certain jobs would be the preferred option in order to ensure high quality service delivery.