OU blog

Personal Blogs

Christopher Douce

TM470 Requirements revisited

Visible to anyone in the world
Edited by Christopher Douce, Wednesday 27 August 2025 at 12:32

Software requirements are important. If you are building a software product, your software requirements will describe what your software product is intended to do. Since software has the potential to do so many different things and solve so many different problems, your requirements can have different characteristics.

This blog post follows on from an earlier blog post, TM470 Considering software requirements. In this earlier blog post, I shared some questions. In this post, I would like to further refine and develop these questions.

When considering your project, it is important to ask yourself the following:

  1. When in your project will you allocate time to uncovering the requirements for your project?
  2. How will you go about gathering your requirements?
  3. How will go you about describing your requirements in your EMA report (and to the examiner)?
  4. How will you go about testing your product to check to see if it meets your requirements?

It is quite easy to answer the important first question. You would have chosen a lifecycle model for your project. Whatever approach you choose, the requirements ‘bit’ of your project should (ideally) occur not long after the start of your project.

The final question is also especially important. If you don’t define your requirements in a clear way, it may not be possible to know whether your software product meets those requirements. In other words, if you don’t have a clear picture of what you are building, you won’t know whether or not your project is a success.

Answering the second and third questions is more difficult, since it very much depends on the type of software you are creating. Arguably, the approaches you will adopt for testing will also be different too – but the key point remains - you need requirements to know what you need to test. Testing, of course, also needs to fit within your project plan.

Functional and non-functional requirements

In TM354, a software requirement (or requirement) is defined as ‘a desired feature, property or behaviour of a software system’ (according to the TM354 glossary). This term can be broken down into two types of requirement. A functional requirement is defined as ‘a specified action that a system has to perform’. In other words, what a software product should do. A non-functional requirement, by way of contrast, is defined as ‘a quality that a system must have’. Expanding this slightly, the idea of a ‘quality’ relates to a characteristic of a software product, such as its performance, security, reliability or usability.

The activity of keeping track of requirements is known, perhaps expectedly, as requirements engineering. If you feel that you need to find a way to keep track of your product requirements in a systematic way, it might be worthwhile briefly doing a bit of background reading into requirements engineering (in the context of your project) and sharing evidence of your reading within the literature review section of your project. Do remember to critical evaluate any articles and sources that you uncover. You should apply methods and techniques which help you to solve whatever problem you are trying to solve.

Scenarios

One of the reasons why software engineering is such a fascinating subject is how software can be used to solve so many different problems. Here are three examples of very different contexts in which software can be used:

  1. Embedded software
  2. Logistics software
  3. Consumer software

Embedded software

Embedded software is software that makes physical hardware work. It is software that ‘does something’ that is often important, and is often invisible. A useful example of embedded software is the software that runs on your internet router that you may use to connect to your broadband connection (you may well have learnt more about broadband technology in other modules).

An internet router operating system must satisfy a number of important non-functional requirements: your router software must be efficient (it must not slow down your use of the internet), it must be secure, and must run effectively whilst using limited memory and processing power.

An important question is, of course, what does router need to do? From a very high level perspective, it must provide some kind of user interface that enables either yourself or an engineer to configure it so it can be used. It will also, of course, offer internet connectivity either through a wired connection, or through a WiFi interface.

This leads a lot of further questions, such as: how are these interfaces defined? Wireless and internet protocols are, of course, already very well defined. They have been created by international standards organisations (such as the IEEE), corporations and committees over a long period of time. Technology needs standards to be able to work, and software engineers who have the unenviable task of building software for consumer internet routers must know what they are.

When faced with complex functional and non-functionality complexity, software engineers need to express their requirements in a concise and clear way, and in a form that ensures they can be tested. Testing is, of course, important since we need to know whether our software does what we think it should do.

Some requirements are more important than others. With our internet router, we may be able to tolerate a slight degradation in performance if there is more than one member of our household using our broadband connection.  We would not, however, wish to compromise on security, since this would put all users at risk. In other cases, some requirements are non-negotiable. Consider, for a moment, software used to control an engine (or motor) management system for a vehicle. The consequences of that software either failing, or not functioning as expected have the potential to be catastrophic. On one hand, the driver of a vehicle might be mildly inconvenienced if they can’t get it started, but on the other hand, there could be consequences for passengers, the pedestrians and the wider environment. A notable example is the

