• Keine Ergebnisse gefunden

Software engineering in low- to middle-income countries

Miroslaw Staron

In contemporary society, software features in the manufacturing of almost every product, and software engineering has become a recognised engineering discipline. Software engineers are responsible for a wide range of activities, from planning and writing new software to maintaining or upgrading software that is already in use. This means that software engineers need a solid and broad education with options that allow them to specialise in areas such as software architecture, product testing or project management. What I hope to show in this chapter is that the software engineering profession can assist in the realisation of the Sustainable Development Goals (SDGs) (UN 2015) in a number of ways.

For entrepreneurs in low-income economies, investing in software development might seem an unlikely option, especially if their real aim is to help reduce poverty and inequality. However, compared with the development costs involved in establishing mechanical or other kinds of engineering projects, the costs involved in shipping software assets and products are small.

This allows small businesses to quickly build confidence and skills platforms, and low shipping costs make it feasible for them to contribute to projects anywhere on the globe. In addition, lower labour costs, and the ability to ship software without long and complex supply chains, also give low-income countries some competitive advantages.

Software engineers1 in Asia, Africa and South America have the potential to become drivers for growth in their economies by utilising the increasing importance of software in many aspects of our daily lives (Boehm 1981).

However, software engineers in lower-income countries face a number of challenges. For example, they need to be highly flexible as they have to constantly balance developing their own products at low cost and in-sourcing software from global companies. To attract business partners, software engineers have to be able to offer high levels of competence at low cost. As

indicated by Khan et al. (2011), after cost-savings, skilled human resources are the second most important factor when large companies consider using an outsourcing partner. Hence, for software engineers to be successful on the outsourcing market, thereby attracting new capital into their economies, software companies have to focus on enhancing the competence, skills and knowledge of their staff.

The central question I address in this chapter is: how can software engineers in low-income countries develop software products in ways that maximise learning and build long-term client-supplier relationships when in-sourcing new projects?

Although the scope of the question is wide, I address it by focusing on how software engineers can build competence while they develop or in-source new products. This focus on learning is crucial for the sustainable development agenda; giving everyone a chance to learn and develop addresses the first transformative shift in the UN’s Post-2015 Development Agenda (UN High-Level Panel 2013).

In tackling this question, I review existing research on software development in lower-income countries, and identify challenges related to adopting the most modern software development technologies. I present an alternative model that focuses on rapid release-and-learn software development. This allows developers to continually release new software increments and to learn from each release, thus minimising the risk of running into contractual problems with business partners. The model is based on the Build-Measure-Learn Cycle (Ries 2011) designed for software start-ups.

The chapter is structured as follows – first I provide a brief overview of the role of information and communication technologies (ICT) in sustainable development. I then focus on the software engineering field, and outline the challenges for software development start-ups, which I argue are similar all over the globe. I then outline a recommended software development process and finally propose an education programme that any country can adopt or adapt to support the development of competence in this field.

The role of ICT in achieving the SDGs

When considering the role of ICTs in sustainable development, Goals 4, 8 and 17 in the UN’s (2015) list of SDGs are particularly relevant. I have listed them below, but in the order that makes most sense in this context:

Goal 17. Strengthen the means of implementation and revitalize the global partnership for sustainable development.

– Goal 17.6. Enhance North–South, South–South and triangular regional and international cooperation on and access to science, technology and innovation and enhance knowledge sharing on

mutually agreed terms, including through improved coordination among existing mechanisms, in particular at the United Nations level, and through a global technology facilitation mechanism.

Goal 8. Promote sustained, inclusive and sustainable economic growth, full and productive employment and decent work for all.

– Goal 8.6 By 2020, substantially reduce the proportion of youth not in employment, education or training.

– Goal 8.7 Increase Aid for Trade support for developing countries, in particular least developed countries, including through the Enhanced Integrated Framework for Trade-Related Technical Assistance to Least Developed Countries.

