Software outsourcing is its simplest form involves seconding or contracting of software development jobs by one company (The Owner) to another (The Outsourcing). Companies will generally indulge in outsourcing for a number of reasons, the commonest of which is cheaper labour and professionalism.
Overall, companies outsource for the following reasons:
1. Cheaper Labor: Companies/Individuals in developed countries whose economies are generally stronger will outsource to competent hands in the third world to get better deals in terms of per hour charges
2. Professionalism/Dexterity: Certain countries have made a name from their prowess in software development. E.g. India. Certain firms in some little known countries have also made a name from their competencies.
3. Specialization; some companies started up with a technology arm that may primarily do jobs like networking. In their quest to give their customers a total solution, they often need to float a software arm. Rather than embarking on the intricacies of taking on the challenges of setting up a software division, outsourcing is a handy option.
4. Companies have also been known to outsource for reasons ranging from a need for more capable hands, large volumes of outstanding jobs and a need to train their own internal staff on the job.
To those who will question under whose authority I write or what has placed me in a position to write an article about outsourcing in Nigeria. I have been into the outsourcing job with Splashers Technologies for 3 years. Most of our jobs have been sourced from Artemis –solutions group, MI USA. Splashers must have started out with a very small team because by the time I joined in December 2003, I met a team of 3 developers and that included the GM. Well I replaced 1 of the three so we were back to three.
Since then, we’ve scaled. From a double room that was more of a single room divided into 2 in Festac town Lagos to a big building in Obantoko, Abeokuta to a much better neighborhood in Ibara Abeokuta. In addition, the number has risen to between 11 and 13 developers, an admin team, office maintenance crew and security personnel.
There are plans to scale even larger: a permanent building, a consulting arm in Lagos or/and Abuja Nigeria. There are plans to take on local outsourcing (so far we’ve completed 3 jobs and more are queued). Other plans include more community development and an initiative that kicked up among splasher’s developers is being supported by the company (NGdeveloper.net).
Back to the mainstream, I must emphasize there are challenges in software outsourcing. This writing was motivated by a friend in the USA, Francis Ibikunle. Francis wanted to start an outsourcing initiative, the regular send jobs down to Nigeria, get it done and uploaded, make a few sales and start up a stronger company in Nigeria. Well, I buy his idea but not the approach. Francis would rather do business with me than with Splashers Technologies. Now Francis is a motivated guy, he is definitely a business man and he has not given me room to forget the fact. Where I am a self motivated entrepreneur too, I must say I’m probably in the line of deep thinkers. I have seen a lot of the problems of outsourcing and I intend to learn from history. I tried to persuade him (Francis) to do business with an established company rather than an individual, tried to make him see and ended up presenting him with options. Well like Jesus Christ, I was biased; something like choose life so that you may live.
Francis has since chosen to sign a deal with a guy in Lagos. As a good friend, I told him I’d write this article and relate more with him. In his chosen path, I offer as much help as I can because I like success stories. So that we may learn from history, I write.
I have identified a couple of challenges over the years, most we’ve succumbed but not without some agonies, some we are gradually overcoming. I made up a little list that’s not exhaustive.
1. Evolving and managing processes
2. The goal, getting the team to buy into the long term vision and mission
4. The huge challenges of Infrastructure
5. The development abstraction layer.
6. Managing scalability
Because each item in the list above can generate a lot of steam and writings, I have tried to be as succinct as possible. Part 2 and maybe subsequent parts will handle items not covered in this first part.
Evolving and managing processes;
I was told by management sometimes ago thatI have the credit of being the first to package a deployment document with a solution; a readme.txt, scripts, at least formally. Since then this has become standard practice.
The company has since evolved a process of software development. The beauty of this is that the processeses evolved. Unlike the evolution of man, however, the process despite the fact that it’s stable now is still evolving.
The process is a long drawn one; methodologies of successful companies were researched, articles were shredded. What’s important however was that only the part that works for us in practicality were adopted, and more often than not, with some modifications.
Presently, we have processes that handle general software development process. A process called CADIUM may soon be patented by Artemis-solutions group and another company in Michigan has already adopted the process. All thanks in no small way to splashers Technologies.
The quality assurance (QA) process is core to business. If you think quality assurance is a small deal, try doing business with people other than family or ask Joel on software. Before this process was fully embraced, several iterations were wasted. By iterations, I mean the series of we’ve completed and uploaded this milestone, client test (in this case, project owners that outsourced) and alas, uspRegisterUser is missing and the solution is back at home. Somehow, that was thee last piece worked on by developer A and it skipped his mind during packaging. Another common scenario was, “You said this was fixed but it appears that not the case!”. These expensive iterations were emphasized by the time difference between Nigeria and the USA. We have a about six hours difference between us and if we upload stuff around 5pm Nigerian time and they discover the bugs 2 hours later (say 10am MI time), overall the rest of the day is bad since we’ve gone home in Nigeria.
A number of solutions were quickly presented to combat these issues: a night shift was pushed. We thought of the fact that we ran a private power generator for the better part of the day, our current facilities just won’t support a night shift. A more versatile QA process was adopted instead; a QA team was commissioned consisting of mostly dedicated QA guys. QA methodologies like unit testing and hallway testing were adopted. Other more intrinsic details included rules like checking out of a source safe repository and never testing on the development machine.
Version control was another process we adopted early. The was a need to store codes in a central repository for reasons including needs atimes to revert to a stable version of a module, track changes to create change logs, keep code safe among others. Many version control options were considered taking into account the poor internet connections prevalent in Nigeria. We eventually settled for subversion and all client machines now run tortoise svn.
A hiring process became necessary to hire highly motivated and genuine coders. A matriculation process for new signups includes introduction to coding standards and existing frameworks, never failing to mention just how much innovations are welcome. For instance, we had a team evaluate our in-house object relational modeling framework ORM and we’re seriously considering dumping it for NHibernate. A training process saw us starting a geekify session every Wednesday. A developer researches a topic for a week and presents the topic to the rest of the team.
Other processes that have been evolved in the process include a backup strategy, project management process, process evaluation process, project management, productivity management and client satisfaction evaluations.
Watch out for part 2