Volkswagen Diesel Emissions Scandal which is summarised by Jung and Park (OU Library). Since software that software engineers create impacts on people and society, software engineers have a responsibility to reflect on the decisions that they make, as well as the ultimate impact of the tasks they are asked to carry out.

Before moving onto the next example, a useful question to ask is: what project model is best suited to the development of embedded software for an internet router, where all the requirements are clearly defined? If everything is known from the start of your project, a traditional waterfall project model may well be most appropriate.

Logistics software

This second category can be thought of as ‘software that manages workflow’. The term ‘workflow’ can be used to describe any series of actions that contribute towards the solving of a problem or satisfying a need. The effect of some software isn’t immediately visible to us. Our experience at a supermarket or at a restaurant is often facilitated by software. Behind the scenes, requests for products are sent to one or more suppliers. These suppliers must then find a way of delivering your order to the shop or restaurant you visit. The importance of such software becomes very apparent when there are problems, as illustrated by a cyber attack on the Co-op chain of supermarkets (BBC News)

The functional and non-functional requirements for business-to-business logistics software will, of course, have a different character when compared to the formality that is needed for very highly specified embedded software. If is, of course, really important to clearly describe what is expected, by which stakeholder (who is defined as ‘anyone who is affected by the introduction of a software system’), and in what format.

It is also useful to reflect that they ways in which requirements may be gathered. Whilst the requirements for an internet router may exist within formal standard documentations, the requirements for logistical operations may have to be discovered by studying existing business processes and ways of working. Depending on the organisation, this may be the responsibility of a business analyst. In smaller organisations, it may be the responsibility of the software engineer to ask important questions and document their findings. Software is, of course, always about people.

What project model choice would be appropriate for this category of project? The answer, of course, depends on the detail, but let us assume that we know a lot about the operation of business processes and the underlying technologies we may wish to use. In this case, we might adopt a variation of the iterative waterfall, where more communication between the different stakeholders are embedded into the planning.

Consumer software

Consider a website that supports a community coffee shop. The website shares useful information for potential customers, such as its location, a menu of cakes and drinks, and its opening times. The manager has decided that it would be useful to enhance the website to offer more functionality.  Some key ideas include a way to advertise special events, such as gallery evenings, book groups and a ‘toddler club’, and to provide a way to reserve tables during busy times, and even to allow some customers to order their coffee and cake before they physically visit the café.

Where there are requirements, there are also questions. In this scenario we might ask where our requirements come from. Do they come from the manager, or should they come from the staff who will be working in the café, or from its customers? The manager, for example, may have an idea about what may need, but might not have a very clear vision of what they want.

 The software requirements for our coffee website are a lot less clear than the requirements of a logistics product, and much less clear than the requirements for an embedded system. In each scenario, the requirements need to be discovered, but the approach for discovering those requirements are different in each example.

When we are faced with unclear requirements and have access to potential users (who may have strong opinions about what they do and don’t want) we may adopt an interactive project model where we create a series of prototypes of what a product might look like. We might even apply something called an ‘agile method’ that emphasises producing versions of working software as early as possible, whilst also fostering collaboration between developers and communication with key stakeholders.

Discovering requirements

These three scenarios implicitly suggest there are different ways of uncovering requirements. The first scenario suggests that some essential requirements are likely to exist in the form of detailed standards and protocol documents. The second scenario suggests that requirements exist within the business, and may need to be discovered, perhaps by business analysts or by working with other who have a detailed understanding of the problem area. The third scenario suggests that although end users may have a solution in mind, they might not have a clear idea about what form it might take.

Here is a summary of some methods that could be used to learn more about software requirements:

  1. Study documents that are connected with the problem that is being solved. As well as standards, this could include documents that describe national or international legislation, sector guidelines, or corporate policies.
  2. Look at existing products, or study what existing products are currently used to solve the problems that your software product will ideally solve.
  3. Ask users. Interview them individually or by using focus groups.
  4. Observe users. Study, with permission, what happens within an existing system. Alternatively, ask users to record their own observations.
  5. Examine the context or wider environment of the problem to identify any further stakeholders, social or technical constraints, and concerns that need to be thought about.
  6. Build a prototype which is then evaluated. The process of evaluation can then lead to the discovery of more questions, and more requirements.

The information you gather from each of these approaches must be analysed. Analysis is a critical and creative process that must also take account of ethics; it is necessary to consider the impact of a software product on individuals, communities, and societies.

