Saturday 14 April 2012

Moving from Programming to Software Development


Programming is often regarded as software development. This is very rampant in this part of the world based on the unstructured manner in which programming skills are acquired. Developing a program is often mistaken as the development of software because there is limited formal standardized IT education thereby complicating the ignorance of potential entrants into the IT field.
I was once in this web based on the raw skills of coding which I possess thereby making me to regard myself as a software developer. I remembered fumbling in an application exhibition based on inexperience and ignorance about the details involved in the art of developing softwares that are customer satisfactory and profitable. Most young programmers like I was are challenged by the failure to transform their programming skills into well knitted softwares. Some that have been able to somehow navigate this path have also been challenged by the commercialization and profitability of the software they have produced.
It is surprising that these challenges hold sway considering the huge revenue and volume of trade in the software and application development. In essence, it is high time Nigeria youths and programmers learnt the basics of software engineering in order to be globally competitive. If you are a “code warrior” as these set of programmers are called please follow the analysis that will be detailed in this article.

The start

Developing software is like building a house. Most times, I advise programmers to form a team in order to have variety and different perspective which will contribute immensely to the overall development of software. Building a house also involves bricklayers, welders, carpenters, painters and electricians thereby making the team to consist of persons with numerous skills (Graphics designers, database managers, programmers, project managers and marketers). This is imperative to ensure that software is acceptable by client/market, tasks are divided, adequate coordination during development and conformity to timeline.
I know our culture and society does not enhance trust which is required in such team, but it must be in place and some level of trust should be developed as the new term in business these days is collaboration (after all GlaxoSmithKline and Pfizer are collaborating despite being competitors).

Select a Methodology

It is important to have a plan and a detailed method of developing the software. There are numerous methodologies and approaches that can be adopted in developing softwares. Among of them is waterfall model, Agile, Spiral model, Prototyping and even Prince2. A detailed research into these methodologies will influence selection of the methodology. The preferred methodology should be objectively selected and totally agreed upon by the team. A discussion of the methodologies, roles and responsibilities of each team member and overall understanding of how the methodology works must be conducted before commencement of the project.

Tasks in Software development

I thought about the most concise format of explaining the details, I feel the use of waterfall methodology to explain the details will be appropriate as it has detailed and explicit outline of steps involved in the methodology.
·         Understanding the Problem: Every new system or even software is conceived and developed to solve a problem or introduce change to a current system. Every programmer or software development team must take time to understand the problem which the software to be developed is solving. The understanding will shape the requirements which will be designed for the software.
·         Planning: The entire software development process must be segmented into tasks and phases for easy evaluation. Detail timeline for the development must be set. This timeline is often constructed like a Gantt chart in order to know task duration and the resources required to finish each stage of the development. Resources for clarity mean man power, financial, internet (if needed) and other resources as required by tasks.
·         Designing: This stage is the most imperative in the entire process. This is where extensive consultation is conducted. This phase of the development involves the transformation of the requirements (derived from understanding problem stage) into a technical implementable format. This process can be initiated by the selection of the relevant technologies that will be appropriate for the development. Interoperability must be put into consideration as most programmers usually have predefined technologies to use even when there are better options. The design includes tasks like UML and Data flow illustration and software components (interface, database connectivity, transaction processing, error management, session management in case of web based applications). The design document provides the blue print for how the software will be developed technically.
·         Implementing: This is where the coding is conducted. This is where the instructions and details in the design document are converted to the actual software.
·         Testing, Evaluation and Maintaining: Testing is where the functionality of the implementation is investigated for flaws. This task is usually concerned with the discovery of flaws which must be fixed to ensure that the software conform to requirements. Experience has shown that numerous flaws and let offs are discovered during testing prompting repetitive implementing and testing cycle in reality. Evaluating the entire development follows after satisfactory testing is conducted. Evaluation documents the overall development process including the usefulness of the software for the development team. The evaluation usually involves installation for clients or commercial packaging for off the shelve softwares. Maintaining often conducted for customized software is the optimization of the installed software for optimal usage.
This explanation shows that ordinary coding (Implementation) cannot produce good softwares. This also shows the problem which numerous programmers are facing as software development involves more steps than coding. Developing a software or application requires high level of management thereby detailed focus on the systematic approach must be imbibed to ensure success.
This piece is my contribution to improving the human capacity in the Nigerian and global IT space. If you have learned something or you have any corrections, please leave your comments. My name is Pelumi Apantaku and my twitter handle is @Pelulomo_27

2 comments:

  1. hi, this is a nice piece. I remember, about 9 years ago when laptops were becoming more popular, my projection was that in 5 years time, we would have many programmers in Nigeria but alas, 7 years on, we are still struggling with many 'one-man battalions'.
    i think the problem is that most people still dont see the reward in being a programmer. I mean, if people see the ready market, they would embrace programming. thereafter, we can then talk about forming project teams.
    for now, people like you will still have to make do with working solo, unless you want to collaborate with programmers from other parts of the world.
    I would like to work with you one day, for now, let me continue to work on my skills.

    ReplyDelete
  2. Thanks. This blog is to highlight the challenges and help young people pick interest in IT. I will like to meet up with you one of these days as well. Once again, it is a pleasure.

    ReplyDelete