Professional skills cover such things as knowing a programming language; tools include the applications you need to use to enter the language into the computer. Methodologies are the set of methods, principles or activities you use to accomplish something, for example, a Scrum methodology is often used to help us manage software development. The context is the understanding of the business or industry sector. The SFIA framework also highlights the behaviours required; that is, in this case, the communication and interpersonal skills, all of which need to be understood in context.
Figure 1.1 Context for the different aspects that contribute to capability (Source: Reproduced with permission of SFIA Foundation)
The central concept is experience. If you have been looking for a role as a developer you will often see requirements such as ‘must have 5 years’ experience’ (frustratingly sometimes in things that have only been out for 3 years!). The reason experience is so valued is because it shows you can correctly apply your skills; the more you practise the skills the better you become at them.
Released in 2015, version 6 of the SFIA Framework (https://www.sfia-online.org/en/framework/sfia-6) gives the following description of general professional skills for a software developer:
The design, creation, testing and documenting of new and amended software components from supplied specifications in accordance with agreed development and security standards and processes.
Released just 3 years later in 2018, and ably illustrating the dynamic nature and needs of the industry, SFIA version 7 (SFIA, 2019) suggests a broader range of skills and competencies for that same role:
The planning, designing, creation, amending, verification, testing and documentation of new and amended software components in order to deliver agreed value to stakeholders. The identification, creation and application of agreed software development and security standards and processes. Adopting and adapting software development life cycle models based on the context of the work and selecting appropriately from predictive (plan-driven) approaches or adaptive (iterative/agile) approaches.
This book is designed to give you an introduction to the areas mentioned in these skills lists. It will not cover every aspect of every skill but it will give simple examples and pointers where possible to further reading and study.
SUMMARY
This chapter explained the varying job titles related to the role of software developer; it also cited SFIA as the frame of reference for the skills and competencies that will be covered in this book.
This chapter has covered ‘who’, the following chapters cover the remaining key points for developers:
Chapter 2 – Where and when
Chapter 3 – What
Chapters 4, 5 and 6 – How
Chapter 7 – Why
What, Why, When, How, Where and Who are the six honest serving men from the poem that follows Rudyard Kipling’s (1900) story The Elephant’s Child.
‘I KEEP six honest serving-men
(They taught me all I knew);
Their names are What and Why and When
And How and Where and Who.’
2 OVERVIEW OF SOFTWARE DEVELOPMENT IN CONTEXT
The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.
Seymour Cray
The SFIA framework specifically mentions context, so this chapter is a broad introduction to the practice of software development and where the developer role belongs in the greater context of systems and solution development. It considers what a developer produces and examines the broad range of products and industries that need developers. It also looks at where development output and developers fit into a system life cycle (that is, the lifetime of a product/system, from conception to eventual decommissioning).
WHAT IS DEVELOPMENT?
In the context of this book I am using ‘development’ to mean the creation of a program or part of a program, intended to run on a computer or other electronic device. Rather than saying all that every time, I will simply refer to what a developer produces as a product or program.
THE BUSINESS CONTEXT
The role of developer requires a set of skills, used across a very wide and varied range of businesses, sectors and industries. Developers produce a wide range of products; these can be platform- (what type of system it runs on), sector- (what type of industry it is used in) or use- (what its intended purpose is) specific.
In the SFIA framework the role of software developer belongs in a group of roles entitled ‘systems development’; on the skills webpage at the time of writing, systems development belongs in the solution development and implementation category.
Let’s consider the terms ‘systems development’ and ‘solution development’ for a moment. A system is defined as a set of things working together as part of a complex whole; in an IT context, systems development is the process of creating (analysing, designing, building, testing and implementing) a new software application or program. A solution is a means of dealing with a problem and in the business context, when you undertake solution development you are trying to provide something that will fulfil a need (or perceived need) or resolve a problem. These two terms, ‘solution’ and ‘system’ help us to understand why we develop software; we have a business problem and software systems provide the solution (or part of the solution) to that problem.
That problem or need could be any number of things; some example problems with potential solutions could include:
Problem – delivering medication to patients takes up a disproportionate amount of time for nursing staff; these highly trained individuals could be better utilised in doing other things.
Solution – a means of automating medication delivery for the health centre.
Problem – people who post images to a social media site do not always post appropriate images.
Solution – a social media platform with AI-based image filtering.
A developer could create part or all of the system that provides the solution to these problems or needs.
APPLICATIONS, APPS, WEBSITES, EMBEDDED SOFTWARE, OPERATING SYSTEMS
In the previous chapter I mentioned some of the types of software a developer may create, such as operating systems, applications, mobile apps, games and websites. The type of software you develop is dependent on the type of business or industry sector you are working in. Let’s look at that in a little more detail.
Systems programming
This tends to be a more specialised type of software development where developers create operating systems and software that controls the general running of a system. This type of software tends to interface with hardware or other pieces of software by providing services, for example writing