When you have decided on what are requirements are, how should you represent them? Should you write them down, or are there other approaches you could use? Your decision about which approach to use may well depend on your approach to risk, and the consequences of what might happen if your software product were to go wrong.

Representing requirements

The best way to represent or to describe your requirements depends on the characteristics of your software system. When looked at very simply, there a continuum which relates to formality. On one end of the requirements continuum there are very formal requirements that could be expressed in a formal mathematical language. On the other end, the requirements may not be very well known and are expressed using some slides or images created using a prototype tool.

What follows is a summary of different approaches you can use to represent requirements:

Formal methods: One of the main difficulties of using natural language to describe software requirements is that natural language can lead to ambiguity. To get around this challenge, software researchers have invented software specification languages that are based on mathematics. One of the advantages of a formal approach is that it becomes theoretically possible to formally verify whether program code (software) logically satisfies (matches) a specification.  You would use a formal approach in safety critical systems, which are often embedded software systems. The difficulty of suing formal methods lies, of course, with their formality. Since they use a formal language, they can be very difficult to work with.

Volere shells: Although natural language can express ambiguities, one way to manage this is to control the way in which language is used. Volere shells are essentially templates which contain sections that presents a concise description of a requirement, the motivation for the requirement, and a fit criterion that can be used to measure or determine whether it has been implemented successfully. For more information about Volere shells, do consult the OU’s software engineering module and Mastering the Requirements Process by Reed, Robertson and Robertson (2024) (OU Library).

Use cases: Use cases are all about describing what happens when a stakeholder interacts with a software system with the intention of carrying out a task or completing a goal. OU module materials describe two types of use case: textual use cases and graphical use cases. Textual use cases present a set of steps that are numbered, with alternatives. Graphical use cases are described using the Unified Modelling Language (UML) and summarise actions and actors (which can be stakeholders). Use cases are given names, which allows software engineers to easily discuss them with others.

User stories: The OU software engineering module describes a user story as ‘a story written by an intended user of a system; it describes some functionality that is of value to the person(s) writing the story. It represents a user’s expectation of the system’ (TM354 module glossary, 2025). User stories can take the form: ‘As a <user> I want to <description of activity> so I can <explanation of why activity is important>’. Like use cases, user stories can be given names (or even numbers) to help groups of software engineers to discuss them between each other, and within meetings. Since software requirements are, of course, related to software testing, an approach known as Behaviour-driven Development (BDD) builds on the concept of user stories, allowing them to be embedded within software test scenarios.

Prototypes: There are many different types and forms of prototype. A very simple prototype could be created from a series of pencil sketches, or prepared using one of many user design tools. Alternatively, a prototype could be a simulation of a software product, perhaps built using a presentation tool such as PowerPoint. A prototype might also be a semi-functional product. Sometimes the terms ‘horizontal’ or ‘vertical’ are used. A horizontal prototype that shows a lot of functionality but in not much depth; a vertical prototype that shows a small amount of functionality in a lot of depth. Unlike other representation techniques, prototypes embody requirements rather having them written down. It may, of course, be necessary to add additional description, especially regarding non-functional requirements, to provide further information and context for software engineers.

Planning for implementation

You have used different approaches to gather your requirements, and you have decided on a way to represent them. The next question is: how should you prioritise your requirements? The process of prioritisation, like the identification of requirements is also a creative process. There are, however, tools that can helpful. One tool is called the MoSCoW prioritisation tool (DSDM Agile Project Framework, MoSCoW Prioritisation).

MoSCoW is an abbreviation for ‘Must Have’, ‘Should Have’, ‘Could Have’ and ‘Won’t Have this time’. The most important requirements are obviously those that your stakeholders ‘must have’. The Agile Project Framework resource offers the following direct guidance: ‘ask the question ‘what happens if this requirement is not met?’ If the answer is ‘cancel the project – there is no point in implementing a solution that does not meet this requirement’, then it is a Must Have requirement’ (Agile Business Consortium).

If you are considering running a project that adopts an iterative approach, it will be useful to highlight which requirements will be implemented within which iteration. If you have begun with a prototype, taking a practical approach, it will be necessary to convert requirements embodied within a prototype to a specific development task. Working with requirements is a process of making invisible needs visible, so they can be converted into working software.

A recommendation

If you are creating a software product include a separate requirements section in your account of project work chapter. Use your literature review chapter to show your awareness of different approaches to requirements, and use your project work chapter to show how you have critically applied your understanding to the problem that you are solving.