Goal 4. Ensure inclusive and equitable quality education and promote lifelong learning opportunities for all.

– Goal 4.4 By 2030, substantially increase the number of youth and adults who have relevant skills, including technical and vocational skills, for employment, decent jobs and entrepreneurship.

Although all of these goals are relevant for the development of society as a whole, and deserve support, they also raise a number of questions. For example, how can we support the efficient diffusion of competence between North and South without encouraging a flow of skilled workers into the high-income countries? And, how can lower-income countries enhance the speed of technology uptake without jeopardising the development of long-term competencies?

In the following section, I further problematise these issues in relation to the three key goals listed above; in the remainder of the chapter, I propose a technology model and supporting education programme that I believe can address these issues.

Strengthening the means of implementation

In striving to achieve Goal 17, the need for partnerships between the lower- to middle-income countries (or regions) and the high-income ones is clear.

Too often in the past, the movement of knowledge (via technology and knowledge transfer) from North to South led to the phenomenon (often described using the negatively loaded term ‘brain drain’) whereby skilled people from the South move northwards in search of higher income and other rewards for their work. This phenomenon is present when economic rewards for potentially equally skilled workers are imbalanced. The development of North–South business partnerships can address this challenge and establish relations in which competence development in the low-income countries

helps to strengthen local social and welfare systems. The ICT field is a perfect example of a domain in which this kind of ‘paired development’ is feasible, because the costs of establishing software ‘production’ infrastructure is significantly lower than the costs of establishing other types of industrial production and manufacturing processes. To start developing software, the basic infrastructure required is electricity, plus computers and internet access.

Where these are available, the main barrier is a lack of skilled individuals. This brings us to Goal 8.

Promoting sustained, inclusive and sustainable growth

Goal 8 is about the need for sustainability in growth. This implies business development based on long-term relationships and trust. To attain sustained growth, countries and individuals need to focus on lifelong learning. In our rapidly changing world, it is no longer possible to remain relevant in the job market unless we constantly invest time and resources in renewing our own education and upgrading our skill sets. Many of the technical skills taught at universities remain relevant for a limited period; as the sciences, arts and medicine move forward, individuals must too.

For the lower-income countries, the capacity for rapid reskilling is even more important. When these economies grow, they tend to do so faster than the high-income countries, but their starting point in relation to technological development is lower. This means that an individual might start working with technology that can be categorised as relatively ‘simple’, but, within a period of only a few years, the same person might be expected to work with

‘advanced’ technologies. Modern ICT affords the lower-income countries access to new technologies and knowledge. In Rwanda, for example, the ability to build mobile-phone networks made it unnecessary for communications companies to build the infrastructure required for the installation of landlines countrywide. However, to be able to maintain, develop, and extend this kind of ICT infrastructure and its related functions, local, skilled workforces are essential. This brings us to Goal 4 – education.

Ensuring inclusive education

A major challenge linked to Goal 4 lies in making education sustainable and inclusive. Unlike the short-term projects in which skilled teachers visit low-income countries to provide courses and quickly leave again, sustainable solutions are needed that develop local competence, and train new generations of teachers in the South.

Another challenge is the need to combine the skills needed for short-term development (the ability to handle and use the newest technologies) with the

skills that sustain innovation over the longer term (such as problem-solving and mathematics skills). If educational programmes do not combine these two sets of skills, there is a danger that graduates will be unable to support longer-term economic growth, and that future generations will have even fewer opportunities as job markets dwindle.

In the rest of the chapter, I explore the potential for software engineers to significantly shift the ICT sectors in lower-income countries, thereby potentially helping to reduce global inequality.

Continuous software engineering

The SDGs advocate sustainable growth, which includes a focus on product lifecycles, and the ability to evolve products over time. One discipline in which this concept of continuity is prevalent is software engineering.

