In my previous blog, I outlined the Code to Customer (C2C) philosophy. In this blog, I will outline a business scenario I encountered in a forum and how the C2C can be applied to reach a solution.
I came across the following case in a software development industry forum. A client had signed up to deliver a module in quick time using a joint global delivery model. The project is now months overdue, stakeholders are unhappy as business and numbers are impacted, and the product is nowhere close to deployment with a significant budget overrun.
A large, in-house firefighting team has been appointed to manage the situation. The team consists of dedicated programme managers, an onsite coordination team and various functional, testing and business analysts. Onshore management is also actively involved due to the escalations, which includes a team of technical leads, test managers and a quality assurance team.
Regular three-way conference calls and reports between the customer, the in-house and the offshore teams take place. These inevitably run for hours. There seems to be positive intent from all teams to resolve the situation, but things still seem to be moving slowly.
I asked the person writing on the forum who is responsible for coding and fixing the defects. He thinks about the question and admits that there were limited resources. There were only some developers and configurators, and I asked, “shouldn't there be more?” At least twenty people, some very expensive, sat on those calls and were copied on emails reviewing and analysing output of few developers.
Unfortunately, this is not a one-off situation as I regularly encounter similar scenarios is various software industry forums.
The issues are systemic and run deep, not just in this particular company featured in the forum, but in most software development companies. Here is what I shared in that forum on how we resolved a similar situation at AdvantageGo.
Over-engineering the software development life-cycle - The simplicity of software development has disappeared over the last decade. In the name of capability and maturity, a plethora of roles has been created such as testing managers, independent quality assurance managers, functional analysis executives and project and programme management. These roles often consume most of the budget, leading to compromises on the most essential discipline - software coding.
Throwing bodies at the problem - Whenever there is a crisis, the most common response is to put more people on the problem, which doesn’t necessarily help the situation. They usually take away focus from the most essential activity - software coding.
Career hopping - Software coders are often placed at the bottom of hierarchies and pay structures. As a result, many IT professionals intend to move away from coding roles within three to four years to become managers. There seems to be little incentive and motivation to keep software coders in the most critical area - software coding.
Education systems – I’m based in India, so I’m talking about my experience in the education system in this country. In most computer engineering programmes in India, two semesters are set aside for industrial training in which students are meant to relate engineering concepts to applicable technologies. For most students who take up engineering courses in smaller cities, this industry exposure is inaccessible. Many students end up obtaining certificates for academic reasons and only have real exposure to software coding in their first job. Since many engineers plan to leave coding to move up the corporate ladder, they aren't able to contribute more than two productive years to software coding.
This is how we addressed these issues in AdvantageGo and recommendations for the software industry
Partnership between the industry and the education system – To fix issues at the root cause, our industry needs to be actively involved in the education process. Technology companies will benefit if they start supporting students during their education so they can have the opportunity to have real-time industry exposure. NIIT, the parent company to AdvantageGo, has established the NIIT University to train graduates in the application of knowledge in ways relevant to the industry. Check out a blog from one of our software engineers who took the course.
Right processes - Technology vendors need to drop the "one size fits all" approach to software processes. In the zeal to achieve certifications, the tech industry has created numerous roles that don’t directly progress the software delivery. "Agile" has become a reason for lack of accountability. I have seen projects go off track because functional experts such as business analysts and SMEs aren't sure what they need. When challenged, they say that they expect requirements to be loosely articulated and details to be figured out during the execution as "Agile" was the agreed approach. I agree with the basics of this argument. However, this can't be a reason for people not owning up to their sign-offs until they get the final system. Agile should contribute to "knowing more at all stages" rather than moving on without tackling difficult questions and reaching the right decisions. Whichever process we follow, at least 60% of the total project bandwidth should be assigned to software coding.
Give confidence back to the developers - Since delivery models have become so complex and teams are heavily layered, coders have lost the confidence that enables them to engage with business users to drive for the best solutions. During the 90s, there was usually a direct link between the business user defining the need and the coder fulfilling the need. Complex business scenarios could be quickly handled through collaboration. Today, coders aren’t involved in these discussions. We need to bring them back into the business discussion. We also need to rethink career progression. Coding is a skill that can be taken to higher levels leading to significant benefits for technology companies and their customers. We should give senior coders an opportunity to earn as much as a manager even if they decide to code for most of their career.
Right approach to skills upgrade - Most companies have training programmes to help employees remain up-to-date with evolving technology. While the intent is right, this can create a mad chase for the latest trend. Since the basic skills are the same, a better approach is to focus on skill enhancement programmes that ensure continuity, stability, and progression instead of making people learn a bit of everything. I would much rather have a good Java coder on my team in place of someone who knows a bit of Java and a bit of, let's say, Hadoop.
Unless the industry can address these issues, I foresee the displacement of software development jobs out of traditional offshore locations. Offshoring will be used for support and maintenance contracts, and Level 1/Level 2 support will be the dominant service. It’s already happening.
We need to get our coders back directly in touch with consumers!