Use an appendix to present a summary of all your requirements. Use the body of your report to share examples of the most significant or important requirements in your project. In the reflection chapter, consider writing something about what you learnt by working with requirements in a systematic way, and which requirements were the most difficult to implement. If there were some requirements that were too difficult to implement or define, do say something about why you thought that was the case, and and what you might have done differently.

Resources

When writing your project report (your EMA) it is important and necessary to show your understanding of principles and ideas from modules you have studied before you got to your project. A number of the level three computing modules address the topic of software requirements. What follow is a very brief summary of three important modules. If you have not studied these modules during your degree, there is an opportunity to learn more about the topics they contain, and apply them to your project.

TM353 IT Systems: Planning for Success

This module helps you to consider the connection technology and people and the way in which they can both interact with each other to create a sociotechnical system. TM353 emphasises the importance of understanding broader and wider perspectives. It introduces a methodology, known as soft systems methodology and techniques such as the creation of rich pictures, which can be used to depict and explore the environment in which your software product inhabits. By considering the broader perspective, it is then possible to consider the way in which software may influence communities of users and stakeholders.

TM354 Software Engineering

TM354 introduces a number of practical tools that can be used to explore and share requirements. It describes a UML notation called an Activity Diagram which allows you to express business processes and accompanying interaction with software products. It also describes different types of use case, both textual and diagrammatic. It describes Volere Shells in quite a bit of detail, and offers some very clear examples about how to write user stories. It also draws upon the Reed, Robertson and Robertson text, and directs students to a useful interview.

TM356 Interaction Design and the User Experience

TM356 makes extensive use of a well-known textbook, Interaction Design: Beyond Human-Computer Interaction by Preece, Rogers and Sharp (OU Library). Although the text focuses substantially on the design of user interfaces in all their different forms, understanding user requirements is a fundamental theme for a very simple reason. If there is a mismatch between the user’s expectations and the design of a product, that product is not likely to be as usable as expected. If you haven’t studied the OU interaction design module, this text can be especially useful. It offers some practical guidance about what techniques can be used to gather requirements, and what approaches can be used to perform usability evaluations of prototypes.

To find your requirements, it is sometimes necessary to carry out applied research to discover what users do and need in the contexts and environments in which they inhabit. Like the software engineering module, the interaction design module discusses user stories, use cases, and also mentions Volere Shells. Notably, it adds a few further tools that can help to further uncover and develop requirement. Essential use cases are, for example, a use case that gets to the ‘essence’ of an interaction, without regard how an interaction is implemented.  Personas, scenarios and storyboards are practical tools that help us to think about who the users are, what they will be doing when they use the software, and the context in which it will be used. Understanding requirements can then lead to the design of a prototype, which then can be evaluate and then further refined.

Reflections

I’ve been thinking about writing an article like this ever since I have noticed a lack a detailed discussion about requirements in TM470 EMA project submissions. Good projects will always consider them in depth. The best projects will also answer the question ‘how should I best represent my requirements to meet the needs of my project?’. There should, of course, be evidence of studying the topic of requirements within the literature review chapter. The best projects will also go onto use requirements within a testing process to determine whether a development has been successful.

The more you start to think about requirements, the more slippery the concept becomes. It is impossible to create one simple set of rules that works for all projects. There is a simple reason. Every project is different, and every project has its own unique set of characteristics. Gathering and describing requirements are creative activities, which takes software engineers towards onto other creative activities, such as software development and testing.

Differences between projects and problems can also mean differences in software engineering culture. Culture is expressed through differences in behaviours, practices and traditions. The culture of a software company that builds real-time safety critical embedded software is likely to be different to the culture of a company that builds consumer websites. How requirements are expressed are intrinsically linked to institutional values and non-functional requirements.

A final point is that software is always subject to change. Change can occur due to technology changes, changes in government legislation or corporate processes, or changes in work practices. Businesses are, of course, subject to mergers and acquisitions, and sometimes technology and software providers are changed for economic or practical reasons. In some cases, the speed of work-place change can outstrip the necessary changes that may need to take place within information systems. Since the role that software can play within organisations continually changes, so do the software requirements.

As well as supporting TM470, this blog serves a second purpose. Some of the ideas presented within this article may find their way into the new TM113 module, which features an important software engineering component.

Acknowledgements