Software engineering is about processes for developing software that ensure their repeatability, predictability and ultimately their success (Jalote 2000; Team 2002). In this section, I focus on how the continual development and delivery of software allows developers to learn while constructing new software (Duvall et al. 2007; Humble and Farley 2010). Known as ‘agile and lean software development’ (Oppenheim 2004; Staron and Meding 2011;

Tomaszewski et al. 2007), this approach is discussed in a little more detail below as it provides the foundation for the build-measure-learn cycles that I outline later in the chapter.

Lean and agile software development

In addition to the benefits offered by continual product development, the lean and agile approach to software development supports the establishment of long-term partnerships, built on trust and mutual sharing, because communication and dialogue play a central role in the process.

Agile software development is an umbrella term for a number of programming processes including scrum (Rising and Janoff 2000) or XP (extreme programming) (Beck 1999). As described by Cockburn and Highsmith (2001) the agile approach emphasises short development cycles, as well as collaboration and contact with customers over more complex or longer-term software development projects.

In contrast to older software development models (such as the rational unified process) the more modern agile model recognises that:

Users do not always know exactly what they want upfront.

Software development teams seldom fully understand what users communicate upfront.

Continual change is a natural part of the software development process.

Accordingly, agile processes involve short development loops (or ‘sprints’) which aim to deliver working software or an increment in the process towards working software so as to:

Provide proof of progress to clients or users.

Discuss, specify and refine understandings of user requirements.

Implement changes that might be required if misunderstandings occurred during the previous sprint.

These short development cycles minimise the risk of developing inappropriate software, and emphasise the delivery of working software at each iteration (as opposed to documentation about what will be delivered).

Lean software development requires close collaboration between developers and customers to ensure the delivery of products that correspond to customer requirements and demands (Poppendieck 2007). Following the manufacturing model developed by the Toyota Corporation, the focus of lean software development allows for (and aims to optimise) flows within manufacturing systems while focusing on the need for close collaboration with customers and the variability of their requirements (Oza et al. 2012).

This implies short release cycles, quantitative monitoring of software development, agility within development teams, and lean software development techniques (Poppendieck and Poppendieck 2003). Figure 7.1 depicts a typical lean and agile software development set-up, in which the managers plan which features or functional requirements are to be developed

Figure 7.1 Lean and agile software development processes in which multiple teams work in parallel

FR-F1

FR-F2

FR-P1 FR-P2

FR-P3

WP WP

WP Functional

requirement for a feature

Functional requirement for a product

Work

package Software

development teams

Customer Product Design

management System Test

management Release

(FR-F1, FR-F2) and development teams take responsibility for designing, creating and testing each feature.

Figure 7.1 also shows that functional requirements are separated into work packages, and that different features can be developed by different teams. Each team delivers their coding into the main program, and can thus deliver code to any component of the product. The requirements derive from customers, and these are prioritised and packaged into features by product managers who communicate with system managers about the technical aspects of how the features will affect the product architecture. The system managers also communicate with the development teams who design, implement and test the functionality of all features. All coding is tested thoroughly by dedicated testing units before products are released (Staron and Meding 2011).

Combining a lean management approach with agile development processes allows software companies to rapidly change features without needing to rework project plans, which can be costly and time-consuming.

Naturally there are several alternatives to the lean and agile model. One of the most prominent is V-model development (Mellegård and Staron 2010).

V-model processes focus on the integration of functionality, and are used by automotive software suppliers worldwide, including in India and China.

Proprietary versus open-source development

Software engineering is evolving in two directions. On the one hand, are the advanced and specialised software development tools used in application domains such as automotive software; examples include UML and Simulink modelling (Pretschner et al. 2007). On the other hand, open-source tools are used to develop software for non-critical systems; an example here is the Eclipse Platform (DesRivières and Wiegand 2004; Geer 2005).

Development and business models for proprietary and open-source software also differ significantly (Camara and Fonseca 2007). Proprietary software developers derive most of their income is from selling software to customers, and a secondary source of income related to the selling of product support. For most open-source software developers, the major income opportunities are related to the delivery of training and support.2