Many thanks are given to the members of two module teams: the TM470 module team, and the TM113 module team. When I’m referring to ‘module teams’ in this section, I am also referring to tutors. I continue to hold the view that tutors are the most important people in the university.

Permalink Add your comment
Share post
Christopher Douce

Introducing ICEBERG

Visible to anyone in the world

On 11 July 25, in my capacity as a TM113 module team member, I attended a continuing professional development (CPD) event about something called ICEBERG.

ICEBERG is an abbreviation for Integrated, Collaborative, Engaging, Balanced, Economical, Reflective and Gradual. It is a tool used during learning and curriculum design, and is intended to embody best practice. The session was facilitated by learning designer Paul Astles, who is from the OU unit Learner and Discovery Services (LDS) (I think that is what LDS means).

What follows is a set of notes, which I am sharing with permission. It is hoped they are useful to anyone who is involved in learning design (including my colleagues from TM113 module team). My advance apologies are for anything obvious that I have missed, any mistakes I have included, and how long it has taken to pull together this set of notes. I always endeavour to thoroughly offer citations, but some sentences may have been taken verbatim from a useful presentation that Paul shared during his session.

Considering draft materials

The starting point of the session was also our starting point; our first drafts of our module materials, which are known as a ‘D0’ (or, module materials that we have started to sketch out). To help up think about our D0s, we looked at 3 ICEBERG principles: Integrated, Collaborative, and Engaging. Each principles have a set of ‘corresponding design tips’. Here are the tips that I’ve noted down, which come from Van Ameijde et al. (2018):

  • Integrated: A well-integrated curriculum constitutes a coherent whole where all the parts work together in a meaningful and cohesive way. This means that there is constructive alignment between learning outcomes, assessments, activities and support materials which all contribute effectively to helping students to pass the module.
  • Collaborative: Meaningful student collaboration and communication helps students in engaging in deep learning and making concepts and ideas their own (e.g., Garrison et al., 2001; Johnson & Johnson, 1999). It also serves as a mechanism for social support where students feel part of an active academic community of learners (see Tinto, 1975) which makes it more likely that they are retained.
  • Engaging: An engaging curriculum draws students in and keeps them interested, challenged and enthusiastic about their learning journey. Where the curriculum matches student interests and aligns with their educational and career aspirations, students are more likely to be retained. Using relevant case studies and readings and keeping these up-to-date as well as including a variety of different types of activities contribute to an engaging curriculum.

We were asked to look at a bit of material that was content heavy and were asked a question: how do we relate our draft materials to these points on the framework?

During our discussions, I made a couple of notes. Regarding Integrative, scene setting is important, since it adds concept. Collaborative can be useful, particularly a bit later on in the module when tools are introduced (collaboration is really important skill within software engineering). Also, Engaging can and should directly align with educational and career aspirations.

A key point that I took away from this part of the session was the need to emphasise ‘the people bit’. Also, since TM113 has three key themes, a question I had was ‘how do we integrate them together?’ There are also, of course, other important themes that are important to the module, such as employability, skills development, ethics and sustainability. In some respects, software engineering can be a linking theme, since it is all about people, tools, management of complexity, and communication.

The student learning journey

After a short break, the next part of the session related to the ‘student learning journey’. We again returned to the definitions of Van Ameijde et al. (2018):

  • Balanced: Balanced in this context refers to the workload that students face when studying the curriculum and the extent that this workload is well-paced and evenly distributed. Research has pointed out a negative correlation between average weekly workload and student outcomes, including satisfaction and pass rates, making it particularly important that we don’t overload students whilst keeping the workload appropriate for the level of study.
  • Economical: Economical refers to the extent to which a module or qualification is efficient in delivering the learning outcomes without providing too much additional material which. There might be a temptation to provide students with an overwhelming array of interesting facts, ideas, theories and concepts in a given subject area.
  • Reflective: For students to effectively pass a module and engage in deep learning, it is important that they are able to reflect on their learning and study progress and have the time and space to do so. This includes regular opportunities for students to test their understanding through, for instance, self-assessment questions, formative quizzes and iCMAs. It also includes opportunities for students to reflect on their learning practices and progress, and set goals. Such opportunities for reflection and feedback help keep students engaged with the curriculum and makes retention more likely.

Of these three principles, one of them is causing me a mild amount of worry: the ‘economical’ principal. There is an inherent challenge within pedagogy, which is: to learn some higher level concepts, you may need to learn a lot of lower level concepts. This learning of ‘lots of useful stuff’ can be difficult. There is also an important related question, which is: where do tell students about all these lower level concepts, if we’re being asked to do it in a cognitively economically way? Interesting facts, ideas and theories can be useful.

We didn’t get the chance to have a chat about ‘G’, which is Gradual. Also drawing on Van Ameijde et al. (2018):

  • Gradual: In an effective learning journey, students will gradually encounter increasingly complex and challenging concepts, ideas, materials, tasks and skills development. Where knowledge, skills and assessments all occur over a manageable gradient which builds on acquired knowledge, provides timely opportunities to learn and practice study skills and prepares them achieving the defined learning outcomes, it is more likely that students will not be overwhelmed and therefore more likely be retained.

The key point that I’ve taken away from this bit is the importance of practice (relevant ‘student answered questions’ which can be presented in the module materials)

Resources

During this session (and a related session) links to a number of useful resources were shared. These include:

And, of course, the article that was mentioned earlier:

Reflections

During this session, we didn’t have much time to apply the framework to our module materials, since we still had much to figure out. Not only were we still figuring out ICEBERG, we were also still figuring out the nature and form of our module materials.

One question I did have of ICEBERG was: where is the tutor in all this? I think the answer is that the tutor is implicitly embedded within all parts of the framework. Tutors, of course, make module materials come alive. In turn, they can magnify whatever learning design decisions have been made by the module team.

I get the impression that ICEBERG is a tool that specifically applies to individual modules, rather than qualifications – or, in other words, groups of modules. Can ICEBERG be applied to qualifications?  Referring to the original article by Van Ameijde et al., the definition of economical ‘refers to the extent to which a course or qualification is efficient in delivering the learning outcomes’ which suggest that it may well have a wider role. An interesting research question could be: ‘how might all the principles of ICEBERG be used to analyse the learning design of qualifications from different faculties?’ In the meantime, I’m going to concentrate on TM113.

Acknowledgements

Many thanks to Paul for his useful presentation, LDS, and all colleagues who have contributed to the development of ICEBERG. Thanks are also extended to fellow TM113 colleagues who attended the session.

Permalink Add your comment
Share post
Christopher Douce

Preparing to tutor TM113 Computing fundamentals 2

Visible to anyone in the world

One of the new level 1 computing modules on the BSc (Honours) Computer Science with Artificial Intelligence qualification goes by the catchy title TM113 Computing fundamentals 2: programming, databases, software engineering. It accompanies TM110 Computing fundamentals 1: concepts and Python programming.

As suggested by its title, this new module has three strands. What follows are a set of links and resources that may be useful to anyone who might be potentially interested in tutoring this module. If you have tutored TM112, the Python element will be familiar to you, but the software engineering and databases less familiar (although you may be familiar with databases, if have had any awareness of TM254 Managing IT: the why, the what and the how).

Programming

If you are familiar with software development but not with Python, the following OpenLearn and Cisco resources might be useful:

Databases

Within OpenLearn, there is the following:

Another useful resource that has been mentioned is:

Software engineering

Turning to the theme of software engineering, there are a couple of OpenLearn resources that have been derived from existing OU modules. 

Other resources

If you have never tutored an OU module before, the following module can be very helpful:

If you are an existing tutor, a really useful thing to do is to take advantage of the university’s fee waiver.

Reflections

The OpenLearn resources can certain be useful, and you can demonstrate awareness of the materials by gathering an informal badge (which can be added to a CV). What has really helped me to become a better tutor has been the fee waiver. This could be applied to computing modules, or modules from other faculties.

Acknowledgments

Thanks are extended to Anthony Johnson who shared some of those resources during a very early module team meeting.

Permalink 1 comment (latest comment by Darren Menachem Drapkin, Sunday 8 June 2025 at 20:35)
Share post
Christopher Douce

Some notes about agile practices in software engineering

Visible to anyone in the world
Edited by Christopher Douce, Tuesday 1 April 2025 at 21:06

Software engineering is done by people, but what people do to build software depends on the nature of software that is to be created. The culture of individuals, technologies and organisations also plays an important role too.

At the turn of the century, there was a new idea about how to build software; something called agile development. This led to the creation of something called the Manifesto for Agile Software Development If you’re interested in software development and want to know something about what ‘agile’ means, you need to have a look at the manifesto.