Challenges for low- to middle-income countries

Software development in low- and middle-income countries has been investigated from a number of angles. Various researchers have documented the development of competencies and technologies in countries such as India, China, Pakistan and Vietnam. The challenges for many of these countries seem to be primarily financial (in terms of access to funding; this is related to

SDG Goal 17), technical (linked to infrastructure and tooling; this is related to SDG Goal 8) and social (in that education systems tend to be weak; this is related to SDG Goal 4).

Heeks (2002) conducted a meta-study looking at published evidence of failed and successful information-system projects in what he called ‘developing economies’. He concluded that one of the main problems facing entrepreneurs was a lack of business knowledge. In an earlier article, Heeks (1999) identified a number of other major barriers to the success of software developers, one of which he called the infrastructure roadblock, that is, the need for reliable, high-capacity infrastructure for exports to succeed. A second major barrier was the lack of trust in business relationships. In a similar vein, Correa (1996) identified barriers for lower-income countries related to factors such as:

Limited internal markets – market size can limit the development of software products above a certain threshold of complexity and cost.

Firm sizes – a lack of sustainable mechanisms for venture-capital funding often limits the size of software development companies.

Quality standards – start-ups in lower-income countries are often unaccustomed to stringently self-monitoring quality standards.

Shortcomings in qualifications and methodologies – the focus of many start-ups is the need to raise capital, and this can mean that stringent software development methodologies are compromised.

Limited infrastructure – lack of access to infrastructure and new technologies can be hindrances for competitive start-ups that want to work at the cutting edge of technology development. (I focus more on this issue in the next section.)

These factors constitute significant obstacles for software engineers in economies where innovation is often desperately needed but where establishing software enterprises can be difficult. However, possible remedies – such as lightweight development methodologies (to initiate and build relationships with clients) or crowdfunding (to raise capital) do exist, and are described in more detail below.

Accessing technologies and funding

Entering the market is difficult when starting from scratch (Schware 1992).

However, the lean start-up approach advocated by Ries (2011) involves developing the minimum number of viable products using a build-measure-learn cycle as discussed below. However, lack of access to the internet and its technologies would be a major challenge, especially as modern software distribution channels are now so different from the traditional ones. For example:

Mobile applications tend to be distributed via dedicated online stores – in the mobile phone segment, all applications are certified and distributed via established distribution channels – App Store for iOS (Apple), Google Play for Android (Samsung, HTC, Sony) or Windows Marketplace (Microsoft, Samsung, HTC, Nokia).

Desktop applications have built-in mechanisms for software updates – almost all modern desktop applications are installed once only and are automatically updated via the internet from time to time. And when application updates are sold, this is often done via vendors’ online stores (Windows Marketplace, Apple’s App store, etc).

Modern customers almost expect their products to grow over time, to be continually updated with new functionalities without them needing to buy new hardware for each update. Such updates are often realised via continuous deployment, and without user interaction.

Thus, access to the internet, deployment frameworks and dedicated servers is essential; and access to these technologies can be problematic for countries on the periphery. However, the popularisation of mobile technology is increasing access to the internet globally, and opening up possibilities for the development of new products and new processes (Arora and Gambardella 2004).

In terms of access to financing, some start-ups in smaller economies have used crowdfunding. As described by Schwienbacher and Larralde (2010) and by Belleflamme et al. (2013), crowdfunding is a simple scheme whereby start-ups seek investors by announcing their goals on various websites, and asking individuals to make small investments. In contrast to traditional venture-capital financing, this approach offers developers and investors more flexibility, and is less dependent on geographical proximity. However, to be successful, start-ups need to show quick results, and regularly deliver new functionalities.

Without these abilities, they risk losing investors (Mollick 2013).

Kickstarter.com provides the following examples of successful

Kickstarter.com provides the following examples of successful