I first learnt about agile through something called eXtreme Programming (Wikipedia), and then something called Scrum (Wikipedia) (Don’t use Wikipedia in your TMAs; always use official references). In my eyes, the notable characteristic about agile (or Agile; there’s a difference between small ‘a’ agile, and large ‘A’ agile) is that it is all about people. Agile (in its different forms) helps to establish rituals which can, in turn, help software engineers to talk about that ‘invisible stuff’ which is software.

I recently asked a colleague, Advait Deshpande, who was the chair of an agile practices microcredential what the latest trends were in agile software development. He was kind enough to share links to some interesting articles and resources.

Articles about agile

 Here are some review articles that might be useful to anyone who is starting to study agile:

Edison, H., Wang, X., & Conboy, K. (2021). Comparing methods for large-scale agile software development: A systematic literature review. IEEE Transactions on Software Engineering, 48(8), 2709-2731. Available at https://ieeexplore.ieee.org/abstract/document/9387593/

Vallon, R., da Silva Estácio, B. J., Prikladnicki, R., & Grechenig, T. (2018). Systematic literature review on agile practices in global software development. Information and Software Technology, 96, 161-180. Available at https://www.sciencedirect.com/science/article/pii/S0950584917302975

Other resources

Advait also shared the following two links, which he gives me permission to share here: UK Government: Agile delivery - Agile tools and techniques.

The notion of ‘agile’ has moved beyond software, but to business. It is important to distinguish between the two. This second link emphasises what agile might mean within a business context: Agile Business Consortium: Business Agility.

Post (or peak) agile

Once, agile was the new thing on the block. Now agile has become mainstream. An accompanying question is: have we reached post (or peak) agile? Also, what comes next? One of the criticisms of agile is that it is best suited to smaller teams, which puts a limit to how it can be applied to bigger projects. There have been several attempts to address this:

Advait directed me to a talk that was hosted on YouTube that had a provocative title:

I know Dave Thomas from a book I have on my shelf at home; a book called ‘the pragmatic programmer’ – it is a good read, and is packed filled with some very practical advice. His talk about agile is worth a watch. He presents a critical view of the ‘agile industry’ in a humorous and engaging way. It is worth a watch. He talks about the origins of the agile manifesto, as well as ‘large agile’. An important point is that when thinking about how to create software, we need to think critically too.

Reflections

When I was learning about software engineering as an undergraduate, I was introduced to something called the software development lifecycle (or SDLC). There are different models; there’s a waterfall model, a spiral model, and there was something called SSADM which bored me to hears. It was only after I graduated that I later learnt about agile in all different guises.

When I started working as a software engineer, the company that I worked for didn’t have a software development process, so we had to make one. Culture and experience are themes that can influence decisions about what is done. I was lucky enough to work with someone who had had a lot of experience, for which I was really thankful for.

We set up policies and processes. We also applied techniques that had an agile flavour, bits of pair programming, and aspects of test driven development. Our processes needed to work for both the products and the people who were developing the software. We needed to be pragmatic to get things done.

Acknowledgements

Thanks are extended to Advait Deshpande. I really appreciated the chat and all the links he shared.

Permalink
Share post
Christopher Douce

Introducing the R88 qualification: Computer Science with Artificial Intelligence

Visible to anyone in the world

For my sins, I’ve found myself on four module teams; two in production (TM113, TM253) and two in presentation (TM354, and TM470). The two production modules are a part of an important new qualification the university is producing.

What follows is a set of notes I’ve made that relates to this new qualification. For the official word about the R88, my recommendation is to have a look at the R88 qualification webpage

Firstly, a bit of context: a full time degree is made up of 360 academic credits. The equivalent of one year of study at a brick university is 120 credits. The OU also reflects this, and has three levels of study. Degree classification scores are calculated from results from levels 2 and 3. Level 1 is about skills and knowledge development, but level 1 modules do need to be passed. All modules on this qualification are 30 credits. 

Here is a quick summary of what I know.

Level 1

TM110 Computing fundamentals 1: concepts and Python programming

This is the first module to study. It is likely to include some maths just to prepare everyone for the first maths module that follows. Unlike TM111, it makes use of a textual programming language from the outset. Different themes are interleaved with each other. There are two TMAs and an end of module TMA. 

TM113 Computing fundamentals 2: programming, databases, software engineering

The first presentation of this module is planned for October 2026. This obviously has three related components, and like TM110, the topics are interleaved with each other. This uses the same programming language as before, but uses a different programming environment: Visual Studio Code.  Like all these modules, there is a focus on skills development and employability.

TM129 Technologies in practice

This module has three ten point sections: a bit about robotics and AI, a section about virtual machines and the Linux operating system, and a bit about networking. In AI machines will, invariably need to talk with each other. Knowing something about networking is important.

MST124 Essential mathematics 1

This module is produced by the School of Maths and Stats. It builds on ideas that were introduced in TM110.

Level 2

TM253 Programming and software engineering

This new module is planned for October 2027. This picks up where TM113 left off. It is likely to introduce students to a programming language that is different from Java, and is likely to help students do understand more about software design and architecture. There is also likely to be a significant emphasis on object-oriented software (but other programming paradigms might also get mentioned).

TM258 Introduction to machine learning and artificial intelligence

This is a new module which introduces a range of different AI techniques. I know nothing more than this at the moment, but I’ll hazard a guess to say that ‘search’ is likely to be covered.

M269 Algorithms, data structures and computability

It could be argued that M269 is the most computer science of all these computer science modules. It covers the fundamentals, which means searching and sorting.

M249 Practical modern statistics

Stats is important within machine learning (as well as computer science). The module description says that it covers “time series, multivariate analysis, and Bayesian statistics”. 

Level 3

TM342 Investigating intelligence and ethics

As a postgrad student, I studied a module that had the title ‘natural and artificial intelligence’ that was led by the school of psychology. It was a subject that I really enjoyed. I’m looking forward to learning more about what is going to be covered in this module.

TM343 Artificial intelligence in practice

I don’t know anything about this module, other than I know it is going to be hands on, and may well cover the subject of natural language processing (in some way or another).

TM358 Machine learning and artificial intelligence

This is an existing module which is a part of the BSc (Honours) Data Science qualification. The module description says: “you’ll learn about various machine learning techniques but concentrate on deep neural learning”. In other words, neural networks.

TM470 The computing and IT project

This is what is called a capstone module. Students who take this programme are required to complete a project that is likely to have an AI flavour to it. This is also one of the modules that I tutor. I’ve written quite a few articles about TM470 in this blog.

Other qualifications

There are a number of other related qualifications which are worth knowing about:

Reflections

It’s really exciting to be working on the software engineering bit of two new modules. 

In some ways, this takes me back to my undergraduate days where I studied computer science. On the programme, there was a single AI module (which was a third year module) which I quite enjoyed. Things have, of course, moved on a huge amount; there are new techniques and new technologies. I was only taught about symbolic AI, and nothing about statistical approaches. I only came across neural networks as a postgraduate student in the mid-1990s.

It is interesting to see how mathematics is introduced in this programme. It begins slowly with material in TM110. This reflects my own experience as an undergrad. I never studied maths at A or AS level, so I went to a ‘gentle start’ class. This led onto a 'discrete mathematics' class, which could be termed ‘bits of maths that could be useful for those studying computer science’. I didn’t like it much. To this day I remember proofs, matrices (which is useful for computer graphics), and a lot of probability (lots of questions about playing cards). The equivalent of my discrete maths class is, of course, MST124. Given the importance of statistics in machine learning, there is then M249. 

It’s also important to reflect that software engineering has changed since I studied it. Computing is now everywhere, and that is a characteristic that makes it such an interesting subject. It is in your devices, in your appliances, and in the cloud. A personal objective is to work with others to create materials that not only give the materials industrial relevance, but also to share with students what it means to study software engineering as an academic subject.

Looking back to my time as an undergraduate, one of the modules that I recognise most clearly in M269, the data structures and algorithms module. Some fundamentals never change. What does change is how they are used, and how they are realised. I remember reciting Dijkstra’s algorithm in an exam, just as if it were an ode. I also remember getting a bit baffled by the big O notation, which features in M269.

One of the areas that I know I’m weak on is statistics. When I’m through studying my current module, I may well find my way back to maths.

Disclaimers

This qualification (along with all the others) is subject to change and development.

Acknowledgements

Acknowledgements are due to the School of Computing and Communications directors of teaching who have played an important role is establishing this new qualification.

Permalink
Share post

This blog might contain posts that are only visible to logged-in users, or where only logged-in users can comment. If you have an account on the system, please log in for full access.

Total visits to this blog: 3122446