Software Development Principles
Software Development Principles
IN THIS COURSE
A practical introduction to building software systems with people, process, and quality
in mind.
Contents
i
0 CONTENTS CONTENTS
ii
HIS COURSE is built for first‐year university students who are beginning to move from
T writing small programs to understanding real software systems. The aim is to make
software development practical, human, and clear from the start.
You will meet ideas such as requirements, product backlogs, sprint planning, sprint reviews,
testing, design, maintenance, and teamwork. These are not empty industry words. They are
everyday practices that help teams build software that people can actually use, trust, and im‐
prove.
Each chapter reads like a textbook but uses the rhythm of a magazine: clear objectives, ex‐
amples, sidebars, checkpoints, case studies, review questions, and practical activities. The ex‐
amples are intentionally close to student life and ordinary organizations: registration portals,
mobile money, learning platforms, clinic appointments, library systems, online shops, and cam‐
pus services.
As you read, keep asking one question: how does this help a team build the right software, for
real users, under real conditions?
iv
CHAPTER NO. 1
1
Understanding Software
Systems
œ LEARNING OBJECTIVES
By the end of this chapter, you should be able to:
1
1 UNDERSTANDING SOFTWARE SYSTEMS Introduction to Software Systems
2
OST STUDENTS MEET SOFTWARE first as a program: a calculator written for class, a
M small web page, a script that adds numbers, or a form that stores a name. These
programs are useful for learning, but they are not the full story of modern software
development. In the real world, software is often part of a larger system involving people, data,
Think beyond code devices, rules, money, time, and risk.
Think about a university registration portal. At first glance, it may look like a website where a
student logs in and registers for course units. But behind that simple screen there are many
connected parts. The portal must know which student is logging in, whether fees have been
paid, which courses are available, whether timetable clashes exist, whether a department has
approved the registration, and whether records must be sent to other offices. A change in one
place can affect many people.
That is why this course begins with software systems. A student who only thinks about code
may ask, “Which programming language should I use?” A software developer who thinks about
systems also asks, “Who will use it? What problem are we solving? What data must be pro‐
tected? What happens when the network is slow? Who approves changes? How will we know
the software is working correctly?”
This chapter sets the stage for later topics. We shall not rush into advanced terms. Instead, we
shall build a practical way of seeing software. When students later learn requirements, agile
development, design, testing, deployment, maintenance, and project management, the ideas
will make more sense because they will be connected to real situations.
1 UNDERSTANDING SOFTWARE SYSTEMS Introduction to Software Systems
3
Software is now found in ordinary activities. A student checks results on a portal. A shop
attendant records sales using a point‐of‐sale application. A patient receives an SMS reminder
from a clinic. A driver follows a navigation app. A customer pays using mobile money. A lecturer
uploads notes to a learning platform. A supermarket system updates stock when an item is sold.
In all these examples, software is not just a collection of instructions. It supports a real activity.
It changes how people work, communicate, and make decisions. If the software works well,
people may hardly notice it. If it fails, everyone quickly notices. A failed payment system delays
business. A broken hospital records system can affect patient care. A wrong examination record
can create stress for a student and extra work for administrators.
For this reason, the study of software development must be practical. Students need to un‐
derstand how software behaves in the world, not only how code behaves on a laptop. A small
program may run well for the person who wrote it. A real system must run for many different
people, under many different conditions, over a long period.
This chapter introduces the idea of a software system. We begin by comparing a program with
a software system. We then discuss software as an engineered product, meaning that it must
be planned, designed, built, tested, and improved carefully. Next, we look at software as part
of society because users, organizations, laws, and ethics shape what software should do.
The chapter then explains why software systems become complex. We shall examine compo‐
nents, connections, scale, users, time, and the consequences of failure. Finally, we discuss how
structure helps manage complexity and why systematic development is necessary. Throughout
the chapter, we shall use real‐world examples that first‐year students can understand: student
registration, mobile money, online shopping, clinic appointments, library systems, and simple
agile team activities.
1 UNDERSTANDING SOFTWARE SYSTEMS Programs and Software Systems
4
A program is a set of instructions written so that a computer can perform a task. A program may
be small or large, simple or difficult. For example, a program can calculate the average mark
of five tests. Another program can convert temperatures from Celsius to Fahrenheit. Another
can display a web page with a contact form.
When students start programming, they usually learn by writing small programs. This is im‐
portant because it teaches logic, variables, conditions, loops, functions, and problem solving.
However, a program used for learning normally has a limited purpose. It may receive input,
process it, and produce output.
Consider a simple program that calculates whether a student has passed a course unit:
® NOTE
If the final mark is 50 or above, display “Pass”. Otherwise, display “Retake”.
This program is useful for learning decision making. But it does not yet answer many real ques‐
tions. Where did the mark come from? Who entered it? Was the student registered for the
course? Has the mark been approved by the department? Can the student appeal? Should the
mark be hidden from other students? What happens if the database is not available?
The moment we ask these questions, we move beyond a simple program and start thinking
about a software system.
A software system is a set of connected software parts, data, people, procedures, and some‐
times hardware that work together to support a real activity. The software may include pro‐
grams, databases, user interfaces, reports, security rules, communication services, and links to
Systems support other systems.
work
The word system reminds us that the parts are connected. If one part changes, another part
may be affected. If the payment part of an e‐commerce system fails, orders may remain incom‐
plete. If the timetable part of a university system is wrong, students may register for clashing
course units. If a hospital appointment system sends reminders late, patients may miss ap‐
pointments.
Í Program or system?
A program can often be understood by reading one file or one small group of files. A
software system may require understanding users, rules, data, screens, reports, security,
testing, maintenance, and the environment where it runs.
The difference between a program and a software system is not only size. A small system can
still be a system if it connects several parts and supports a real process. A large program can
still be mainly a program if it does not interact with many people, rules, or external services.
This comparison is not meant to reduce the value of programs. Programs are the building blocks
of software systems. But in software development practice, programmers must learn to think
beyond a single block. They must understand how their work fits into the larger whole.
1 UNDERSTANDING SOFTWARE SYSTEMS Software as an Engineered Product
6
Suppose a student writes a program that stores names of books borrowed from a small class
library. The first version may be very simple:
For a class exercise, this is enough. But imagine the same idea is used by a real university library.
The problem changes. The library needs student accounts, book categories, due dates, fines,
staff permissions, search tools, reports, barcode scanners, and backup. It may need to connect
with the university identity system so students can use one login. It may need SMS or email
reminders. It may need reports showing popular books.
CHECKPOINT
Think about a food ordering app. Identify one feature that looks simple on the screen
but may involve several system parts behind the scenes. For example, what must happen
when a customer presses “Place Order”?
Behind that one button, the system may check the restaurant menu, confirm the price, calculate
delivery fees, request payment, create an order number, notify the restaurant, assign a rider,
update the customer, and store the transaction. The customer sees one action. The system
performs many coordinated actions.
To engineer something means to build it carefully for a purpose, using knowledge, planning,
design, measurement, and testing. A bridge is not built by simply placing materials until it
looks right. Engineers consider weight, weather, safety, cost, maintenance, and future use. In
the same way, software should not be built by randomly adding code until something appears
Engineering means to work.
discipline
1 UNDERSTANDING SOFTWARE SYSTEMS Software as an Engineered Product
7
Software engineering is the disciplined practice of developing software that solves real prob‐
lems and can be used, changed, tested, and maintained. It includes programming, but it is
bigger than programming.
These questions help prevent common failures. Many software problems do not happen be‐
cause developers cannot code. They happen because the team did not understand the real
need, did not communicate clearly, did not test properly, or did not prepare for change.
Code is central to software development, but code alone is not the whole product. A software
product may include:
A student may ask, “If the code works, why do we need all these other things?” The answer is
that real software must survive outside the developer’s laptop. It must be used by people who
did not write it. It must be corrected when bugs are found. It must be changed when rules
change. It must be understood by new team members. It must recover from mistakes.
1 UNDERSTANDING SOFTWARE SYSTEMS Software as an Engineered Product
8
For example, a clinic appointment application may work perfectly when a developer tests it with
three patients. But in a real clinic, the system may face hundreds of appointments, different
doctors, cancellations, emergency cases, wrong phone numbers, and patients who arrive late.
Good software development prepares for these ordinary realities.
Three early activities show why software development is engineering: requirements, design,
and testing.
Requirements describe what the software should do and the conditions it should satisfy. Re‐
quirements may come from users, managers, laws, business rules, or technical constraints. For
a university registration system, a requirement may be: “A student must not register for two
course units that clash on the timetable.” This is not just a programming detail. It is a rule that
protects students and departments from confusion.
Design describes how the system will be organized to meet the requirements. Design may in‐
clude screens, data structures, system components, workflows, and interfaces between parts.
Good design makes the software easier to understand and change.
Testing checks whether the software behaves as expected. Testing is not only pressing buttons
after coding. It involves planning examples, checking normal cases, checking unusual cases,
and confirming that fixed problems do not return.
Ď TIP
In a practical project, requirements, design, and testing are connected. A clear require‐
ment gives the team something to design for and something to test against.
As a student, I want to see course units available for my programme and year of
study so that I register for the correct units.
This backlog item leads to requirements, design, and testing. The team must clarify which pro‐
gramme the student belongs to, where the list of course units comes from, how the screen
1 UNDERSTANDING SOFTWARE SYSTEMS Software as an Engineered Product
9
should display them, and what happens if no units are available. Testers must check exam‐
ples such as first‐year students, repeating students, elective units, and students in different
programmes.
Let us follow a small project team building part of a university registration system. The team
includes a product owner, two developers, a tester, and a student representative. The product
owner speaks for the university department and helps decide what is most important. Start with the need
During an early meeting, the student representative says, “Students need to know which course
units they are allowed to register for.” A developer may be tempted to start coding a course list
immediately. But the team slows down and asks practical questions:
These questions show engineering thinking. The goal is not to delay work. The goal is to avoid
building the wrong thing quickly.
The team then writes product backlog items. A product backlog is a prioritized list of work
that may be done on a product. Each item should represent something valuable or necessary.
Example items may include:
During sprint planning, the team chooses a small set of items to complete in the next sprint,
such as two weeks. They discuss what can realistically be finished, what information is missing,
and how they will test the work. This is practical software engineering. The team is turning a
broad goal into manageable work.
1 UNDERSTANDING SOFTWARE SYSTEMS Software as Part of Society
10
CHECKPOINT
Why would it be risky for the team to build the whole registration system without show‐
ing users small working parts along the way?
It would be risky because users may discover missing rules only after seeing the software. De‐
partments may disagree about approval steps. Students may find the screens confusing. Build‐
ing in small parts allows feedback before too much effort is spent in the wrong direction.
A software system has technical parts. These are the pieces that developers usually work with
directly. They may include:
• User interfaces, such as web pages, mobile screens, menus, and forms.
• Application logic, which handles rules and decisions.
• Databases, which store records.
• Servers, which run software for many users.
• Networks, which allow parts to communicate.
• External services, such as payment gateways, email services, maps, or identity systems.
• Security mechanisms, such as passwords, permissions, and encryption.
These parts matter because they shape what the system can do. A system with a poorly de‐
signed database may become slow. A system with weak security may expose private informa‐
tion. A system with confusing screens may cause users to make mistakes.
However, technical parts alone do not explain the full system. A technically correct system may
still fail if it does not fit the people and organization using it.
Software systems also have human parts. These include users, customers, managers, support
staff, trainers, administrators, and other stakeholders. A stakeholder is anyone who is affected
Many users, many by the system or has an interest in it.
needs
1 UNDERSTANDING SOFTWARE SYSTEMS Software as Part of Society
11
For example, in a school fees system, stakeholders may include students, parents, bursars, ac‐
countants, school administrators, auditors, and bank partners. Each group may care about
different things. Students may want quick confirmation of payment. Accountants may want
accurate reports. Auditors may want a clear trail of who changed what. Administrators may
want the system to reduce queues.
If developers ignore stakeholders, they may build software that works technically but fails prac‐
tically. A system that requires a cashier to enter twenty fields for every payment may be accu‐
rate but too slow for a busy office. A system that uses technical language may confuse users.
A system that does not match existing approval rules may be rejected by management.
Most software systems live inside organizations. An organization may be a university, hospital,
bank, shop, government office, transport company, or small business. Organizations have goals,
rules, departments, budgets, and habits. Software must often support these realities.
Consider a hospital records system. Doctors may need fast access to patient history. Nurses may
need to record observations. Pharmacists may need prescriptions. Administrators may need
billing information. Managers may need reports. The system must respect confidentiality, but
it must also make information available to authorized staff at the right time.
This means software development is also about understanding work. Developers need to learn
how tasks are currently done, where delays occur, where mistakes happen, and what improve‐
ment is expected.
Sometimes software changes the organization itself. A paper‐based process may become dig‐
ital. A manual approval may become automatic. A manager may get real‐time reports instead
of monthly summaries. These changes can be helpful, but they can also create fear, resistance,
or confusion. People may worry about losing control, making mistakes, or being monitored.
Good software teams therefore communicate carefully. They do not treat users as obstacles.
They treat users as sources of knowledge about the real work.
1 UNDERSTANDING SOFTWARE SYSTEMS Software as Part of Society
12
User needs matter because software is judged by whether it helps people achieve their goals.
A system can be technically impressive and still be unsuccessful if it does not solve the right
problem.
For example, imagine a team builds a mobile app for farmers to check market prices. The app
is beautiful and fast, but it requires constant internet access. Many farmers in the target area
have unreliable network coverage. The team has solved a technical problem but missed an
important user need. A better solution might allow offline viewing of recently downloaded
prices or SMS‐based access for basic phones.
Understanding user needs does not mean accepting every request without thinking. Users may
ask for features that are not practical, secure, or affordable. The development team must listen,
clarify, and negotiate. The aim is to understand the problem behind the request.
Ď TIP
When a user asks for a feature, ask what problem the feature is meant to solve. The first
request is often a proposed solution, not the full requirement.
Suppose a department administrator says, “I want an Excel export button on every page.” The
team should ask why. Maybe the real need is monthly reporting. Maybe the administrator
wants to share lists with heads of department. Maybe the system’s built‐in reports are not
trusted. Understanding the reason helps the team design a better solution.
Software systems can affect privacy, fairness, safety, and trust. These are not advanced topics
reserved for later years. First‐year students should begin noticing them early.
A system that stores student marks must protect privacy. A banking system must prevent unau‐
thorized transactions. A recruitment system should not unfairly reject applicants because of bi‐
ased data. A health system must keep patient information confidential. A transport app should
not expose a customer’s location to unauthorized people.
Legal concerns involve laws and regulations. Ethical concerns involve what is right, fair, respon‐
sible, and respectful, even beyond the minimum law. Social concerns involve how software
affects people’s lives and communities.
For example, a university attendance system using facial recognition may seem efficient. But it
raises questions. Was consent obtained? What happens if the system fails to recognize some
students? Who stores the images? How long are they kept? Can the data be misused? A
1 UNDERSTANDING SOFTWARE SYSTEMS Why Software Systems Become Complex
13
CHECKPOINT
Choose one system you use often, such as mobile money, a learning platform, or a so‐
cial media app. What private information does it handle? What could go wrong if that
information were exposed?
Software becomes complex when it grows in size and when the number of connected parts
increases. A small program may have one file and one main task. A real system may have many
screens, services, tables, reports, user roles, and external connections. Growth creates
complexity
Complexity does not mean confusion only. It means there are many parts to understand and
many possible interactions. A large system may still be well organized, but no single person
may understand every detail.
• Product catalogue.
• Search and filtering.
• Shopping cart.
• Customer account.
• Payment processing.
• Inventory management.
• Order tracking.
• Delivery assignment.
• Refunds and returns.
• Customer support.
• Promotions and discount codes.
• Reports for managers.
Each part may be understandable on its own, but the whole system becomes difficult because
the parts must work together. If inventory is wrong, customers may buy items that are not
1 UNDERSTANDING SOFTWARE SYSTEMS Why Software Systems Become Complex
14
available. If payment succeeds but order creation fails, the customer may be charged without
an order. If delivery status is not updated, customer support receives complaints.
A component is a part of a system that has a responsibility. A component may be a module, ser‐
vice, database table, screen, or external tool. Components are connected when one depends
on another.
Coupling
Coupling describes how strongly one part of a system depends on another. If two parts are
tightly coupled, a change in one part may require changes in the other. If they are loosely
coupled, they can change more independently.
For beginners, coupling can be understood through a simple example. Suppose a school system
has a report screen that directly reads the exact internal format of the marks table. Later, the
marks table changes to support coursework, exams, and retakes separately. If the report screen
was tightly tied to the old table format, it may break. A better design would allow the report
screen to ask for “final marks” through a clear interface without needing to know every storage
detail.
Tight coupling is not always avoidable, but too much of it makes systems difficult to change.
Interdependence
Interdependence means parts rely on one another to complete a larger process. In a food
delivery app, payment, restaurant confirmation, rider assignment, and customer notification
are interdependent. The order process is not complete until several parts cooperate.
Interdependence increases the need for coordination. A team working on payments must un‐
derstand how the order team expects payment results. A team working on notifications must
know when messages should be sent. In agile projects, such dependencies often appear during
sprint planning. The team may ask, “Can we complete this backlog item in one sprint, or does
it depend on another item?”
® NOTE
Dependencies are normal. The goal is not to remove every dependency. The goal is to
make important dependencies visible so the team can plan and test them.
1 UNDERSTANDING SOFTWARE SYSTEMS Why Software Systems Become Complex
15
In small programs, a small change often has a small effect. In larger systems, a small change
can affect many people or parts. This is one reason software teams use careful change man‐
agement, testing, and reviews. Small change, wide
effect
Nonlinear Effects
A nonlinear effect happens when the size of the result is not proportional to the size of the
change. For example, changing one validation rule in a registration system may seem small. But
if the rule controls which students can register, it may affect thousands of students, department
reports, fee clearance, and graduation eligibility.
Another example is changing the format of phone numbers in a customer database. The change
may be only one field, but it can affect SMS notifications, login verification, customer support
searches, and reports.
Cascading Effects
A cascading effect happens when one problem causes another, which causes another. In soft‐
ware, cascading effects are common when systems are connected.
Imagine a mobile money payment gateway becomes slow. An online shop keeps waiting for
payment confirmation. Orders remain pending. Customers press the payment button again.
Duplicate payment attempts increase load. Customer support receives many complaints. The
original issue was slow payment confirmation, but the effects spread through the system.
This is why software teams test not only individual features but also important flows from be‐
ginning to end.
Large systems can behave in ways that are difficult to predict. This does not mean software is
magic. It means that many interacting parts, users, and conditions can produce situations the
team did not think about.
Emergent Behavior
Emergent behavior is behavior that appears when parts interact, even if no single part was
designed to produce that exact result. For example, a social media platform may recommend
posts based on user activity. Each part may be simple: users like posts, the system counts
activity, and recommendations are shown. But together, the system may encourage certain
content to spread quickly, including content that is misleading or harmful. The larger behavior
emerges from interaction.
In a university system, each department may correctly update its course list. But if many depart‐
ments schedule courses without coordination, students taking course units across departments
may face timetable clashes. Each local action is reasonable, but the combined result creates a
problem.
Load refers to the amount of work a system is handling. High load may mean many users, many
requests, large files, or heavy data processing. A system that works for ten users may fail for
ten thousand users.
Consider online registration. On a normal day, only a few students may log in. On registration
deadline day, thousands may log in at the same time. Pages become slow. Students refresh
repeatedly. The system receives even more requests. Some students may submit the same
form several times. This is not just a coding problem. It is a system design, testing, and planning
problem.
Let us examine a simple online shop called CampusMart. It sells textbooks, stationery, and
electronics to students. In the first week, CampusMart has only a few users. The team builds
quickly. A customer can view items, add them to a cart, and pay on delivery.
As the shop grows, new needs appear. Students want mobile money payments. The store
wants stock reports. The delivery team wants location information. Customer support wants
order history. Management wants discounts during orientation week. Suppliers want alerts
when items are low.
Suppose the team adds a discount feature. A discount affects the product page, cart, checkout,
payment amount, receipt, refund amount, and sales report. If the team changes only the cart,
the receipt may show a different amount from the payment record. Customers lose trust.
This is why teams use backlog refinement. Backlog refinement is the activity of reviewing and
improving product backlog items before sprint planning. The team asks what each item means,
what is missing, what risks exist, and how acceptance will be checked.
For the discount feature, a refined backlog item may include acceptance criteria:
Acceptance criteria are conditions that help the team know whether a backlog item is com‐
plete. They make hidden expectations visible.
1.6.1 Scale
Scale refers to how large a system’s work becomes. Scale can involve components, data, users,
transactions, locations, or time. A system that works at a small scale may need changes to work
1 UNDERSTANDING SOFTWARE SYSTEMS Scale, Users, and Time
18
Number of Components
As the number of components increases, coordination becomes harder. A student records sys‐
tem may start with student profiles. Later it adds course registration, fees, results, graduation
clearance, hostel booking, and alumni records. Each new component adds value, but also adds
more connections.
Good structure helps the team know where a change belongs. If fee rules are mixed into reg‐
istration screens, result reports, and clearance forms without organization, changes become
risky. If fee logic is placed in a clear part of the system, other parts can use it without copying
rules everywhere.
Amount of Data
Data growth changes system behavior. A search that is fast for 100 records may be slow for
1,000,000 records. A backup that takes one minute today may take two hours after years of
data. Reports may become slow when they process large histories.
Data also brings responsibility. Student records, health records, and payment records must be
accurate and protected. Losing or corrupting data can be more serious than temporarily losing
a screen.
Number of Users
More users mean more variety. Users have different devices, network speeds, languages,
habits, and levels of digital confidence. Some users read instructions carefully. Others click
quickly. Some have new phones. Others use old phones. Some have strong internet. Others
have weak connections.
Designing for users means expecting difference. A first‐year student may use a portal for the
first time and feel anxious. A registrar may use the same system daily and want speed. A
lecturer may need a simple way to upload marks without making errors. The same system
must support different levels of experience.
1 UNDERSTANDING SOFTWARE SYSTEMS Scale, Users, and Time
19
1.6.2 Users
Users are central to software systems because they provide input, interpret output, and make
decisions based on the system. User behavior can be unpredictable, not because users are bad,
but because real life is messy.
User Errors
A user error occurs when a user enters wrong information, presses the wrong button, forgets
a step, or misunderstands the system. Good software design expects some mistakes and helps
users recover.
For example, a student may accidentally select the wrong course unit. A good registration
system should allow review before final submission. It should show course codes, names, credit
units, and timetable information clearly. It should not punish a simple mistake harshly.
Unexpected Inputs
Unexpected inputs are values the developer did not originally think about. A name may contain
an apostrophe. A phone number may start with a country code. A student may have a very
long surname. A user may paste text with spaces. A file upload may be too large.
Beginner programs often assume clean input. Real systems must validate input and give help‐
ful feedback. Validation means checking whether input is acceptable before using it. Helpful
feedback tells the user what to correct.
Different users use the same system in different ways. Some customers search carefully before
buying. Others add many items to a cart and remove them later. Some students register early.
Others wait until the deadline. Some administrators process records one by one. Others upload
spreadsheets.
These patterns affect design and testing. A team should not test only the easiest path. It should
test common paths, error paths, and busy periods.
CHECKPOINT
In a learning management system, what are three different ways students might use the
assignment submission feature? What could go wrong in each case?
1 UNDERSTANDING SOFTWARE SYSTEMS Scale, Users, and Time
20
1.6.3 Time
Software systems live over time. This is one of the biggest differences between class exercises
and real projects. A class exercise may be submitted and forgotten. A real system may run for
years.
Changing Requirements
Requirements change because organizations change. A university may introduce new grading
rules. A shop may add delivery. A clinic may add online consultation. A government may
introduce a new reporting requirement.
Changing requirements are normal. The challenge is to build software that can change without
breaking everywhere. Agile development accepts that learning continues during a project. In‐
stead of pretending all details are known at the beginning, agile teams work in small steps, get
feedback, and adjust.
Changing Technologies
Technologies also change. A library, framework, operating system, browser, or payment service
may be updated. A system may need to support new devices. A hosting provider may change
pricing. Security standards may improve.
Students should understand that software maintenance is not failure. Maintenance is part
of the life of useful software. A system that is used will need correction, improvement, and
adaptation.
System Growth
System growth happens when more features are added over time. Growth can be healthy if
the system is structured. Growth can become painful if features are added carelessly.
Imagine a small business inventory system. At first, it records stock. Later it adds sales, suppli‐
ers, purchases, returns, branches, users, and reports. If each feature is added quickly without
design, the system may become hard to understand. Developers may fear changing anything
because they cannot predict the effects.
1 UNDERSTANDING SOFTWARE SYSTEMS Scale, Users, and Time
21
Software failure does not always mean the whole system stops. A failure may be a wrong cal‐
culation, a missing message, a security weakness, a slow response, a confusing screen, or a lost
record. The seriousness of failure depends on the context.
Financial Consequences
Financial consequences occur when failure causes loss of money. A payment system may charge
customers incorrectly. A stock system may show wrong inventory, causing a shop to sell items
it does not have. A payroll system may calculate salaries incorrectly.
Even small errors can become expensive when repeated many times. If a system undercharges
each transaction by a small amount, the total loss may become large.
Operational Consequences
Operational consequences affect daily work. If a hospital appointment system is down, staff
may return to paper lists. If a university portal fails during registration, queues may form in
offices. If a delivery tracking system fails, riders and customers may need phone calls to coor‐
dinate.
Operational failure often creates pressure on people. Staff may work longer hours. Users may
become frustrated. Managers may lose confidence in the system.
Some failures break laws, contracts, or ethical responsibilities. Exposing private health records,
losing examination marks, or allowing unauthorized financial transactions can have serious con‐
sequences.
Ethical consequences may also occur when a system treats people unfairly or hides important
information. For example, an automated loan system that rejects applicants without clear rea‐
sons may create unfair outcomes.
1 UNDERSTANDING SOFTWARE SYSTEMS Managing Complexity Through Structure
22
Loss of Trust
Trust is difficult to build and easy to lose. If users believe a system is unreliable, they may avoid
it even after problems are fixed. Students may print screenshots as proof because they do
not trust the portal. Customers may call support after every payment because they fear losing
money.
Good software development protects trust through accuracy, clear communication, security,
reliability, and honest handling of errors.
A small training institute begins with a spreadsheet for student records. One administrator
records names, phone numbers, fees, and course attendance. The spreadsheet works well for
40 students.
After two years, the institute grows to 1,500 students across three branches. Several staff mem‐
bers need access. Some students pay in instalments. Managers want reports by branch. Lec‐
turers want attendance lists. Students want SMS reminders. The spreadsheet becomes risky.
People overwrite each other’s changes. Some records are duplicated. Reports take too long.
There is no clear record of who changed what.
The institute now needs a software system, not just a file. It needs user accounts, permissions,
shared data, backups, reports, validation, and support. The original tool was not bad. It simply
outgrew its purpose.
n KEY TAKEAWAYS
• Software that is useful often grows.
• Growth brings more users, data, rules, and risks.
• A design that works today may need improvement tomorrow.
• Teams should expect change and structure systems so change is possible.
In a small class program, one student can understand every line. In a real software system,
this is rarely possible. Different people understand different parts. One developer may know
the payment module. Another may know the reporting module. A tester may know common
failure cases. A support officer may know user complaints. A product owner may know business
priorities.
This does not mean the team is weak. It means the system is larger than one mind. Good teams
create structure so people can work together without needing to know everything at once.
Breaking a system into smaller parts is one of the most important ways to manage complexity.
It allows teams to focus on one responsibility at a time. Divide to
understand
Decomposition
Decomposition means dividing a larger problem into smaller, more manageable problems. For
example, a university portal can be decomposed into admissions, registration, fees, results,
timetable, and communication.
Decomposition helps planning. Product backlog items can be organized around parts of the
system or user goals. A team may decide that in the first sprint it will focus only on student login
and viewing available course units. Later sprints can add registration submission, approval, and
confirmation.
Modularity
Modularity means organizing software into parts that have clear responsibilities and can be
developed, tested, and changed with some independence. A module should have a clear pur‐
1 UNDERSTANDING SOFTWARE SYSTEMS Managing Complexity Through Structure
24
pose. For example, a notification module may handle SMS and email messages for many parts
of the system.
Modularity reduces confusion. If notification rules are scattered across many screens, changing
a message format becomes difficult. If messages are handled in one clear module, changes are
easier.
® NOTE
A module is not just a folder. It is a responsibility. A folder with mixed responsibilities is
still confusing, even if it looks organized.
Many systems are organized in layers. A layer groups responsibilities at a certain level. A com‐
mon simple structure includes presentation, application logic, and data.
Presentation Layer
The presentation layer is what users see and interact with. It includes screens, forms, buttons,
menus, and messages. Its job is to make interaction clear and usable.
For example, in a registration system, the presentation layer displays available course units and
allows a student to select them. It should show helpful messages, prevent obvious mistakes,
and guide the user through the process.
The application logic layer handles rules and decisions. It decides whether a student is allowed
to register, whether a timetable clash exists, whether fees are cleared, and whether approval
is required.
This layer is important because business rules should not be hidden only inside screen design.
If the same rule is needed by a web page, a mobile app, and an administrator report, it should
be handled consistently.
1 UNDERSTANDING SOFTWARE SYSTEMS Managing Complexity Through Structure
25
Data Layer
The data layer stores and retrieves information. It may involve databases, files, or external data
services. Its responsibility is to manage data safely and reliably.
In a student system, the data layer may store student profiles, course units, registrations, pay‐
ments, and approval records. Good data design helps avoid duplicates and contradictions.
Presentation What does the user see and do? Student selects course units on a
form.
Application logic What rules must be followed? System checks prerequisites and
clashes.
Data What information is stored? Registration record is saved in the
database.
An interface is a clear way for one part of a system to interact with another. It describes what
can be requested and what result is expected, without requiring the caller to know every inter‐
nal detail. Clear boundaries
help
Other parts of the system can use these actions without knowing exactly how the payment
provider communicates with banks or mobile money services. This makes the system easier to
change. If the payment provider changes, the team may update the payment component while
keeping the rest of the system mostly stable.
Interfaces are also important between people. A product owner and developers need clear
ways of agreeing on backlog items. Developers and testers need clear acceptance criteria.
Users and support staff need clear ways to report problems.
1 UNDERSTANDING SOFTWARE SYSTEMS Why Software Needs Systematic Development
26
Hiding internal details means allowing people or parts of the system to use something without
needing to know how everything works inside. This is useful because it reduces the amount of
information each person must handle at once.
Encapsulation
Encapsulation means keeping data and behavior together and controlling how other parts ac‐
cess them. In simple terms, a part of the system protects its own internal details and provides
approved ways to use it.
For example, a bank account component should not allow any other part of the system to
directly change the balance without checks. Instead, it may provide operations such as deposit,
withdraw, and transfer. These operations can enforce rules.
Information Hiding
Information hiding means hiding design details that other parts do not need to know. This
helps reduce the effect of change. If a report only needs final marks, it should not need to
know exactly how coursework and exam marks are stored internally.
Information hiding is also a learning principle. A first‐year student does not need to understand
every detail of a database engine before using a database responsibly. The student needs the
right level of understanding for the task.
CHECKPOINT
In a school fees system, what internal details should be hidden from an ordinary student
user? What information should the student be allowed to see?
Informal development means building software without enough planning, communication, struc‐
ture, testing, or documentation. It may feel fast at the beginning, but it often creates problems
1 UNDERSTANDING SOFTWARE SYSTEMS Why Software Needs Systematic Development
27
later.
Unclear Requirements
Unclear requirements occur when the team does not properly understand what is needed. For
example, a manager may say, “Build a report for student performance.” This is too general.
Which students? Which semester? Which course units? Should retakes be included? Who can
view the report? What format is needed?
If the team codes immediately, it may build the wrong report. Clarifying requirements early
saves time.
Poor design decisions may not be obvious at first. A quick shortcut can work for one feature but
make future changes difficult. For example, copying the same fee calculation code into many
screens may be fast today. Later, when fee rules change, the team must find and update every
copy. One missed copy creates inconsistent results.
Hidden Defects
A defect is a problem in the software that can cause incorrect behavior. Hidden defects remain
unnoticed until certain conditions occur. A system may work during a demonstration but fail
when used by many people or with unusual data.
Systematic testing helps reveal defects earlier. It does not guarantee perfection, but it reduces
risk.
Difficult Maintenance
Maintenance means changing software after it has been built. This includes fixing bugs, im‐
proving features, adapting to new rules, and updating technologies.
Informal development often produces software that is hard to maintain. New developers can‐
not understand the code. There is little documentation. Tests are missing. The original devel‐
oper may have left. Every change becomes frightening.
1 UNDERSTANDING SOFTWARE SYSTEMS Why Software Needs Systematic Development
28
Poor Documentation
Documentation helps people understand the system. It does not need to be huge, but it should
be useful. Poor documentation means important knowledge exists only in someone’s memory.
If that person is absent, the team struggles.
Useful documentation may include a short description of features, diagrams, setup instructions,
decisions made, known limitations, and user guides.
Programming is the skill of writing instructions for a computer. Software engineering uses pro‐
gramming plus other practices to deliver dependable software. The movement from program‐
ming to software engineering is a movement from “Can I make it run?” to “Can we build the
From solo work to right thing, in a way that people can use, test, change, and trust?”
teamwork
This course does not reduce the importance of programming. A software engineer still needs
programming ability. But the engineer also needs communication, planning, design thinking,
testing discipline, teamwork, and ethical awareness.
In a sprint‐based project, this difference becomes visible. A team does not simply assign ran‐
dom coding tasks. It discusses user needs, breaks work into backlog items, estimates effort,
agrees on sprint goals, builds small increments, tests them, reviews progress, and learns from
feedback.
This is not advanced project management. It is simply a practical way to focus the team
on a small useful result.
1 UNDERSTANDING SOFTWARE SYSTEMS Why Software Needs Systematic Development
29
Systematic development does not mean slow development. It means purposeful development.
A team can still move quickly, but it moves with better understanding and control.
For example, showing a simple registration screen to students may reveal that course codes
alone are confusing. Students may need course names, lecturers, credit units, and timetable
information. This feedback improves the product.
Improved Planning
Planning helps teams decide what to do first. Not every feature has the same importance. A
product backlog helps the team prioritize. Sprint planning helps the team choose a realistic
amount of work for a short period.
Good planning also reveals dependencies. If online payment is not ready, the team may decide
to first build registration viewing and later add payment‐based clearance.
Better Design
Design helps the team organize the system before and during coding. Good design reduces
duplication, clarifies responsibilities, and supports change.
Design does not always require large documents. A small diagram, a clear list of components,
or a short decision note can be enough for a small team. The important thing is shared under‐
standing.
Reduced Errors
Systematic development reduces errors through reviews, tests, checklists, and clear acceptance
criteria. For example, before completing a backlog item, the team may check:
1 UNDERSTANDING SOFTWARE SYSTEMS Why Software Needs Systematic Development
30
Easier Maintenance
Software that is organized, tested, and documented is easier to maintain. Future developers
can understand it faster. Bugs can be fixed with less fear. New features can be added with fewer
surprises.
Maintenance is especially important in organizations where software may outlive the original
development team. The system should not depend entirely on one person’s memory.
Improved Teamwork
Systematic development supports teamwork by making work visible. Backlog boards, sprint
Visible work is meetings, code reviews, test plans, and documentation help team members coordinate.
manageable
In a daily stand‐up meeting, each person briefly shares what they did, what they plan to do,
and what is blocking them. The meeting is not meant for long speeches. It helps the team
notice problems early. For example, a developer may say, “I cannot finish the registration form
because the course data format is still unclear.” The product owner can help clarify.
Higher Reliability
Reliability means the system works correctly and consistently over time. Systematic develop‐
ment improves reliability by encouraging careful requirements, good design, testing, monitor‐
ing, and maintenance.
No process can remove all risk. But a disciplined team is more likely to notice risks early and
respond responsibly.
This chapter has introduced the foundation: software systems are connected, practical, human,
and changing. Later chapters will build on this foundation.
1 UNDERSTANDING SOFTWARE SYSTEMS Running Case Study: CampusConnect
31
You will learn how teams work together, how requirements are discovered and organized, how
development processes guide work, how agile practices such as sprints and product backlogs
support learning, how software is designed, how testing improves quality, and how software is
maintained after release.
As you continue, keep returning to the central question: how does this idea help people build
software that is useful, dependable, understandable, and changeable?
To make the ideas in this chapter practical, we shall use a running case study called Campus‐
Connect. CampusConnect is a proposed mobile and web system for first‐year students at a
university. Its purpose is to help students settle into university life. Case study thread
The first idea sounds simple: “Build an app for new students.” But that statement is too broad.
A software team must discover what students actually need. During early conversations, stu‐
dents mention several problems:
The team cannot build everything at once. It creates a product backlog. Early backlog items
include:
The team plans a two‐week sprint. Since the app is new, the product owner chooses one useful
goal: students should be able to view orientation announcements. This is small but valuable.
During the sprint, the team learns that some announcements are urgent and should appear at
the top. Some announcements expire after a date. Some students want attachments, such as
PDF orientation schedules. The product owner decides that urgent announcements and expiry
dates are needed now, but attachments can wait.
This is a simple example of software engineering in practice. The team starts with a goal, builds
a small part, learns from details, and adjusts the backlog.
• It begins as an idea but becomes a system when it involves users, administrators, data,
screens, and rules.
• It requires requirements because “announcements” can mean many things.
• It requires design because the team must decide how announcements are stored and
displayed.
• It requires testing because students may use different phones and network conditions.
• It raises ethical concerns because student information and communication must be han‐
dled responsibly.
• It will grow over time as new needs appear.
CHECKPOINT
Write two acceptance criteria for the backlog item: “Student can view orientation an‐
nouncements.” Keep them simple and testable.
1 UNDERSTANDING SOFTWARE SYSTEMS Chapter Summary
33
Possible answers include: announcements are shown from newest to oldest; expired announce‐
ments are not shown to students; urgent announcements appear before normal announce‐
ments; tapping an announcement opens its full details.
Software development is not only about writing code. Code is essential, but real software ex‐
ists inside systems of people, data, rules, organizations, devices, and time. A program gives a
computer instructions. A software system supports a real activity through connected parts.
Software must be engineered because real systems need planning, requirements, design, test‐
ing, communication, and maintenance. A system that works on one developer’s laptop may still
fail when many users, real data, weak networks, changing rules, or security concerns appear.
Software systems become complex because they grow in size, connect many components, serve
different users, handle large amounts of data, and change over time. Small changes can have
large effects when parts are connected. Teams manage this complexity through decomposition,
modularity, layers, clear interfaces, encapsulation, and information hiding.
Systematic development helps teams understand user needs, plan work, design better struc‐
tures, reduce errors, maintain software, collaborate, and improve reliability. Practical activities
such as product backlogs, sprint planning, daily stand‐ups, reviews, and acceptance criteria are
not just management rituals. They are ways of making complex work visible and manageable.
n KEY TAKEAWAYS
• A program is a set of instructions; a software system is a connected solution used
in real life.
• Real software includes technical parts and human parts.
• Good developers think about users, data, rules, risks, and change.
• Complexity grows through components, connections, scale, users, and time.
• Structure helps teams understand and change systems safely.
• Systematic development makes software work more visible, testable, and depend‐
able.
1. A system can be technically correct but still fail in real life. Discuss this statement using
an example.
2. Why should software teams avoid building a large system for months without showing
users any working part?
3. Think about a mobile money system. What technical parts and human parts are involved?
4. In what ways can poor software design affect future maintenance?
5. Why is trust important in software systems used by students, patients, or customers?
Choose one system that students commonly use, such as a learning platform, registration por‐
tal, mobile money app, library system, or food ordering app. Prepare a one‐page analysis with
the following:
In groups of four or five, imagine you are building CampusConnect. Your product owner gives
this goal: “Help first‐year students find important campus offices.”
After the group work, compare your answers with another group. Notice that different teams
may choose different first steps. The important question is whether the chosen work is clear,
useful, and realistic.
CHAPTER REVIEW
• Software systems combine programs, data, 1. How is a software system different from a
users, rules, interfaces, and organizational program?
processes. 2. Why do user needs matter?
• Real systems require engineering discipline 3. What makes software complex as it grows?
because they must be useful, dependable, 4. How do product backlogs and sprints help
secure, and maintainable. teams manage work?
• Complexity increases with components,
connections, users, data, and time.
• Teams manage complexity through struc‐
ture and systematic development prac‐
tices.
REFERENCE
Program
Software System
Stakeholder
A prioritized list of work that may be done on a soft‐
ware product.
Requirement
A short fixed period in which a team works toward
a clear goal and produces a usable increment.
Design
Simple conditions used to decide whether a back‐
36
1 UNDERSTANDING SOFTWARE SYSTEMS Review Questions
37
Component
COMING UP NEXT
2
Planning and Choosing How to
Build
œ LEARNING OBJECTIVES
By the end of this chapter, you should be able to:
39
2 PLANNING AND CHOOSING HOW TO BUILD Introduction to Planning a Software System
40
• Prepare a basic project plan with tasks, responsibilities, risks, and communication
points.
SOFTWARE PROJECT OFTEN STARTS with excitement. Someone says, “Let us build an
A app,” or “We need a system,” or “This work should be automated.” These statements
may sound clear, but they are only the beginning. Before building, a team must un‐
derstand what problem is being solved, who is affected, what is possible, what is risky, and
Plan before coding what should be done first.
Planning does not mean delaying the project with unnecessary paperwork. Good planning
helps a team avoid building the wrong thing quickly. It helps the team ask practical questions
early, when mistakes are cheaper to correct.
Imagine a student group is asked to build a hostel booking system. If they begin coding imme‐
diately, they may create a form where students choose rooms. Later, they may discover that
hostel allocation depends on year of study, disability needs, payment status, gender, distance
from home, and availability of beds. The first form may be too simple. Some code may need to
be thrown away. A short planning stage could have revealed these rules earlier.
First‐year students sometimes think planning is separate from software development. In real
projects, planning is part of development. The plan helps the team decide what to build, what
not to build, how to organize work, and how to learn from users.
Early project planning has several purposes. It helps the team understand the problem, de‐
fine the scope, check feasibility, identify users, gather requirements, choose a development
2 PLANNING AND CHOOSING HOW TO BUILD Introduction to Planning a Software System
41
These questions are simple, but they are powerful. Many failed projects did not fail because the
team lacked programming ability. They failed because the team misunderstood the problem,
accepted an unclear scope, ignored users, underestimated time, or chose an unsuitable way of
working.
An idea becomes a software project when it is defined clearly enough for a team to work on it.
The idea “build a campus app” is too broad. The project “build a first version of CampusCon‐
nect that allows first‐year students to read orientation announcements and find key offices” is
clearer.
The difference is important. A broad idea can inspire discussion, but a project needs direction.
The team must know which users it is serving, which problem comes first, and what result
would count as success.
2. Identify stakeholders.
3. Understand the current situation.
4. Define the project scope.
5. Check feasibility.
6. Gather and organize requirements.
7. Choose a development approach.
8. Prepare a simple project plan.
These steps do not always happen in a perfect straight line. A team may learn something during
requirements gathering that changes scope. A feasibility study may show that a feature is too
expensive. A prototype may reveal a better way to solve the problem. Good planning allows
learning.
This chapter explains how software teams move from a vague idea to a planned project. We
begin by learning how to understand the problem. We then discuss scope and scope creep.
Next, we study feasibility, requirements, and techniques for gathering information from users.
After that, we compare development approaches and discuss how to choose a suitable one.
Finally, we prepare a basic project plan using practical examples.
Many software projects begin because an existing way of working has problems. The existing
system may be manual, slow, expensive, confusing, insecure, or difficult to monitor. Sometimes
Understand today the existing system is already digital, but it no longer fits the organization.
first
For example, a clinic may record patient appointments in a notebook. This method may work
when the clinic is small. As the clinic grows, staff may struggle to find records quickly. Two
patients may be given the same appointment slot. A patient may not be reminded before the
appointment. Managers may not know how many patients miss visits.
The problem is not simply “the clinic needs software.” The real problems are delays, double
booking, missing reminders, and poor reporting. Good software planning identifies these real
problems.
2 PLANNING AND CHOOSING HOW TO BUILD Understanding the Problem to Be Solved
43
These questions lead to better project decisions. A team that understands the current pain can
choose features that matter.
Not every project begins with a serious problem. Sometimes a project begins because there is
an opportunity to improve service, reduce cost, reach more users, or make work easier.
A university may already have a working registration system, but it may want to add self‐service
registration confirmation so students stop queueing at the department office. A shop may
already record sales, but it may want better stock alerts. A local restaurant may already take
phone orders, but it may want an online menu to reduce repeated questions.
An opportunity should still be examined carefully. “We can build an app” is not enough. The
team should ask what benefit the app will bring. Will it reduce waiting time? Increase accuracy?
Improve communication? Save money? Give better reports? Support more users?
CHECKPOINT
Think about a service at your university that works but could be improved. What is the
improvement opportunity? Who would benefit from it?
Before proposing a new system, the team should understand the current situation as it really
is, not as people wish it was. This means studying the process, the users, and the challenges
together.
A process is a sequence of steps used to complete work. For course registration, the process
may begin when a student receives admission and may end when the student downloads a
2 PLANNING AND CHOOSING HOW TO BUILD Understanding the Problem to Be Solved
44
confirmation form. Between those points, the student may pay fees, log into a portal, select
course units, submit registration, wait for department approval, correct mistakes, and return
for final confirmation. If the team only studies the screen where course units are selected, it
may miss payment clearance, approval, correction, and reporting.
The team must also identify the people involved in the current situation. Students, lecturers,
administrators, accountants, managers, customers, patients, or support staff may all experi‐
ence the same process differently. In a registration process, students may complain that in‐
structions are confusing. Department administrators may complain that students submit wrong
combinations of course units. Finance staff may complain that payment information arrives
late. Each view reveals part of the system.
Finally, the team should record current challenges in precise language. Avoid vague statements
such as “the system is bad” or “users are confused.” Instead, write statements that can guide
action:
Clear problem statements make later requirements stronger. They also help the team avoid
solving symptoms while ignoring the real cause.
After understanding the current situation, the team should define the need. A good need state‐
ment explains the problem, who is affected, and why improvement matters.
For example:
The clinic needs an appointment management system because reception staff cur‐
rently use a notebook, which causes double bookings, missing reminders, and dif‐
ficulty preparing weekly patient attendance reports.
This need statement is better than “build clinic software.” It identifies the users, the current
method, the problems, and the reason for change.
For student projects, a need statement can be short. What matters is that it is specific enough
to guide the project.
2 PLANNING AND CHOOSING HOW TO BUILD Defining the Project Scope
45
Ď TIP
If your need statement could fit almost any organization, it is probably too general. Add
the users, current problem, and expected improvement.
Suppose a small hospital uses paper files for patient visits. Doctors write notes by hand. The
pharmacy receives handwritten prescriptions. Laboratory requests are carried by patients.
Billing staff calculate charges from paper forms.
At first, the team may say, “The hospital needs a management system.” But this is too large.
A hospital management system can include patient registration, appointments, consultation
notes, laboratory requests, pharmacy, billing, insurance, reports, stock, staff scheduling, and
more.
The team studies the current situation and finds three urgent problems:
The hospital needs a first version of a patient visit system that records patient reg‐
istration, consultation notes, prescriptions, and daily attendance reports so that
staff can reduce missing files, improve pharmacy clarity, and prepare basic man‐
agement reports.
This does not solve every hospital problem. It creates a realistic starting point.
Project scope describes what is included in a project and what is not included. It defines the
boundaries of the work. Scope helps the team, users, and managers share expectations. Scope sets
boundaries
2 PLANNING AND CHOOSING HOW TO BUILD Defining the Project Scope
46
For example, if a student team is building CampusConnect, the scope for the first version may
include orientation announcements, office search, and registration steps. It may not include
course registration, online payment, chat with lecturers, or hostel booking.
Scope does not mean the excluded features are bad. It means they are not part of this version.
Clear scope protects the project from becoming too large to finish.
Unclear scope causes confusion. Users may expect more than the team plans to build. Devel‐
opers may spend time on low‐priority features. Testers may not know what to check. Managers
may think the project is failing because they expected a larger system.
In agile work, scope is often managed through a product backlog. The backlog may contain
many possible items, but the team still chooses what is included in a sprint or release.
The included scope should describe the main features, users, data, and processes covered by
the project. It should be clear enough for the team to plan and for stakeholders to understand.
• Student login.
• Viewing available course units.
• Selecting course units.
• Checking timetable clashes.
• Submitting registration for approval.
• Administrator approval.
• Downloading registration confirmation.
2 PLANNING AND CHOOSING HOW TO BUILD Defining the Project Scope
47
Excluding work is just as important as including work. A project plan should clearly state what
will not be handled in the current version.
For the same registration system, the first version may exclude:
This protects the team from surprise expectations. If someone later asks, “Can we also add
hostel booking?” the team can say, “That is outside the current scope. We can add it to the
backlog for future discussion.”
Scope creep happens when project work keeps expanding without proper review of time, cost,
risk, and priorities. It often begins with small requests that sound harmless.
For example, a team building an online learning system may be asked to add assignment sub‐
mission. Then someone asks for automatic plagiarism checking. Then video conferencing. Then
parent access. Then mobile notifications. Each request may be useful, but together they may
overwhelm the project.
Scope creep can be caused by unclear original requirements, users discovering needs late, man‐
agers adding requests without removing other work, developers adding interesting features
without approval, poor communication about project boundaries, or lack of a change control
process. In student projects, scope creep often happens because the team wants to impress
the lecturer by adding many features. The result may be many unfinished features instead of a
few reliable ones.
The effects are practical and painful. Scope creep can cause missed deadlines, poor quality,
team stress, incomplete testing, budget increases, and user disappointment. A system with
too many rushed features may be worse than a smaller system that works well.
2 PLANNING AND CHOOSING HOW TO BUILD Feasibility Study
48
This scope statement helps everyone understand the first version. It also gives the team a basis
for requirements, backlog items, and testing.
A feasibility study checks whether a proposed project is possible and sensible before major
effort is spent. It asks whether the project can be done with available technology, money,
Can we do this? people, time, and rules.
2 PLANNING AND CHOOSING HOW TO BUILD Feasibility Study
49
Feasibility does not only mean “Can we code it?” A system may be technically possible but too
expensive. It may be affordable but not accepted by users. It may be useful but illegal because
it mishandles private data. A feasibility study looks at the project from several angles.
The purpose of feasibility study is to support a decision. The decision may be:
For first‐year students, a feasibility study can be simple. It may be one or two pages. What
matters is that the team thinks practically before promising too much.
Technical feasibility asks whether the team has or can obtain the technology needed to build
and run the system. This includes hardware, software, network access, external services, and
technical skills. A library system may need barcode scanners and receipt printers. A mobile app
may need phones for testing. A map‐based campus guide may need a map service. A payment
feature may need access to a payment provider.
The team should be honest about what is available. If no one on a student team has mobile
development experience, building a complex mobile app in four weeks is risky. The team may
choose a web application instead, or it may reduce the first version to a small prototype. This
is not weakness. It is good planning.
Technical feasibility should also check whether the technology fits the users. If most users have
low‐end phones and weak data bundles, a heavy application may be technically impressive but
practically poor. If an office has unreliable internet, the system may need offline forms, saved
drafts, or a simple backup process.
CHECKPOINT
For a campus office locator, what technical questions should the team ask before deciding
to use an online map service?
2 PLANNING AND CHOOSING HOW TO BUILD Feasibility Study
50
Economic feasibility asks whether the project makes financial sense. It compares expected
costs with expected benefits. Costs include development time, tools, training, equipment,
hosting, licenses, SMS charges, payment gateway fees, support, maintenance, and backups.
In a student project, the cost may mostly be time and internet data. In an organization, staff
time and long‐term operation costs can be much larger.
A useful feasibility study separates development costs from operational costs. Development
cost is what it takes to build the system. Operational cost is what it takes to keep it running.
A system may be cheap to build but expensive to operate. For example, an announcement
system that sends SMS messages to every student may be simple to design but costly every
semester.
Benefits may include shorter queues, fewer mistakes, faster reports, better service, increased
sales, reduced paperwork, improved accountability, or greater trust. Not all benefits are easily
converted into money. If a hospital system reduces missing patient files, the value includes
time saved, better care, and reduced stress for staff and patients.
CHECKPOINT
For a campus announcement system, list two possible costs and three possible benefits.
Operational feasibility asks whether the system will work well in the real environment where it
will be used. A system can be technically possible and financially affordable but still fail if users
cannot fit it into daily work.
User acceptance is central. If reception staff at a clinic believe a new appointment system slows
them down during busy mornings, they may return to the paper notebook. If lecturers find an
online marks upload screen confusing, they may delay submitting results. If students do not
trust a registration portal, they may still queue at the department office for confirmation.
Operational feasibility also asks whether the organization is ready. Does it have management
support? Who will train users? Who will answer support questions? Who will correct wrong
data? Is internet reliable? Are policies clear? A system introduced without training, ownership,
or support may become abandoned even if the software itself works.
New software also changes daily work. Some tasks may disappear, some may become more
controlled, and some staff may need new skills. Planning should discuss these effects openly.
People are more likely to accept a system when they understand why it is being introduced and
2 PLANNING AND CHOOSING HOW TO BUILD Feasibility Study
51
Legal feasibility asks whether the system can be built and operated within laws, regulations,
contracts, and licenses. Some systems must follow rules about finance, education, health, em‐
ployment, or government reporting. A hospital system must protect patient information. A
banking system must follow financial regulations. A school system must handle student records
responsibly.
Privacy and data protection are important even in class projects. Teams should avoid collecting
data they do not need. If a prototype does not require real student phone numbers, use sam‐
ple data. If a project stores names, registration numbers, marks, medical details, or payment
information, the team should ask who can see the data, where it is stored, how long it is kept,
and what happens if it is exposed.
Legal feasibility also includes software licensing. A team should not copy paid software, images,
fonts, or code without permission. Open‐source software can be useful, but its license should
be respected.
Schedule feasibility asks whether the project can be completed within the available time. Dead‐
lines may come from academic calendars, business needs, legal dates, funding periods, or pub‐
lic events. A registration system must be ready before registration begins. A ticketing system
must be ready before ticket sales open.
The team should not look only at the final deadline. It should ask whether users will be available
for interviews, whether developers have enough working time, whether devices and data can
be obtained early, and whether testing can happen before demonstration day. A team may
have three months on paper, but if key users are unavailable until the last week, progress will
suffer.
Time constraints should shape scope. If a student team has four weeks, it should choose a small
set of features and build them well. A realistic plan is better than a large promise.
2 PLANNING AND CHOOSING HOW TO BUILD Understanding User Requirements
52
A department wants an online learning system for course notes, announcements, assignments,
and quizzes. The team studies feasibility:
• Technical: The department has internet and students have phones, but some students
have weak data access.
• Economic: Hosting is affordable, but SMS reminders would cost money.
• Operational: Lecturers are willing to upload notes, but need training.
• Legal: Student data and grades must be protected.
• Schedule: The first version must be ready before the next semester.
The team recommends a first version with notes, announcements, and assignment submission.
Quizzes and SMS reminders are placed in a later release. This is a practical feasibility decision.
Requirements describe what a system should do and the conditions it should satisfy. Require‐
Requirements ments guide design, coding, testing, and acceptance.
guide work
A requirement should help the team understand user needs. For example, “students can view
available course units for their programme and year of study” is clearer than “make course
page.”
Requirements are not only about screens. They may include rules, data, performance, security,
usability, and reporting.
Requirements are important because they reduce misunderstanding. They help the team and
stakeholders agree on what is being built. They also help testers know what to check.
If requirements are weak, the team may build software that works technically but does not
solve the right problem. For example, a team may build a beautiful complaint form but forget
that complaints need assignment, tracking, response deadlines, and reports.
2 PLANNING AND CHOOSING HOW TO BUILD Understanding User Requirements
53
Requirements come from stakeholders. A good team listens to more than one voice.
End users directly use the system, so they understand daily tasks and frustrations. In a library
system, end users include students who borrow books and librarians who manage borrowing,
returns, and overdue records. Managers may not use every screen, but they care about reports,
control, policy, performance, and cost. They often define organizational goals.
System analysts help study the problem, organize requirements, and communicate between
users and technical team members. Developers help judge technical possibilities and risks,
but they should listen carefully before proposing solutions. External stakeholders may include
regulators, payment providers, parents, auditors, suppliers, or partner organizations. They may
affect requirements even if they do not use the system daily.
In agile projects, requirements may be written as backlog items and refined over time. In more
formal projects, requirements may be written in a document before design begins. In both
cases, the team needs shared understanding.
2 PLANNING AND CHOOSING HOW TO BUILD Techniques for Gathering Requirements
54
Misunderstanding happens when the team hears words but misses meaning. A user may ask
for “reports,” but the team must know which reports, for whom, in what format, and how often.
Incomplete features happen when the team builds only part of a workflow. For example, al‐
lowing students to submit registration is incomplete if administrators cannot approve or reject
it.
Poor requirements often lead to rework. Rework means doing work again because the first
version was wrong or incomplete. Rework costs time and money.
Users become dissatisfied when the system does not match their needs. They may avoid using
it or create their own manual workarounds.
These problems are connected. If user needs are misunderstood, features are likely to be in‐
complete. If features are incomplete, the team must redo work. If users wait too long for a
useful system, trust is lost. This is why requirements work is not a formality. It protects the
project from expensive confusion.
Requirements gathering is the process of learning what the system should do, why it matters,
who will use it, and what limits must be respected. A beginner mistake is to use only one
technique and treat the result as the full truth. In real projects, one technique rarely shows the
Use more than one whole picture.
lens
Interviews may reveal deep stories, but only from a few people. Questionnaires may reach
many users, but they may not explain the reasons behind answers. Observation may reveal real
work, but users may behave differently when watched. Documents may show official rules, but
they may not show how work is actually done. Workshops may create shared understanding,
but some voices may dominate. Prototypes may help users react to a visible idea, but users
may mistake the prototype for the finished system.
Good teams combine techniques. For example, when planning a university registration sys‐
tem, the team may interview the registrar, observe students during registration week, study
existing registration forms, send a questionnaire to students, run a workshop with department
2 PLANNING AND CHOOSING HOW TO BUILD Techniques for Gathering Requirements
55
administrators, and build a prototype screen for feedback. Each method adds a different kind
of evidence.
Í Requirement evidence
A useful requirement is stronger when it is supported by more than one source. If stu‐
dents complain about confusing course selection, administrators report many correction
requests, and observation shows students asking for help at the same step, the team has
stronger evidence than if only one person mentioned the problem.
An interview is a planned conversation with a stakeholder. It is useful when the team needs
depth: rules, reasons, exceptions, frustrations, priorities, and stories about what usually goes
wrong. Ask, then listen
An interview should not feel like an interrogation. The aim is to learn how the stakeholder
thinks about the work. A registrar may explain why certain students cannot register until fees
are cleared. A cashier may explain what happens when a mobile money payment is delayed.
A lecturer may explain why assignment deadlines sometimes need extensions. These details
may never appear in a simple feature list.
Good interviewers prepare questions, but they also listen for unexpected answers. If an admin‐
istrator says, “That only happens for repeating students,” the interviewer should pause and
ask, “What is different about repeating students?” Often, the most important requirements
are hidden in exceptions.
Interviews have limits. One stakeholder may not know the whole process. A manager may
describe official work, while frontline staff know the practical shortcuts used on busy days. A
user may forget routine steps because they have become automatic. For this reason, interview
notes should be checked against other sources.
2 PLANNING AND CHOOSING HOW TO BUILD Techniques for Gathering Requirements
56
Ď TIP
Do not ask only, “What features do you want?” Also ask, “What problem are you trying
to solve?” Users often suggest a solution before fully explaining the need.
A questionnaire is a set of written questions answered by many people. It is useful when the
team needs broad feedback from a large group, such as many students using a learning platform
or many customers using a delivery service.
Questionnaires work best when the team already understands the topic enough to ask focused
questions. If the team knows nothing about the problem, interviews and observation should
come first. Otherwise, the questionnaire may ask the wrong questions and produce neat but
misleading numbers.
For example, a team improving a learning platform may ask 200 students about assignment
submission. A weak question would be:
This is too broad. A student may like the notes but dislike assignment submission. Better ques‐
tions are more specific:
Questionnaires can collect numbers that help planning. If 75 percent of students use phones,
mobile‐friendly design becomes important. If many students report poor internet, the team
may reduce file size or improve upload recovery. Numbers help the team avoid designing only
for the loudest users.
However, questionnaires also have weaknesses. People may misunderstand questions. Some
may answer quickly without thinking. Closed questions can hide important explanations. To
reduce this problem, include a small number of open‐ended questions such as, “Describe one
problem you faced when submitting an assignment.” Keep the questionnaire short enough that
users will actually complete it.
2 PLANNING AND CHOOSING HOW TO BUILD Techniques for Gathering Requirements
57
CHECKPOINT
Write three questionnaire questions for students who use a campus food ordering app.
Make each question specific enough to guide a design decision.
Observation means watching users perform their work. It is valuable because what people say
they do and what they actually do can differ. This does not mean users are dishonest. It means
real work contains small steps, interruptions, and shortcuts that people forget to mention.
Imagine a team is building a small shop inventory system. In an interview, the shop attendant
says, “When stock arrives, I record it in the book.” During observation, the team sees more
detail. The attendant first checks the supplier invoice, counts items, separates damaged goods,
calls the owner if prices changed, writes quantities in a notebook, and later sends a photo of
the page through a messaging app. A simple “record stock” requirement is no longer enough.
Observation should be done respectfully. In sensitive settings such as clinics, finance offices, or
student records offices, permission is required and private information must be protected. The
observer should avoid blocking work or embarrassing users. The aim is to understand work,
not to judge people.
Observation has limits. Users may act differently when watched. Some events happen rarely
2 PLANNING AND CHOOSING HOW TO BUILD Techniques for Gathering Requirements
58
and may not occur during the observation period. Observation also takes time. It should there‐
fore be combined with interviews, documents, and user feedback.
Document analysis means studying forms, reports, policies, manuals, spreadsheets, emails,
registers, and other existing records. Documents are useful because they show the information
an organization already collects and the rules it claims to follow.
For example, a student registration form may reveal required fields such as registration number,
programme, year of study, course code, credit units, and student signature. A department
report may reveal that administrators need totals by programme and year. A policy document
may reveal that registration closes two weeks after semester start. These details can become
requirements.
But documents are not always the full truth. A procedure may say that every form is approved
within two days, while staff know it often takes a week. A spreadsheet may contain columns
nobody uses anymore. A report may exist only because a former manager requested it years
ago. The team should ask users whether each document still reflects real work.
Application form Data fields and required attach‐ Are all fields still needed?
ments
Monthly report Management information Who uses this report and why?
needs
Policy document Official rules and deadlines Are there exceptions in prac‐
tice?
Complaint register Common problems and re‐ Which complaints repeat often?
sponse times
Spreadsheet tracker Current workaround and calcu‐ Which formulas or columns are
lations critical?
2 PLANNING AND CHOOSING HOW TO BUILD Techniques for Gathering Requirements
59
A workshop is a structured group session where stakeholders discuss needs together. Work‐
shops are useful when a process crosses several roles or departments. They help people hear
each other’s concerns and agree on priorities.
A good workshop needs a clear agenda. Without structure, the loudest person may dominate.
A simple workshop plan may include:
Workshops are especially useful for resolving conflicting needs. For example, students may
want to edit registration many times, but administrators may need a final submission deadline.
The workshop can lead to a balanced requirement: students may edit before submission, but
changes after approval require department permission.
Á WARNING
A workshop is not successful just because many people attended. It is successful when
it produces clearer decisions, agreed priorities, or well‐defined questions for follow‐up.
Suppose students are asked, “What should a registration page show?” Some may say, “Just
show the courses.” But when shown a prototype, they may notice missing details: course codes,
full course names, credit units, timetable slots, lecturer names, prerequisites, and whether the
2 PLANNING AND CHOOSING HOW TO BUILD Techniques for Gathering Requirements
60
course is compulsory or elective. The prototype helps users move from general opinions to
concrete feedback.
There are two common ways to use prototypes. A throwaway prototype is built only for learn‐
ing and is discarded. For example, a paper sketch may help the team understand screen layout.
An evolutionary prototype is improved step by step until it becomes part of the final system.
Evolutionary prototypes must be built more carefully because weak prototype code can be‐
come a long‐term problem if reused carelessly.
When using prototypes, the team should explain what the prototype is and what it is not. Users
may think a neat screen means the system is almost finished, even when there is no database,
security, or business logic behind it. The team should say, “This is only a sample screen to check
the flow. We are not yet showing the final design.”
The best technique depends on what the team needs to learn. If the team needs deep rules,
interview knowledgeable stakeholders. If it needs views from many users, use questionnaires.
If it needs to understand real work, observe. If it needs official data and rules, analyze doc‐
uments. If several groups must agree, run a workshop. If requirements are unclear, build a
prototype.
Interviews Detailed explanations and excep‐ One person’s view may be in‐
tions complete
Questionnaires Feedback from many users Questions may be misunder‐
stood
Observation Real workflow and hidden steps Users may behave differently
when watched
Document analysis Existing data, rules, and reports Documents may be outdated
Workshops Agreement across roles Strong voices may dominate
Prototypes Feedback on unclear ideas Users may think the prototype is
final
2 PLANNING AND CHOOSING HOW TO BUILD Types of Requirements
61
CHECKPOINT
For a hostel maintenance request system, choose three requirement gathering tech‐
niques and explain what each one would help you learn.
Functional requirements describe what the system should do. They are about functions, ac‐
tions, services, and behavior. A functional requirement usually describes an action that a user
or another system can perform. What the system
does
A weak functional requirement is vague: “the system should manage registration.” A stronger
functional requirement is specific: “the system shall allow a student to select eligible course
units and submit them for department approval.” The stronger version tells the team what
action is expected and who performs it.
In a banking system, functional requirements may include checking balance, transferring funds,
viewing transaction history, changing PIN, and generating statements. In a clinic system, they
may include registering a patient, booking an appointment, recording consultation notes, send‐
ing prescriptions to pharmacy, and preparing daily attendance reports.
Ď TIP
When writing functional requirements, include the actor, the action, and the purpose
when possible. “Administrator can approve submitted registration so that official class
lists are accurate” is clearer than “approval feature.”
2 PLANNING AND CHOOSING HOW TO BUILD Types of Requirements
62
Non‐functional requirements describe qualities or conditions of the system. They are not
How well it works about one specific function, but about how well the system should work.
Beginners sometimes ignore non‐functional requirements because they do not look like visible
features. This is dangerous. A system may have all required features and still fail because it is
too slow, insecure, unreliable, confusing, or hard to change.
Performance How fast or how much load? Registration page loads within
three seconds during normal use.
Security Who is allowed to do what? Only authorized staff can approve
registration.
Reliability Can users depend on it? A submitted record is not lost if in‐
ternet disconnects.
Usability Can users understand it? First‐year students can find regis‐
tration steps without training.
Maintainability Can it be changed later? Administrators can update course
lists without changing code.
Non‐functional requirements should be testable where possible. “The system should be fast”
is weak because different people will interpret “fast” differently. “The course list should load
within three seconds for 500 active users” is stronger because it can be checked.
Main concern What the system does How well the system works
Example Student submits registration Submission completes within
five seconds
Testing Check the feature works Check speed, security, usabil‐
ity, reliability
Impact Often visible as a feature Often affects many features
A development approach is a way of organizing how software work is done. It guides how the
team moves through requirements, design, coding, testing, delivery, and feedback. Choose how to
work
Different projects need different approaches. A small student prototype is not managed the
same way as a national tax system. A project with stable legal rules may use more upfront
planning. A project with unclear user needs may need prototypes and frequent feedback.
2 PLANNING AND CHOOSING HOW TO BUILD Introducing Development Approaches
64
Different approaches exist because projects differ in size, risk, uncertainty, user involvement,
deadlines, and team experience. No single approach is best for every project.
The important question is not “Which model is fashionable?” The important question is “Which
approach fits this situation?”
When requirements are clear and stable, a more sequential approach may work. When require‐
ments are unclear or likely to change, iterative, incremental, prototyping, or agile approaches
may be better.
For example, building software for a well‐defined examination grading rule may allow careful
upfront requirements. Building a new student engagement app may require frequent feedback
because users may not know exactly what they want until they see examples.
Several factors influence the choice of development approach. Project size matters because
large projects need more coordination, documentation, and risk control, while small projects
can be more flexible. Requirement stability matters because stable requirements support more
upfront planning, while changing requirements need feedback cycles.
User involvement is also important. If users are available often, agile or prototyping can work
well because the team can show work and learn quickly. If users are rarely available, the team
may need more formal requirement approval before building. Risk matters too. A high‐risk
payment system, hospital system, or safety‐related system needs careful analysis, testing, and
decision points.
Time, budget, and team experience shape the choice as well. Short time and limited budget
require careful scope control. An inexperienced team should avoid overly complex approaches
and risky technology. Clear roles, simple planning, and frequent feedback help beginner teams
more than complicated project management rituals.
CHECKPOINT
A student team has six weeks, unclear requirements, and access to users every Friday.
Which approach would you recommend and why?
2 PLANNING AND CHOOSING HOW TO BUILD Common Development Models
65
The waterfall model organizes work in sequential phases, commonly requirements, design,
implementation, testing, deployment, and maintenance. The basic idea is that the team un‐
derstands requirements first, designs the solution, builds it, tests it, and then delivers it. Wa‐
terfall can be useful when requirements are stable, the problem is well understood, and formal
documentation is important.
For example, if a government office needs a report that follows a fixed legal format, a sequen‐
tial approach may work because the rules are known and unlikely to change every week. The
team can document the requirements carefully, design the report, build it, and test against the
approved format.
The weakness of waterfall appears when users discover needs late. If feedback comes only
near the end, mistakes may be expensive. Imagine building a registration system for months
and discovering during final testing that repeating students follow different rules. The team
may need major rework.
The V‐model is also sequential, but it emphasizes testing from the beginning. Each develop‐
ment stage has a related testing stage. Requirements are connected to acceptance testing,
system design to system testing, and detailed design to integration and unit testing. The V‐
model is useful when correctness and verification are important, such as medical, financial, or
safety‐related systems.
The iterative model builds software through repeated cycles. The team builds something, re‐
views it, learns from it, and improves it. Iteration is useful when the team expects learning. For
example, CampusConnect may begin with a simple announcement screen. After students use
it, the team may add urgent labels, expiry dates, search, and category filters.
The incremental model delivers the system in useful parts called increments. Instead of waiting
for the whole system, users receive value earlier. A registration system may first deliver course
viewing, then registration submission, then approval, then confirmation download. Each incre‐
ment should be tested and should fit the larger system.
2 PLANNING AND CHOOSING HOW TO BUILD Common Development Models
66
The prototyping model uses early samples to learn requirements. A prototype may be thrown
away after learning, or it may evolve into the final system. Prototyping is useful when users are
unsure what they need. Its danger is that users may see a neat screen and assume the system is
almost complete, even though the database, security, error handling, and testing are not done.
The spiral model organizes development around repeated cycles with strong attention to risk.
Each cycle considers objectives, risks, development, and evaluation. This model is useful when
risk is high, such as when the system handles large amounts of money, private health records,
or unfamiliar technology.
For example, before building a hospital records system, the team may first study privacy risk,
then test whether staff can use tablets during consultations, then prototype patient search,
then evaluate data backup. The point is to address serious risks early instead of discovering
them after the system is nearly complete.
Rapid Application Development, often called RAD, focuses on fast delivery using user involve‐
ment, tools, and reusable components. It can work well for business applications with clear
screens and moderate risk, such as internal forms, dashboards, and simple workflow systems.
RAD is less suitable when the system needs deep safety analysis, complex algorithms, or strict
legal verification.
Agile development values short cycles, working software, user feedback, team collaboration,
Feedback drives and response to change.
agile
Agile teams commonly work with a product backlog, sprint planning, daily coordination, sprint
reviews, and retrospectives. A sprint is a short fixed period, such as one or two weeks, where
the team works toward a sprint goal. At the end of the sprint, the team shows completed work
and uses feedback to refine future backlog items.
Agile does not mean doing anything at any time. Change is managed through prioritization. If
a new request appears, the team asks whether it is more important than the current backlog
2 PLANNING AND CHOOSING HOW TO BUILD Comparing Development Models
67
Agile is especially helpful when requirements may change, users can give feedback regularly,
and the team can deliver in small pieces. It is not a replacement for thinking. Agile teams still
need planning, testing, design, documentation, and responsible decisions.
Waterfall and V‐model are less flexible because they depend on early agreement. Agile, itera‐
tive, incremental, and prototyping approaches are more flexible because they support learning
during development.
Agile, RAD, and prototyping usually involve users often. Waterfall may involve users heavily at
the beginning and end, but less during coding.
The spiral model is strongest for explicit risk management. V‐model is strong for verification.
Agile reduces some risks through frequent feedback, but high‐risk systems still need careful
controls.
Waterfall and V‐model often use more formal documentation. Agile uses documentation too,
but tries to keep it useful and lightweight.
Incremental, agile, and RAD can deliver useful parts earlier. Waterfall may deliver later because
phases are completed before release.
2 PLANNING AND CHOOSING HOW TO BUILD Choosing a Suitable Development Approach
68
Changing requirements fit agile, iterative, incremental, and prototyping approaches better than
strict waterfall. However, even agile teams must control change through backlog prioritization.
Waterfall Requirements are sta‐ Clear phases Late feedback can hurt
ble
V‐model Testing must be Strong verification Can be rigid
planned early
Iterative Learning is expected Improvement cycles Needs discipline
Incremental Value can be delivered Early delivery Parts must fit together
in parts
Spiral Risk is high Risk analysis Can be complex
Prototyping Requirements are un‐ User feedback Prototype may be mis‐
clear taken for final product
RAD Business app needed Fast components May not suit high‐risk
quickly systems
Agile Change and feedback Adaptability Needs active users and
are expected team discipline
Choosing an approach means matching the way of working to the project situation. The team
should consider requirements, users, risk, deadline, team skills, and organization expectations.
Fit matters
There is no prize for choosing the most popular model. The best choice is the one that helps
the team deliver useful, reliable software under the real conditions of the project.
If requirements are stable and well understood, waterfall or V‐model may be suitable. Examples
include systems based on fixed laws, fixed reporting rules, or well‐known processes. Even then,
the team should still communicate with users and test carefully.
2 PLANNING AND CHOOSING HOW TO BUILD Choosing a Suitable Development Approach
69
High‐risk projects need stronger risk management. A hospital system, payment system, or
safety‐related system should not rely only on informal feedback. Such projects may use a hy‐
brid approach: upfront feasibility and requirements work, risk analysis, incremental delivery,
formal testing, user training, and management checkpoints.
Small student projects often fit a simple agile‐incremental approach. The team can create a
product backlog, choose a small sprint goal, build a working part, test it, and show it for feed‐
back. For a six‐week project, three two‐week sprints may be enough:
Large organizational systems may also use agile ideas, but usually with more structure. They
may need formal approval, procurement rules, security review, data migration plans, user train‐
ing, and support planning. Real organizations often mix practices. The goal is not to follow a
textbook model blindly. The goal is to manage complexity, risk, and learning.
One common mistake is choosing a rigid approach when requirements are unclear. If users are
unsure what they need, a long upfront specification may create false confidence. Prototypes
and feedback are better.
Another mistake is ignoring user involvement. A team that does not involve users may build
software that users reject. User involvement should be planned, not left to chance.
A third mistake is underestimating risk. Security, data loss, legal issues, deadline pressure,
unfamiliar technology, and user resistance can damage a project. Risk should be discussed
early.
Finally, teams sometimes ignore their own experience. Learning is good, but too much new
technology can overwhelm a beginner team. It is better to build a smaller working system with
tools the team can manage than to promise a large system using unfamiliar tools.
2 PLANNING AND CHOOSING HOW TO BUILD Basic Project Planning Activities
70
A simple project plan describes what will be done, when it will be done, who will do it, what
Make work visible resources are needed, and what risks exist.
For a first‐year project, the plan does not need to be complicated. It can include a goal, scope,
backlog items, timeline, roles, risks, and communication plan.
Estimation means predicting the effort, time, and resources needed for the project. Beginners
often underestimate time because they think only about coding. They forget requirements,
design, testing, fixing bugs, meetings, documentation, and demonstrations.
Estimate in small pieces. “Build system” is impossible to estimate well. “Create login screen,”
“write acceptance criteria for registration submission,” or “test course selection with three stu‐
dent records” is easier. Smaller tasks make progress visible.
Cost may include money and effort. In a student project, cost may be time, internet data,
hosting, printing, or transport for user interviews. In organizations, cost includes salaries, li‐
censes, equipment, hosting, training, and support. Resources include people, skills, tools, de‐
vices, data, rooms, internet, and access to users. A team should know what it needs before
promising delivery.
Responsibilities should be clear. A student team may assign roles such as coordinator, require‐
ments lead, developer, tester, and documentation lead. One person can hold more than one
role, but everyone should know who is doing what.
Risks should be listed and watched from the beginning. Examples include:
A risk list should include possible responses. For example, if users are unavailable, the team
may schedule interviews early and prepare questionnaires as backup.
Communication should be planned. The team should decide who needs updates, how often,
and in what format. For a student project, this may include weekly lecturer updates, a task
board, and one feedback session with users.
Monitoring progress means checking whether work is moving as planned. In agile teams, this
may happen through daily stand‐ups, task boards, sprint reviews, and retrospectives. Monitor‐
ing should reveal problems early. If a task is stuck for several days, the team should discuss it
rather than hide it.
This rhythm is simple enough for first‐year students, but it teaches professional habits:
visibility, feedback, and responsibility.
CampusConnect is a proposed system for first‐year students. The idea is to help them settle
into university life by giving them easy access to orientation announcements, campus office
locations, registration steps, and useful contacts. Plan the case
The first idea is broad. The team must turn it into a project.
2 PLANNING AND CHOOSING HOW TO BUILD Running Case Study: CampusConnect Planning
72
The team interviews ten first‐year students and two student leaders. Students report that they
often miss announcements, do not know where offices are, and ask the same questions repeat‐
edly in messaging groups. Student leaders say they spend too much time answering repeated
questions.
The opportunity is to provide one reliable place for important first‐year information.
The first version will not include live chat, hostel booking, course registration, online payment,
or lecturer messaging.
• Technical: A web application is realistic for the team. A native mobile app is too much
for the first version.
• Economic: The project can use free development tools and university hosting for demon‐
stration.
• Operational: Student leaders are willing to help review content.
• Legal: The system will not collect sensitive personal data in the first version.
• Schedule: The team has six weeks, so scope must stay small.
Acceptance criteria:
The team chooses a simple agile‐incremental approach. Requirements may change after stu‐
dents see the first screens, and the team has only six weeks. The team plans three two‐week
sprints:
• Sprint 1: Announcements.
• Sprint 2: Campus office search.
• Sprint 3: Registration steps, testing, and polish.
Planning helps software teams move from vague ideas to realistic projects. A team should
understand the current problem or opportunity before proposing a solution. It should define
scope so everyone knows what is included and what is not included. It should check feasibility
to decide whether the project is technically, economically, operationally, legally, and schedule‐
wise possible.
Requirements guide the team by describing what the system should do and the qualities it
should have. Requirements can be gathered through interviews, questionnaires, observation,
document analysis, workshops, and prototypes. Functional requirements describe system ac‐
tions. Non‐functional requirements describe qualities such as performance, security, usability,
reliability, and maintainability.
Different development approaches exist because projects differ. Waterfall and V‐model are
more sequential. Iterative, incremental, prototyping, RAD, spiral, and agile approaches support
different levels of learning, feedback, speed, and risk management. The best approach is the
one that fits the project situation.
n KEY TAKEAWAYS
• Planning helps teams build the right thing, not just build quickly.
• Scope defines the boundaries of the project.
• Feasibility checks whether the project is practical.
• Requirements connect user needs to design, coding, and testing.
• Development models are tools; choose them based on the project.
• Small student projects often benefit from simple agile and incremental planning.
1. A student team wants to build a complete university management system in six weeks.
What planning advice would you give them?
2. Why can a technically possible project still be a bad idea?
3. How can unclear requirements increase project cost?
4. Compare waterfall and agile using a university registration project.
5. Why should excluded scope be written clearly?
Choose one project idea from the list below or create your own:
CHAPTER REVIEW
Operational Feasibility
The boundary of what a project will and will not
include.
Scope Creep Whether the system can work in the real organiza‐
tion.
Legal Feasibility
Uncontrolled expansion of project work without
proper review.
Schedule Feasibility
A practical check of whether a project can and
should be done.
Requirement
Whether the required technology and skills are
available.
77
2 PLANNING AND CHOOSING HOW TO BUILD Review Questions
78
A requirement describing what the system does. A sequential development model with phases
completed one after another.
Non‐Functional Requirement
Incremental Model
An early sample used to learn from users. An approach based on short cycles, feedback, col‐
laboration, and response to change.
2 PLANNING AND CHOOSING HOW TO BUILD Review Questions
79
COMING UP NEXT
3
Working with Software Teams
œ LEARNING OBJECTIVES
By the end of this chapter, you should be able to:
• Explain why most real software is built by teams rather than by one person working
alone.
• Identify the main people involved in a software project and describe how their
roles differ.
• Describe why communication is central to software quality, speed, and teamwork.
• Explain what a process framework is and why teams use one.
• Distinguish between core development activities and supporting umbrella activi‐
ties.
• Describe basic project management work in a way that fits student and beginner
projects.
• Explain agile ideas in practical language and relate them to Scrum, Kanban, and
80
3 WORKING WITH SOFTWARE TEAMS Introduction to Software Teamwork
81
Extreme Programming.
• Write simple user stories, acceptance criteria, and backlog items.
• Plan and track team work using visible, manageable, first‐year‐friendly methods.
HEN STUDENTS BEGIN PROGRAMMING, they often work alone. One student receives
W an assignment, writes code, tests it, fixes mistakes, and submits it. This is a useful
starting point because it helps build personal confidence. However, most software
used in the real world is too large, too connected, and too important to depend on only one
person. Software is team
work
Software development becomes teamwork because software serves real people in real orga‐
nizations. If many users are involved, then many perspectives matter. Someone has to un‐
derstand the users. Someone has to build the interface. Someone has to structure the data.
Someone has to test. Someone has to track progress. Someone has to answer operational
questions such as where the system will run and who will support it after release. Even in a
small student project, these responsibilities exist, though one student may hold more than one
role.
This does not mean teamwork is automatically easy. A team can be stronger than an individual,
but it can also be slower, more confused, or more frustrated if work is not coordinated. That is
3 WORKING WITH SOFTWARE TEAMS Introduction to Software Teamwork
82
why software engineering pays close attention not only to building software, but also to how
people build it together.
If five students are told to build a campus lost‐and‐found system, they may all start productively
on the first day. One creates login pages. Another designs a database. Another works on the
homepage. Another prepares slides for the lecturer. Another begins a search feature. Activity
is visible, but progress may still be weak. Why? Because activity is not the same as coordination.
Coordination means that people know what problem they are solving, what each person is
responsible for, how pieces connect, what rules guide decisions, and how unfinished work is
reported. Without coordination, teams duplicate effort, work at the wrong priority level, or
discover late that their pieces do not fit together.
These questions may sound ordinary, but they strongly affect project outcomes. A team that
coordinates well can still make technical mistakes, but it usually notices them earlier. A team
that coordinates poorly often discovers problems late, when the cost of correction is higher.
In Chapter 1, you saw that software systems become complex because they involve many users,
rules, interfaces, and changes over time. Teams help manage this complexity by sharing atten‐
tion across the work. Instead of one person trying to hold the entire system in mind alone, a
team distributes responsibility. Share the
complexity
This distribution can happen in several ways. Work can be divided by feature, such as announce‐
ments, payment, or reporting. It can be divided by specialty, such as interface, database, test‐
ing, or deployment. It can also be divided by stage, such as planning, designing, building, and
reviewing. The exact split depends on the project size and the maturity of the team.
Still, dividing work is only the first half of the story. The second half is reconnecting the work.
If one student builds the login page and another builds the user database, they must agree
on how usernames, passwords, and roles are handled. If one person writes user stories and
another writes tests, they must share the same understanding of expected behavior. Teams
reduce complexity when they combine division of labour with shared understanding.
CHECKPOINT
Why might a team still struggle even when tasks have been divided among members?
What else must happen besides division of work?
This chapter explores what it means to work with software teams in a practical and beginner‐
friendly way. We begin with the people involved in software projects and the roles they often
play. We then look at communication, because software work depends heavily on clear expla‐
nation, feedback, and shared meaning.
After that, the chapter introduces process frameworks and project management in simple terms.
The goal is not to overload you with methods, but to help you see why teams need structure.
The chapter then moves into agile ways of working, including Scrum, Kanban, and a brief in‐
troduction to Extreme Programming. Finally, we connect these ideas to user stories, backlogs,
planning, tracking, and a running case study based on a student project team.
A stakeholder is any person or group that is affected by the system or has an interest in its
success. Some stakeholders use the software directly. Others approve it, pay for it, support
it, regulate it, or depend on its reports. Teams that ignore important stakeholders often build
Different people, systems that work in a narrow technical sense but fail in practical use.
different needs
The easiest stakeholders to notice are end users. These are the people who use the system
during ordinary work. In a registration portal, students and academic staff may be end users.
In a small shop inventory system, the cashier and stock manager are end users. End users care
about whether the system helps them do their work with reasonable speed and clarity.
Customers or clients are the people or organizations that request the system, fund it, or define
what success looks like. In some projects the customer and the user are the same. In others
they are different. A university department may request a system that students will use. A
clinic manager may approve a records system that receptionists and nurses use every day. If a
team only listens to the customer, it may miss user frustrations. If it only listens to users, it may
miss management priorities such as compliance, cost, or reporting.
Managers and decision makers are also stakeholders. They care about budget, deadlines, risk,
and alignment with organizational goals. A dean may want quicker registration reporting. A
shop owner may want fewer stock losses. A project sponsor may want evidence that the soft‐
ware improves a service.
Some projects include regulators or external authorities. These may be government bodies,
professional boards, exam councils, or privacy regulators. A health system must respect con‐
fidentiality rules. A payment system may need strong security and record keeping. A student
information system may need to store official records correctly. Students do not need to be‐
come legal experts at this stage, but they should learn early that software does not exist outside
rules and accountability.
The software development team is the group directly responsible for turning needs into work‐
ing software. In a large organization, this team may include many specialized roles. In a student
project, the same small group may share several responsibilities. The names can vary across
organizations, but the underlying work remains similar.
A system analyst helps investigate the problem, gather requirements, and connect business or
user needs to technical work. In a small student team, this may be the member who runs inter‐
views, documents user stories, and clarifies what the system should do before coding begins.
A software developer writes code, tests features, fixes defects, and helps integrate parts into a
working system. Developers are often the most visible role to beginners, but they are not the
only important role. Good developers also communicate clearly, ask practical questions, and
help improve the team process.
A software designer thinks about structure. This includes decisions about screens, compo‐
nents, data flow, module relationships, and overall organization. In beginner projects, design
may be simple sketches, rough diagrams, naming choices, and agreement on how data moves
through the system. Design does not need to be grand to matter. Even agreeing on folder
structure and database tables is a design decision.
A database specialist or database‐focused team member helps model, store, protect, and re‐
trieve data. Many beginner systems fail because the team focuses on screens while treating
the data casually. If the data model is weak, reports become inaccurate, searching becomes
awkward, and future change becomes harder.
A tester or quality‐focused member checks whether the system behaves as expected and helps
the team notice defects early. In small teams, everyone should test, but it still helps to as‐
sign responsibility for organizing test cases, tracking bugs, and making sure completed work is
genuinely checked.
A project manager or team coordinator keeps the work organized. This includes planning meet‐
ings, tracking deadlines, checking blockers, following up on responsibilities, and communicating
status. In agile teams, some of this coordination may be shared, but someone still needs to help
the work move.
Support and operations people matter too. A system may need installation, hosting, backups,
user training, password resets, and ongoing support. In a classroom project these may be light
responsibilities, but students should still learn that finished software needs care after coding.
3 WORKING WITH SOFTWARE TEAMS People Involved in a Software Project
86
Teams do not need rigid hierarchy to work well, but they do need clarity. When roles are un‐
clear, several problems appear. Important tasks may be ignored because everyone assumes
someone else is handling them. Meetings become repetitive because no one knows who can
make decisions. Deadlines slip because progress is not owned.
Clear responsibilities do not mean one person controls everything. They mean each important
area has a visible owner. For example, one student may own the testing checklist, another the
database schema, another the user interview notes, and another the sprint board. Ownership
Make ownership improves accountability without removing teamwork.
visible
It is also normal for responsibilities to overlap. A developer may help test. A team lead may
help code. A person handling requirements may also assist with documentation. What matters
is that overlap should support teamwork, not hide responsibility.
CHECKPOINT
Why is it risky to say, “Everyone is responsible for everything,” without naming clear
owners for specific tasks?
Suppose a five‐member team is building a simple student registration support system for a
class project. One member leads user interviews and keeps the backlog updated. One member
focuses on interface screens. One focuses on the database and data rules. One takes lead on
testing and bug tracking. One coordinates meetings, deadlines, and lecturer communication.
All five still review each other’s work and help solve problems.
This arrangement is not perfect or permanent. It is simply practical. It gives the team a starting
structure. As the project develops, members can rebalance responsibilities based on workload
3 WORKING WITH SOFTWARE TEAMS Communication in Software Projects
87
Software projects succeed or fail partly because of how well people communicate. Code can
be correct in one person’s mind and still fail the project if the understanding behind it is not
shared. Communication is how teams align expectations, reveal uncertainty, coordinate tasks,
ask for help, report blockers, and collect feedback from users. Talk early
Many beginners think communication is secondary to technical skill. In practice, weak commu‐
nication creates technical problems. If a requirement is misunderstood, the wrong feature gets
built. If a blocker is hidden, integration is delayed. If users are not consulted, the team may
polish the wrong screen beautifully.
Communication in software projects is not only about meetings. It also happens through task
boards, commit messages, notes, comments, test cases, interface mock‐ups, diagrams, status
updates, and bug reports. Any artifact that helps people share understanding is part of project
communication.
Users do not normally describe their needs in technical language. They talk about delays, frus‐
tration, repeated work, missing information, and practical goals. A student may say, “I keep
missing deadline notices.” A receptionist may say, “I write the same patient details more than
once.” A lecturer may say, “The current report is always late and hard to read.”
The developer’s job is not merely to listen politely. It is to translate these experiences into
useful system behavior. That means asking follow‐up questions. When does the problem hap‐
pen? Who is affected? What happens now? What would good improvement look like? What
3 WORKING WITH SOFTWARE TEAMS Communication in Software Projects
88
exceptions matter?
If developers speak only in technical terms, users may stop contributing. If users are treated as
though they are interrupting the project, the project becomes blind to real needs. Good teams
create communication that is respectful and practical. They ask users about work, not about
technology choices they are not expected to know.
Team communication is about visibility. Team members should know what work is in progress,
what is blocked, what changed, and what decision has been made. This does not require con‐
stant talking. It requires useful talking.
For example, a daily stand‐up in a sprint is not meant to be a long technical lecture. It is a short
coordination moment. A member might say, “I finished the announcement list page. Today I
am connecting it to the database. I am blocked because I still need the status field added to
the table.” That short statement helps the database‐focused member act quickly.
Teams also communicate through shared tools. A backlog shows planned work. A Kanban
board shows current flow. A shared folder or repository shows artifacts and version history.
Communication becomes easier when the team’s work has visible places to live.
Projects usually need updates beyond the team itself. A lecturer may need to know whether a
student group is on track. A project sponsor may want a short progress report. A department
head may want to know whether a trial version is ready.
These updates should be honest and focused. A weak update is one that says, “We are working
hard.” A stronger update says, “Login and announcement posting are complete. Search is de‐
layed because data categories changed. We have moved user testing to Thursday and updated
the sprint plan.”
Management communication is not about impressing people with busyness. It is about helping
3 WORKING WITH SOFTWARE TEAMS Communication in Software Projects
89
Poor feedback also causes damage. If a reviewer says, “This is not right,” the team gains little.
Better feedback explains what is wrong, why it matters, and what outcome is needed. Delayed
reporting is another common problem. A member may struggle for four days with a blocked
task and mention it only at the deadline. By then the team has lost options. Hidden blockers
hurt teams
Sometimes the problem is emotional rather than procedural. A team member may stay quiet
because they feel embarrassed. Another may dominate discussion so strongly that others stop
contributing. Communication is not just transfer of information; it is also shaped by trust, con‐
fidence, and team culture.
CHECKPOINT
Why is delayed reporting especially harmful in short sprint‐based work?
Communication improves when teams use a few simple habits consistently. Regular meetings
help, but only if they are brief and purposeful. Clear documentation helps, but only if it is
actually read and updated. Shared tools help, but only if the team uses them honestly.
One of the most helpful beginner habits is to say problems early without drama. A blocked task
3 WORKING WITH SOFTWARE TEAMS Software Engineering Process Frameworks
90
is not a personal failure. It is project information. Mature teams treat blockers as work to solve
together.
A process framework is a structured way of organizing software work. It does not write the
code for the team, but it gives shape to how the work moves. It helps answer questions such
as when people talk to users, how planning happens, when review happens, how progress is
checked, and how completed work is recognized.
In simple language, a process framework is a way of preventing software work from becoming
Structure helps random. Teams still think, adapt, and make decisions, but they do so within a shared rhythm.
Without a framework, teams often act only when a problem becomes painful. They interview
users only after building the wrong feature. They test only near the deadline. They discuss risk
only after a major delay. A framework helps the team remember important work before crisis
forces attention.
Frameworks are especially useful because software work contains both visible and invisible
tasks. Writing a feature is visible. Clarifying requirements, reviewing decisions, managing ver‐
sions, and tracking risk are easier to neglect. A framework keeps these activities in view.
This does not mean every project needs a heavy process. A two‐person student project does
not need the same level of formality as a national health platform. But even a small team
benefits from some structure. A backlog, a meeting rhythm, visible task tracking, and simple
review points already form a lightweight framework.
In Chapter 2, you studied development approaches such as waterfall, incremental, and agile.
A process framework is related, but not exactly the same. A development approach describes
the overall way a project moves and learns. A process framework is the practical structure that
3 WORKING WITH SOFTWARE TEAMS Software Engineering Process Frameworks
91
For example, agile is an approach based on short cycles, feedback, and adaptation. Scrum is
one framework that helps teams work in that style. Kanban is another. Both support agile
thinking, but they organize work differently.
Most frameworks include a few common elements, even if they use different names. They
include activities, tasks, roles, deliverables, milestones, and review points. Activities are broad
areas of work such as planning, coding, testing, or deployment. Tasks are smaller units of work
inside those activities. Roles describe who is responsible. Deliverables are outputs such as user
stories, screens, code, test results, or reports. Milestones are points where progress is checked.
Reviews help teams learn and correct direction.
Frameworks improve organization because they reduce guesswork about what should happen
next. They improve coordination because everyone can see the same work rhythm. They im‐
prove quality control because testing and review are planned rather than accidental. They help
monitoring because progress is measured against visible work items. They reduce risk because
warning signs appear earlier.
Of course, a framework does not guarantee success. A badly used framework can become
empty routine. Meetings can happen with no value. Boards can be updated dishonestly. Check‐
lists can be performed without real thought. The goal is not to obey process blindly. The goal
is to support useful work.
3 WORKING WITH SOFTWARE TEAMS Core Framework Activities
92
CHECKPOINT
What is the difference between a helpful framework and a framework that has turned
into empty routine?
Many software engineering texts describe a set of core activities that appear in most projects,
regardless of the exact method used. These are communication, planning, modelling, construc‐
tion, and deployment. The names are simple, but the idea is powerful: real software work is
broader than coding alone.
Planning is the work of deciding what to do, in what order, with what resources, within what
time. Planning can be detailed or lightweight. It may produce a formal schedule or a sprint
backlog. In both cases, it gives direction to the work.
Modelling means representing the system before or while building it. Models can be sketches,
flowcharts, wireframes, database diagrams, use cases, or simple descriptions of how parts con‐
nect. A model helps people think before they implement.
Construction includes coding and testing. The team turns ideas into working software, checks
whether behavior is correct, and improves the product through iteration.
Imagine a team building a campus event notice system. First, they communicate with student
leaders and staff to understand the problem. Then they plan a first sprint around announce‐
ments and categories. They sketch the main pages and the data model. They build the feature,
test it, and deploy a working version for feedback. That feedback then influences the next
sprint. In this way, the activities connect in a cycle.
Umbrella activities are supporting activities that stretch across the project rather than appear‐
ing only once. They do not replace planning or coding. Instead, they help protect project quality
and control while the main work continues. Support work
matters too
Students often overlook these activities because they seem less visible than screens or features.
Yet many project failures begin here. Teams lose track of versions, ignore risks, skip reviews, or
fail to document decisions. Umbrella activities keep the project from becoming fragile.
Tracking means checking whether the project is moving as planned. Control means taking ac‐
tion when it is not. This may involve reviewing the task board, checking completed backlog
items, comparing expected and actual progress, or noticing that one part of the system is falling
behind.
Good tracking is honest and calm. If a feature estimated for two days is still incomplete after
five, the team should discuss why. Was the task larger than expected? Was the requirement
unclear? Was someone blocked? Tracking is not mainly about blame. It is about keeping the
project realistic.
Risk management means identifying problems that might happen, thinking about how serious
they are, and preparing responses. In a beginner project, risks may include lost data, unavail‐
3 WORKING WITH SOFTWARE TEAMS Umbrella Activities in Software Projects
94
able users, poor internet access, unfamiliar tools, missed deadlines, or uneven team participa‐
tion.
Many teams think about risk only when a problem becomes real. A better habit is to ask early,
“What could slow us down or damage the project, and what can we do now?” If users are hard
to reach, schedule interviews early. If a tool is unfamiliar, build a small trial before depending
on it fully.
Quality assurance is broader than testing. It includes the habits and checks that reduce the
chance of defects. This can mean using coding standards, reviewing requirements before im‐
plementation, testing acceptance criteria, and checking whether the team is following agreed
practices.
Technical reviews are especially useful because they catch misunderstanding early. A require‐
ment review may reveal that two team members interpreted a story differently. A design re‐
view may reveal that the data model cannot support a report. A code review may reveal dupli‐
cation, security weakness, or unclear naming.
Configuration management means keeping project artifacts organized and controlled as they
change. In simple terms, it is version control plus change discipline. Teams need to know which
file is current, which branch contains the latest work, which document matches the software
Keep versions clear version, and who changed what.
For first‐year students, the most practical example is a shared Git repository used with disci‐
pline. Team members should avoid overwriting one another’s work carelessly. Commit mes‐
sages should communicate what changed. Important files should live in known places. If the
team cannot manage versions, collaboration becomes chaotic.
3 WORKING WITH SOFTWARE TEAMS Project Management in Software Development
95
Documentation records important knowledge. This may include requirements, decisions, setup
steps, test cases, user guides, and meeting notes. Documentation should be useful, not exces‐
sive. A short and accurate note is better than a long forgotten file.
Measurement and reporting involve asking how progress or quality will be judged. Examples
include number of completed backlog items, number of outstanding defects, test pass status,
or whether a sprint goal was met. Reports should support decisions, not create paperwork for
its own sake.
Software project management is the work of guiding a software project so that people, time,
scope, risk, and communication remain under control. This sounds formal, but even a two‐week
class assignment involves project management. Someone must decide what to build first, who
does what, whether the work is on time, and how problems will be handled.
Project management is not only the responsibility of one official manager. In small teams, much
of it is shared. However, shared does not mean invisible. The work still needs attention.
Software projects need management because software work is uncertain. Requirements can
change. Estimates can be wrong. Team members can fall sick. A feature that looks simple can
turn out to involve hidden rules. Without management, these realities do not disappear; they
simply surprise the team later.
Management helps the team respond instead of react. It gives the group a way to notice when
scope is expanding, when deadlines are unrealistic, or when communication is weakening.
3 WORKING WITH SOFTWARE TEAMS Project Management Styles and Frameworks
96
Most projects involve initiation, planning, execution, monitoring and control, and closure. Ini‐
tiation means agreeing on the problem, value, and starting direction. Planning turns that direc‐
tion into tasks, responsibilities, and milestones. Execution is doing the work. Monitoring and
control means checking progress and adjusting. Closure means finishing responsibly, handing
over outputs, and reflecting on lessons learned.
These are not only corporate words. They describe what thoughtful student teams already
need to do.
Managing scope means controlling what is included and excluded. When a team adds features
casually, time disappears quickly. Scope discipline is especially important for students, because
beginner teams often want to build too much.
Managing time means estimating, sequencing, and checking work against deadlines. Good
time management does not mean every estimate is correct. It means the team notices schedule
pressure early enough to adjust.
Managing cost may be less visible in class projects, but it still exists. The team spends time,
internet access, hosting resources, printing costs, and sometimes transport for fieldwork. In
professional projects, cost is more direct and can shape major decisions.
Managing people means assigning tasks, balancing workload, resolving conflict, and support‐
ing collaboration. Strong people management is not about control; it is about enabling useful
contribution.
Managing risk means treating uncertainty seriously. Managing communication means ensur‐
ing the right people know the right things at the right time.
CHECKPOINT
Why might a student project still need project management even if there is no formal
budget and no full‐time manager?
Traditional project management tends to emphasize up‐front planning, clearer phase bound‐
aries, and stronger formal control. This can be useful when requirements are stable, approval
steps are strict, or change is expensive.
Agile project management tends to emphasize shorter work cycles, frequent feedback, and
flexible planning. This is useful when learning is expected, users can give feedback, or require‐
ments may change during the work.
Neither style is automatically superior in every situation. The practical question is which style
fits the project conditions.
Students often hear names such as PMBOK and PRINCE2. At this stage, you do not need deep
certification‐level knowledge. It is enough to know that they are project management frame‐
works that help organizations manage work in a disciplined way.
PMBOK organizes project management knowledge into areas such as scope, schedule, cost,
quality, communication, risk, and stakeholders. It is broad and widely used as a reference for
good management practice.
PRINCE2 emphasizes continued business justification, clear roles, stage control, and manage‐
ment by exception. It is often associated with structured governance.
For first‐year students, the key lesson is simple: project management can be done informally
in small teams or formally in large organizations, but the underlying concerns remain similar.
Small student projects usually benefit from light structure, clear priorities, visible task tracking,
and frequent review. Heavy bureaucracy would waste energy. Large organizational projects
may need more formal reporting, approvals, and documentation. High‐risk systems may re‐
quire stronger control and verification. Projects with changing needs often benefit from agile
methods.
The best style is the one that helps the team stay clear, honest, and responsive without drown‐
ing in unnecessary process.
3 WORKING WITH SOFTWARE TEAMS Introduction to Agile Ways of Working
98
Agile development is a way of working that values short cycles, frequent feedback, collab‐
oration, and adaptation. Agile does not mean random or rushed. It means the team expects
learning and change, so it organizes work to respond rather than pretend everything was known
Agile means perfectly at the beginning.
adaptive
In agile settings, teams often build in small increments, show work regularly, adjust priorities,
and reflect on how to improve their process. This makes agile especially useful when users
need to see something concrete before they can respond clearly.
Agile became popular because many teams were frustrated by slow, rigid projects where work‐
ing software appeared very late. In such projects, users sometimes saw the product only after
many months, when changes were expensive and disappointment was painful.
Agile responds to that problem by encouraging earlier delivery and earlier conversation. In‐
stead of waiting until everything is “finished,” the team aims to produce smaller useful pieces,
learn from them, and improve direction.
Agile emphasizes delivering working software frequently, working closely with users, respond‐
ing to change, and improving continuously. These ideas matter because software development
includes uncertainty. When teams treat plans as useful but revisable, they are often better able
to handle real‐world change.
Agile does not remove the need for discipline. In fact, it requires discipline of a different kind.
Teams must keep backlogs current, attend meetings prepared, test incrementally, and speak
honestly about progress.
3 WORKING WITH SOFTWARE TEAMS Scrum in Simple Terms
99
Traditional approaches often plan more detail earlier and aim for greater predictability before
building. Agile approaches plan enough to start responsibly, then refine detail through feed‐
back. Traditional approaches may deliver larger chunks less often. Agile approaches prefer
smaller deliveries more often. Traditional approaches may resist late change. Agile approaches
try to manage and incorporate it.
Again, the lesson is not to treat one as always right. The lesson is to match the method to the
project reality.
Scrum is a lightweight agile framework that organizes work into fixed periods called sprints.
During each sprint, the team works toward a clear goal and aims to produce a usable increment
of software.
Scrum is popular in teaching because it gives beginners a visible rhythm. There is planning,
daily coordination, review, and reflection. This helps students learn that software development
is not only a coding burst before the deadline.
Scrum commonly describes three main roles: the Product Owner, the Scrum Master, and the
development team.
The Product Owner is responsible for clarifying value and prioritizing the product backlog. In
a student project, this might be the team member who stays closest to user needs and helps
decide what should be built first.
3 WORKING WITH SOFTWARE TEAMS Scrum in Simple Terms
100
The Scrum Master supports the team’s process. This role helps remove blockers, protect the
team’s working rhythm, and encourage useful Scrum practice. In student teams, this may be
the person who facilitates sprint meetings and keeps work visible.
The development team builds the software. In modern practice, this usually means the people
who together turn backlog items into a working increment. In small student projects, everyone
may contribute across analysis, coding, testing, and demonstration.
The product backlog is the prioritized list of work that may be done on the product. The sprint
backlog is the selected work for the current sprint, together with the plan for doing it. The
increment is the usable outcome produced by the sprint.
These artifacts matter because they make work visible. Instead of carrying plans only in mem‐
ory, the team can point to a backlog and ask what is most important now.
Scrum includes several recurring events. In sprint planning, the team chooses what it can take
on and agrees on a sprint goal. In the daily scrum or daily stand‐up, the team checks progress,
plans the day, and surfaces blockers. In the sprint review, completed work is shown for feed‐
back. In the sprint retrospective, the team reflects on how to improve its way of working.
Event Purpose
Scrum can improve focus because the team commits to a short period of work. It can improve
feedback because users see progress more frequently. It can improve learning because retro‐
spectives encourage reflection.
However, Scrum does not solve everything. If backlog items are unclear, the sprint will still
3 WORKING WITH SOFTWARE TEAMS Kanban in Simple Terms
101
struggle. If the team hides blockers, the daily scrum becomes a ritual with little value. If work
is not tested during the sprint, the increment may not truly be usable.
Kanban is a way of managing work by making it visible and controlling how much is in progress
at the same time. It is often shown using a board with columns such as To Do, Doing, and Done.
Kanban is helpful because many teams feel busy but cannot see why progress is slow. A board
reveals where work is piling up. If many tasks are stuck in Doing, then the problem may not be
lack of effort. It may be overload.
When tasks are written visibly on a board, the team can quickly see the state of the work. A
work‐in‐progress limit means the team agrees not to start too many tasks at once. For example,
if the Doing column is limited to three tasks, then a fourth task should not begin until one of
the three moves forward. Finish before
starting more
This idea is powerful for students. Beginners often start many tasks because starting feels pro‐
ductive. But unfinished work creates hidden pressure. Kanban encourages the team to finish
current work before opening too many new threads.
3 WORKING WITH SOFTWARE TEAMS Extreme Programming in Simple Terms
102
Unlike Scrum, which often works in fixed sprints, Kanban can support a more continuous flow.
Work is pulled when capacity is available. This can suit support work, maintenance, or class
projects where tasks arrive unevenly.
Kanban improves visibility, reduces overload, and makes bottlenecks easier to spot. It is also
easy to begin with. A physical board, spreadsheet, or online tool can already support useful
Kanban habits.
CHECKPOINT
How can a team look busy but still make poor progress, and how does Kanban help reveal
this?
Extreme Programming or XP is an agile approach that places strong emphasis on technical prac‐
tices and close feedback. It encourages teams to build software in a disciplined, high‐feedback
way so that change becomes easier to handle.
XP is useful in this chapter because it reminds students that teamwork methods are not only
about meetings. They also shape coding habits.
One well‐known XP practice is pair programming, where two developers work together at one
workstation. One writes while the other reviews, thinks ahead, and discusses alternatives. This
can improve learning and catch mistakes early, though it requires focus and cooperation.
Test‐driven development encourages writing tests around behavior in a deliberate cycle. Con‐
tinuous integration encourages teams to combine work frequently rather than waiting until
3 WORKING WITH SOFTWARE TEAMS User Stories, Acceptance Criteria, and Backlogs
103
late in the project. Refactoring means improving code structure without changing its behavior.
XP also values simple design and frequent releases.
Student teams may not use full XP formally, but several practices are immediately useful. Pair
programming can help when one member is stuck or when a feature is risky. Frequent inte‐
gration prevents last‐minute merge disasters. Refactoring teaches students that code can be
improved after it works. Simple design reminds teams not to build unnecessary complexity too
early.
3.12.4 Limits of XP
XP practices require discipline and time. Pair programming can feel tiring if used without pur‐
pose. TDD takes practice. Continuous integration requires the team to keep the codebase
healthy. The lesson here is not to copy every XP rule mechanically. It is to notice that strong
technical teamwork depends on habits as much as on intentions.
A user story is a short description of a user need written from the user’s point of view. A
common pattern is:
For example:
User stories help teams focus on purpose, not only features. A story reminds the team who the
work is for and why it matters.
3 WORKING WITH SOFTWARE TEAMS User Stories, Acceptance Criteria, and Backlogs
104
Not every sentence in the story format is a good story. Good stories are clear enough to discuss,
small enough to plan, and meaningful enough to relate to user value. A weak story is vague,
huge, or written from a technical perspective only.
For instance, “As a system, I want to normalize tables” is not a user story. It may describe useful
technical work, but it is not written as user value. Technical tasks can still exist in the backlog,
but they should not be confused with user stories.
Acceptance criteria are simple, testable conditions that help the team know whether a backlog
item is complete. They turn a broad story into concrete expectations.
Acceptance criteria improve communication between users, developers, and testers. They re‐
duce the risk that everyone says “done” while imagining different results.
A product backlog is the ordered list of work that may be done on a product. It contains user
stories, technical tasks, defect fixes, improvements, and research tasks. Prioritization matters
Backlog means because teams never have unlimited time.
choices
High‐priority items are usually those that deliver value early, reduce major risk, or enable other
work. Lower‐priority items may still be useful, but they wait until the team has capacity or
3 WORKING WITH SOFTWARE TEAMS Planning and Tracking Team Work
105
stronger reason.
Backlogs help teams talk honestly about choice. They make visible that some work comes
first and some work waits. This is healthier than pretending every request can be addressed
immediately. A well‐kept backlog is also a communication tool. It helps users, sponsors, and
team members see what the product needs and how priorities are changing.
Once backlog items are selected, the team often breaks them into smaller tasks. A story such
as “view announcements” may involve designing the page, creating the database table, writing
the list query, connecting the interface, adding expiry logic, testing, and preparing a demo.
Breaking work into tasks helps the team estimate more realistically. It also helps members see
where collaboration is needed. If a task depends on another, the team can discuss sequence
earlier.
Teams estimate work in different ways. Some use simple time estimates such as hours or days.
Others use relative estimates, judging whether one task is smaller or larger than another. For
3 WORKING WITH SOFTWARE TEAMS Planning and Tracking Team Work
106
beginners, the best approach is often the simplest one that still supports honest planning.
Estimates are not promises carved in stone. They are informed guesses. Their value lies partly
in the conversation they create. When one member says a task is half a day and another says
it is three days, the difference reveals uncertainty worth discussing.
Tasks should have visible owners, even when teamwork is shared. A clear owner helps the team
know who is leading the work and who should report progress. Tracking can happen through
a Scrum board, Kanban board, checklist, or weekly progress note.
The key is visibility. A team should not discover at the end of the week that nobody knows the
state of a major feature. If a task is blocked, the board and the conversation should show that
fact.
This rhythm is light enough for student teams and still teaches professional coordination.
Delays happen. What matters is the response. Teams should ask why the delay happened, what
work is affected, and what adjustment is sensible. Sometimes the right response is to reduce
scope. Sometimes it is to reassign work. Sometimes it is to split a backlog item into a smaller
delivery. Sometimes it is to ask for clarification instead of continuing blindly.
Change requests should also be handled deliberately. If a lecturer or user asks for a new feature,
the team should ask how important it is, what it displaces, and whether it belongs in the current
sprint or a later one.
CHECKPOINT
Why is it better to move a lower‐priority item out of the sprint deliberately than to quietly
keep everything and miss the sprint goal?
3 WORKING WITH SOFTWARE TEAMS Team Challenges in Software Projects
107
Software teams commonly face poor communication, unclear responsibilities, unrealistic dead‐
lines, changing user needs, lack of feedback, unequal participation, and conflict between mem‐
bers. These are not signs that the team is uniquely broken. They are normal pressures that
require management.
Teams reduce these challenges through clarity and rhythm. Clarify roles. Keep tasks visible.
Set achievable goals. Review priorities regularly. Invite feedback early. Speak about blockers
quickly. Use retrospective moments to improve how the team works. Improve the way
you work
Not every problem has a process solution. Some problems require honest conversation. If one
member is repeatedly absent, the team should not hide it. If two members disagree strongly
about direction, the team should define how decisions are made. If the scope is impossible,
the team should say so early and propose a smaller, stronger version.
In Chapter 2, CampusConnect was introduced as a project to help first‐year students access ori‐
entation announcements, campus office information, and registration guidance. The planning
stage produced a small scope and a three‐sprint idea. Now the team must work together to
turn that plan into a real project.
3 WORKING WITH SOFTWARE TEAMS Running Case Study: CampusConnect Teamwork
108
The five‐member team agrees on shared ownership but also names leads for key responsibili‐
ties. Aisha coordinates user contact and backlog updates. Daniel leads interface work. Mercy
leads database and search logic. Joel keeps the testing checklist and bug list. Ruth facilitates
sprint meetings and lecturer communication.
This does not mean each person only does one thing. It means each area has someone watching
it carefully.
The team reviews its product backlog and rewrites some items more clearly. One story says:
For Sprint 1, the team chooses a narrow goal: students should be able to view announcements,
and administrators should be able to post them. The sprint backlog includes page layout, an‐
nouncement data storage, category handling, posting form, display list, detail page, and test
cases.
During planning, the team removes one extra idea: push notifications. It sounds attractive, but
it would stretch the sprint too far. This is a good example of scope discipline inside agile work.
The team sets up a simple board with To Do, Doing, Blocked, and Done. They decide that no
more than three tasks should be in Doing at once. After two days, they notice four tasks are
3 WORKING WITH SOFTWARE TEAMS Chapter Summary
109
blocked because the announcement table still lacks an expiry field. Mercy fixes the schema,
and the blocked work begins moving again.
Without the visible board, that dependency might have remained hidden longer.
The team holds a short meeting each morning. Members say what they completed, what they
are doing next, and whether they are blocked. The meetings stay short because technical deep
dives happen afterward with the relevant people only.
At the end of the sprint, the team demonstrates the announcement feature to two student
leaders. One leader asks for filtering by category. The other asks that urgent items look visually
different. The team does not promise both immediately. Instead, they add them to the backlog
for prioritization.
In the sprint retrospective, the team recognizes two strengths and two weaknesses. A strength
is that the task board helped them surface blockers quickly. Another is that acceptance criteria
made testing easier. A weakness is that one member worked alone too long before asking for
help. Another is that the team underestimated time needed for data setup.
They decide that in Sprint 2, any task blocked for more than one day must be raised to the whole
team. They also agree to break large tasks into smaller ones before sprint planning ends.
Software development is team work because real systems are too broad and too important to
build well through isolated effort alone. Teams help manage complexity, but only when respon‐
sibilities, communication, and coordination are clear. Stakeholders include users, customers,
managers, and sometimes regulators, while the development team may include analysts, de‐
3 WORKING WITH SOFTWARE TEAMS Review Questions
110
Project management keeps scope, time, people, communication, and risk under control. Agile
ways of working emphasize short cycles, feedback, and adaptation. Scrum, Kanban, and XP
provide different but useful teamwork practices. User stories, acceptance criteria, and backlogs
help teams describe and prioritize work. Visible task tracking, honest reporting, and regular
reflection help software teams improve.
n KEY TAKEAWAYS
• Real software projects depend on people coordinating, not just individuals coding.
• Clear roles help teams avoid confusion without preventing collaboration.
• Communication failures often become technical failures later.
• Process frameworks provide structure so important work is not forgotten.
• Agile methods still require planning, discipline, and visible priorities.
• User stories, acceptance criteria, and backlogs turn user needs into manageable
work.
• Task boards, stand‐ups, reviews, and retrospectives help teams see and improve
their work.
1. Why is most real software built by teams rather than by one person alone?
2. What is a stakeholder?
3. Give three examples of people who may be stakeholders in a software project.
4. Why do teams need clear roles and responsibilities?
5. What is a process framework?
6. Name the five core framework activities discussed in this chapter.
7. What is the purpose of a sprint review?
8. What is a Kanban board used for?
9. What is a user story?
3 WORKING WITH SOFTWARE TEAMS Review Questions
111
1. A student team says, “We do not need meetings; we will just code.” What risks do you
see in this approach?
2. How can poor communication create defects even when programmers are technically
capable?
3. Compare Scrum and Kanban for a small university project. When might one fit better
than the other?
4. Why is it important to distinguish customers from end users?
5. What team habits make it easier to handle changing requirements without losing con‐
trol?
In a group, choose one of the following project ideas or use your own:
• Main stakeholders.
• Roles for each team member.
• Five backlog items.
• One sprint goal or one Kanban board setup.
• Meeting rhythm for one week.
• Two likely risks and your response to each.
CHAPTER REVIEW
• Teams build software more effectively 1. Who are the key stakeholders in this
when roles, priorities, and communication project?
are clear. 2. How will the team keep work visible?
• Process frameworks give structure to plan‐ 3. What method will the team use to plan and
ning, building, reviewing, and improving review progress?
work. 4. How will blockers, change requests, and
• Agile teamwork depends on visible work, feedback be handled?
short feedback loops, and honest adjust‐
ment.
• Backlogs, user stories, and acceptance
criteria help turn ideas into manageable
tasks.
REFERENCE
Coordination
Process Framework
Scrum
Core Activities
113
3 WORKING WITH SOFTWARE TEAMS Review Questions
114
Product Backlog
A short fixed period in which a team works toward
a clear goal and produces a usable increment.
Sprint Backlog
A method of managing work visually and limiting
work in progress.
Extreme Programming The selected work for the current sprint and the
plan for completing it.
Increment
An agile approach that emphasizes strong techni‐
cal practices such as pair programming and contin‐
uous integration.
The usable outcome produced by a sprint or devel‐
Work‐in‐Progress Limit
COMING UP NEXT
4
Designing and Building
Software
TURNING REQUIREMENTS INTO STRUCTURE, INTERFACES, DATA, CODE, AND WORKING FEATURES
œ LEARNING OBJECTIVES
By the end of this chapter, you should be able to:
116
4 DESIGNING AND BUILDING SOFTWARE Introduction to Software Design and Construction
117
N THE PREVIOUS CHAPTERS, you learned how software work starts with understanding prob‐
Requirements describe what users need. Design decides how the system will be shaped so
those needs can be met. Construction then turns that design into running software. If the
team skips design and jumps directly into coding, the project may still produce screens and
features quickly, but the result is often hard to change, hard to test, and hard to trust.
Imagine a team building a hostel maintenance request system. The requirements may say that
students should be able to report a broken light, upload a photo, and see the status of the
request. The maintenance office should be able to assign tasks and mark work complete. These
requirements are useful, but they do not yet tell the team how many modules are needed, what
data should be stored, how the screens should flow, or how status updates should work safely.
Design creates that bridge. It helps the team move from a list of needs to a shape that can actu‐
ally be built. Construction then turns that shape into code, tests, fixes, and working behavior.
Some beginners feel that design slows them down. After all, writing code produces something
visible. A sketch, diagram, or design note may feel less exciting than a running screen. However,
design usually saves time because it helps the team make important decisions earlier, when
change is still cheaper.
Suppose a team begins coding a library system without thinking about how books, members,
borrowing records, fines, and staff roles connect. They may build a search page first, then
later discover that one book can have several copies, each copy can be borrowed separately,
and different staff members have different permissions. By that point, changing the code may
require rewriting several connected parts.
Design reduces that kind of rework. It helps the team think about structure, responsibilities,
data flow, and user interaction before too many assumptions have hardened into code. This
does not mean every project needs heavy documents. Good design can be lightweight. A
whiteboard sketch, a data model, a wireframe, and a few agreed rules may already prevent
many avoidable mistakes.
Design and construction are closely connected. Design influences what gets coded, but con‐
struction also teaches the team whether the design works well in practice. During construction,
developers may discover that a data model is awkward, that a screen takes too many steps, or
Design and code that one module is carrying too many responsibilities.
inform each other
Good teams do not treat design as a one‐time ceremony that can never be revisited. Instead,
they design enough to build responsibly, then refine the design as they learn. Construction
reveals reality. Design responds to reality. This back‐and‐forth is normal.
This chapter begins by explaining software design in plain, practical terms. It then introduces
the main levels of design and several important design principles that help teams control com‐
4 DESIGNING AND BUILDING SOFTWARE Understanding Software Design
119
plexity. After that, the chapter explores three areas students meet very often: system struc‐
ture, user interface design, and data design.
The second half of the chapter focuses on software construction. It explains what it means
to turn design into code, how to write code that other people can understand, why standards
matter, how to validate input and handle errors, how to debug problems, how version control
supports teamwork, and how refactoring and documentation improve long‐term maintainabil‐
ity. Throughout the chapter, practical examples are used so that the ideas stay connected to
real software work.
Software design is the process of deciding how a software system should be organized so that
it can satisfy requirements effectively. It is not only about appearance and not only about tech‐
nical elegance. Its purpose is to help the team build a system that is clear, useful, changeable,
and dependable.
A useful way to think about design is as the arrangement of responsibilities. Which part of
the system handles login? Which part stores records? Which part applies rules? Which part
shows data to the user? Which part communicates with external services? Design answers
these questions before the system becomes too tangled.
Design also gives teams a shared mental picture. When several people are building one system,
they need more than individual good intentions. They need common understanding. A design
makes that shared understanding visible.
People often compare design to a blueprint in construction work. The comparison is useful,
but only up to a point. A software design guides building, just as a blueprint guides physical
construction. However, software is easier to change than concrete, and projects often learn as
they progress. So design should guide the team without trapping it unnecessarily.
In practice, a strong design is one that gives clarity where clarity is needed, while leaving room
for reasonable adaptation. If the team learns from testing or user feedback that a screen flow
should change, the design should support that kind of change rather than collapse under it.
4 DESIGNING AND BUILDING SOFTWARE Levels of Software Design
120
A good design should be clear enough that the team can explain it, simple enough that it does
not contain unnecessary complication, flexible enough to accept likely change, maintainable
enough that future developers can work with it, and reliable enough that important behavior
does not depend on hidden accidents.
Clarity matters because confusion spreads quickly in team projects. Simplicity matters because
unnecessary complexity creates more places for defects and misunderstanding. Flexibility mat‐
ters because real systems change. Maintainability matters because software lives beyond the
first demonstration. Reliability matters because users depend on the system behaving consis‐
tently.
CHECKPOINT
Why is a design that “works for now” not always good enough in a real project?
Imagine a student registration support system. A weak design might place all code for login,
registration, approval rules, reporting, and data access into a few large files. The system may
appear to work at first, but changes become risky because every part touches every other part.
A better design would separate concerns. One part handles user authentication. Another han‐
dles course registration rules. Another stores and retrieves records. Another presents pages to
students and staff. This does not make the system perfect, but it makes it easier to understand,
test, and extend.
High‐level design looks at the system from a broad perspective. It asks what the main parts
are, how they relate, and where major responsibilities belong. At this level, the team is not yet
worrying about every variable name or every exact query. It is deciding the overall shape of
See the big picture the system.
For a clinic appointment system, high‐level design might identify major parts such as patient‐
4 DESIGNING AND BUILDING SOFTWARE Levels of Software Design
121
facing screens, staff‐facing screens, appointment logic, record storage, and notification ser‐
vices. It may also describe how these parts communicate. This level of design helps the team
avoid building a system as one undivided block.
Detailed design moves closer to implementation. It considers how a specific module works
internally, what data structures are used, how a function behaves, what validation happens on
a form, or how a class stores state and offers operations.
If the high‐level design says there will be an appointment module, the detailed design asks
what fields an appointment record should have, what rules apply when time slots overlap, and
how cancellation should be handled. This level helps construction proceed with fewer hidden
assumptions.
Another useful distinction is between logical design and physical design. Logical design de‐
scribes what the system must do and how information moves conceptually. Physical design
concerns the technologies, storage choices, deployment details, and implementation decisions
used to make that logic real.
For example, the logical design of a results portal may describe that lecturers submit marks,
heads of department approve them, and students view only approved results. The physical
design decides whether the system uses a web application, what database tables are needed,
how servers are arranged, and how authentication is handled.
High‐level design What are the main parts of the system, and how do they connect?
Detailed design How should this module, screen, or function behave internally?
Logical design What work should happen, and what information should move?
Which technologies, tables, files, or deployment choices will implement
Physical design
it?
4 DESIGNING AND BUILDING SOFTWARE Principles of Good Software Design
122
Students sometimes mix all design decisions together and become overwhelmed. Separating
levels helps because it allows the team to think in layers. First agree on the broad shape. Then
focus on specific parts. First understand the logic. Then choose the implementation details.
This makes the work more manageable.
4.4.1 Modularity
Modularity means dividing a system into smaller parts, often called modules or components,
where each part has a clear responsibility. Modular design helps teams manage complexity
because people can focus on one part at a time without losing the entire system.
In a hostel booking system, one module might manage student details, another room availabil‐
ity, another allocation rules, and another payment confirmation. Each module can still interact
with the others, but the boundaries help the team reason about change.
Modularity also supports teamwork. If the modules are sensible, different developers can work
on different parts with fewer collisions. Without modularity, everyone edits the same area and
the project quickly becomes fragile.
4.4.2 Abstraction
Abstraction means focusing on the important behavior of a part while hiding unnecessary de‐
tails. People use abstraction all the time in ordinary life. When you use a phone, you do not
need to know every electrical detail inside it. You only need the relevant controls and expected
behavior.
In software, abstraction helps by allowing one part of the system to use another without de‐
pending on every internal choice it makes. A registration page may call a function such as
submitRegistration without needing to know every database step inside it. This reduces
Hide what others mental overload and allows internal improvement later.
do not need
4 DESIGNING AND BUILDING SOFTWARE Principles of Good Software Design
123
Separation of concerns means keeping different kinds of responsibility apart. A very common
example is separating user interface logic, business rules, and data access. If these concerns
are mixed badly, changes become awkward. A small rule change may require editing many
screens. A database change may break unrelated interface code.
When concerns are separated well, each part becomes easier to understand and test. For ex‐
ample, a course registration rule can be checked in the rule‐handling layer without needing to
run every page in the system.
Cohesion refers to how strongly related the responsibilities inside one module are. High cohe‐
sion means the module does one connected kind of work. Low cohesion means the module
has scattered, unrelated jobs. High cohesion is preferred because it makes modules easier to
understand and maintain.
Coupling refers to how strongly different modules depend on one another. Tight coupling
means a change in one module is likely to force changes in another. Loose coupling means
modules can work together while remaining more independent. Loose coupling is usually pre‐
ferred because it lowers the cost of change.
Suppose a single file in a library system handles user login, overdue fine calculation, book
search, and report export. That file has low cohesion because its responsibilities do not be‐
long tightly together. If several screens talk directly to raw database details in many places, the
system also has tight coupling because one schema change may force edits everywhere.
4.4.5 Encapsulation
Encapsulation means protecting a module’s internal details and exposing only what other parts
need to use. This principle is especially visible in object‐oriented programming, but the under‐
lying idea is broader than objects.
For example, a payment module may expose an operation that confirms a transaction status,
4 DESIGNING AND BUILDING SOFTWARE Common Software Design Approaches
124
while hiding the exact internal checks it performs. Other parts of the system should rely on
the interface, not on secret internal behavior. Encapsulation protects the system from careless
interference and makes future change safer.
Reusability means designing parts that can be used again in more than one place when appro‐
priate. Reuse is valuable because it reduces duplication and keeps similar behavior consistent.
However, teams should not force reuse too early in artificial ways. Reuse is most helpful when
the repeated need is genuine.
Maintainability means the design supports future change. This includes adding features, fix‐
ing defects, improving performance, and helping new team members understand the code.
Maintainability matters because software rarely ends with the first release.
CHECKPOINT
Why can a design that seems fast to build today become expensive tomorrow if cohesion
is low and coupling is high?
Several design approaches are common in software work. Structured design often focuses
on functions, processes, and the flow of information through the system. It can be useful in
systems where process logic is central and can be expressed clearly in steps.
Object‐oriented design organizes software around objects or classes that combine data and
behavior. This approach is helpful when the problem naturally includes real entities such as
students, books, orders, or appointments with related operations and state.
Component‐based design emphasizes building systems from reusable, well‐defined parts. These
may be internal components created by the team or external components provided by frame‐
works and libraries. This approach is useful because modern software rarely starts from noth‐
ing.
4 DESIGNING AND BUILDING SOFTWARE Designing the Structure of a System
125
User‐centered design keeps user needs, goals, and difficulties visible throughout the design
process. Instead of only asking whether the system is technically possible, user‐centered design
asks whether it is understandable, efficient, and suitable for the people who must use it.
These approaches are not enemies. A project may combine them. A team may use object‐
oriented code, component‐based tools, structured flow thinking for some processes, and user‐
centered methods for the interface.
At a broad level, software structure is often described using architecture. For first‐year stu‐
dents, architecture can be understood as the high‐level arrangement of the system’s main parts
and relationships. It is not necessary to make architecture mysterious. It simply means the big
structural decisions that guide the rest of the work.
Many student systems use a layered or three‐tier style, even if students do not name it for‐
mally. One layer presents the interface. Another applies rules and processing. Another stores
and retrieves data. This division helps because each layer can focus on a different kind of re‐
sponsibility. Separate interface,
logic, and data
Once major components are identified, the team should think about modules in more detail. A
module should have a clear job. The team should also define its interface, meaning how other
parts interact with it. The interface may be a function, a method, a service call, or an agreed
set of inputs and outputs.
Clear interfaces are important because they reduce confusion between team members. If the
interface of the reporting module is vague, developers may build against different expectations.
If it is clear that a function returns approved results only, the team can build and test with more
confidence.
4 DESIGNING AND BUILDING SOFTWARE Designing the User Interface
126
Every system moves data. Information comes in, is checked, is processed, is stored, and is
shown again in useful form. Designing data flow means asking where information begins, what
changes it undergoes, what rules apply, and where the outputs go.
For example, in a clinic booking system, a student’s booking request enters through a form,
is validated, checked against schedule rules, saved to the database, then shown to staff. If
cancellations occur, notifications may also be sent. A team that designs this flow early is less
likely to miss important steps.
What are the main modules? Prevents the system from becoming one large block.
What does each module own? Reduces confusion and overlapping responsibility.
How do modules communicate? Helps developers agree on interfaces early.
Where does data enter and go next? Reveals validation, processing, and storage needs.
Helps separate interface behavior from business
Which rules belong where?
logic.
The user interface is the part of the system users see and interact with. If the interface is con‐
fusing, even a technically strong system may feel broken to the people who depend on it. This
is why interface design matters. It affects speed, confidence, accuracy, and user satisfaction.
Good interface design is not about decoration alone. It is about making work understandable.
A clean interface helps users know what to do, what has happened, and what to do next.
A good interface is usually simple, consistent, clear, easy to navigate, and responsive in the
sense that it gives feedback. Simplicity means users are not buried under unnecessary choices.
Consistency means similar actions look and behave similarly. Clarity means labels, messages,
4 DESIGNING AND BUILDING SOFTWARE Designing the User Interface
127
and layout make sense. Ease of navigation means users can move through tasks without getting
lost. Feedback means the system tells the user whether an action succeeded, failed, or needs
correction.
For example, when a student submits a maintenance request, the interface should show whether
the request was saved, not leave the student guessing. If a required field is empty, the system
should explain the problem clearly near that field.
Interfaces often use forms, menus, buttons, tables, alerts, and status messages. These ele‐
ments are not difficult to name, but they are easy to misuse. A form with too many fields
discourages users. A menu with vague labels slows navigation. An error message that says only
“Invalid input” teaches the user very little.
Common interface problems include confusing layouts, too many steps, unclear error mes‐
sages, inconsistent screen behavior, and poor support for ordinary user mistakes. Beginners
often focus on making a page work technically without watching what the user must think and
do while using it.
Consider a login screen. A strong design usually includes a clear page title, a username field, a
password field, a visible login action, and a useful error message when details are incorrect. It
may also include password reset support or visibility controls when appropriate. A weak design
may hide the action, give vague messages, or ask for extra unnecessary information.
CHECKPOINT
Why is an error message such as “Something went wrong” less useful than a more spe‐
cific message near the field or action that caused the problem?
Many systems exist mainly to store, retrieve, process, and report data. If the data design is
weak, the rest of the system suffers. Reports become unreliable. Rules become difficult to
Bad data design apply. Searches become awkward. Duplicate and inconsistent information appears.
spreads pain
Good data design begins by asking what information the system must store, who uses it, how
it changes, and what relationships exist between pieces of information.
An entity is a thing the system needs to keep track of, such as a student, a book, an appointment,
or a room. An attribute is a property of that entity, such as student number, title, appointment
date, or room capacity.
Entities are also connected by relationships. A student can make many maintenance requests.
A book can have many copies. A lecturer can teach many courses. These relationships matter
because they shape how tables, rules, and screens should work.
For example, in a library system, Book and Member are entities. A borrowing record connects
them. If the team forgets to model that relationship properly, it may struggle later to know
who currently has which copy.
In relational database systems, entities are often represented through tables. Rows represent
individual records. Columns represent attributes. A primary key identifies a record uniquely.
A foreign key connects one table to another so relationships can be represented consistently.
Good database design tries to avoid unnecessary duplicate data, maintain consistency, pro‐
tect integrity, and support efficient retrieval. For example, if the same student phone num‐
ber is copied carelessly into many places, it becomes harder to keep records accurate when it
changes.
4 DESIGNING AND BUILDING SOFTWARE Design Tools and Diagrams
129
Data design should not be done in isolation from user work. If librarians search by title and
category, the system should store those clearly. If a clinic must track cancellations separately
from missed appointments, the design should distinguish them. If staff members need to audit
who changed a record, the design may need created‐by and updated‐by fields or related logs.
This is another reason why design should remain connected to requirements and user under‐
standing.
Diagrams and sketches help teams think and communicate. They reduce the burden of holding
everything only in words. A simple drawing can often reveal structure or confusion faster than
a long explanation.
Design tools are not valuable because they look professional. They are valuable because they
make ideas visible and discussable.
Flowcharts help show step‐by‐step logic. They are useful when the team needs to explain a
process such as course approval or password reset flow.
Use case diagrams help identify who interacts with the system and what they are trying to do.
They are especially useful early, when the team is clarifying user activities.
4 DESIGNING AND BUILDING SOFTWARE Introduction to Software Construction
130
Data flow diagrams show how information moves through processes, stores, and external enti‐
ties. These help when teams want to understand movement of data more clearly than interface
screens alone can show.
Entity relationship diagrams help show entities, attributes, and relationships for database de‐
sign. These are very helpful in data‐heavy systems.
Class diagrams are common in object‐oriented work and help show classes, attributes, meth‐
ods, and relationships. They are useful when the team is building with object‐oriented thinking
and needs a clearer code‐level model.
Wireframes or interface sketches help teams discuss screen layout and task flow before full im‐
plementation. Even a paper sketch can reveal missing buttons, confusing labels, or unnecessary
steps.
Not every project needs every kind of diagram. Students should avoid making diagrams only
to satisfy formality. Instead, they should ask which diagram helps the team understand the
problem or communicate the design more clearly. One good wireframe and one sound data
model are often more valuable than six diagrams nobody uses.
Software construction is the practical work of turning design into running software. It includes
writing code, building modules, using libraries and frameworks, testing parts, fixing defects,
and documenting important details.
Construction is where ideas become concrete. At this stage, the quality of earlier design starts
to matter visibly. A clear design usually leads to smoother implementation. A weak design
often reveals itself through duplication, confusion, and fragile code.
4 DESIGNING AND BUILDING SOFTWARE Writing Clear and Maintainable Code
131
Beginners sometimes imagine construction as a long session of writing lines of code. In reality,
construction involves many linked decisions. A developer writes code, runs it, checks errors,
adjusts structure, integrates with other modules, validates input, and confirms that behavior
matches the design and acceptance criteria.
Construction also involves judgment. Should this logic be a separate function? Is this name
clear enough? Is this code duplicated elsewhere? Should this input be validated here or in a
shared layer? Good construction depends on such small repeated decisions.
During construction, developers do not merely obey instructions passively. They interpret de‐
sign, raise concerns, notice awkwardness, and improve the shape of the software. If the code
reveals that one screen depends on too many hidden rules, the developer should say so. Con‐
struction is part of thinking, not just execution.
Code is read more times than it is written. Even the original programmer will later forget some
details. Team members who review, test, fix, or extend the software also need to understand
it. This is why readability matters.
Readable code reduces mistakes, speeds reviews, supports teamwork, and lowers maintenance
cost. Unreadable code may still run, but it makes the project weaker.
Names should help people understand intent. A variable named studentCount is clearer
than x. A function named calculateFine communicates more than processData. Files and
classes should also reflect responsibility.
Code should be organized so related behavior is grouped together and responsibilities are sep‐
4 DESIGNING AND BUILDING SOFTWARE Coding Standards and Team Guidelines
132
arated. Very large functions often hide several jobs at once, making defects harder to spot and
changes harder to make.
Comments are useful when they explain why something is done, especially when the reason is
not obvious from the code itself. Comments are less useful when they merely repeat what the
code already says clearly. Formatting also matters. Consistent indentation, spacing, and layout
help the team scan code more easily.
Avoiding duplication is another important habit. Repeated code increases the chance that one
copy will be updated while another is forgotten. Shared helper functions or reusable compo‐
nents often provide a cleaner solution.
CHECKPOINT
Why can duplicated code be dangerous even when both copies are correct today?
Coding standards are agreed rules about naming, formatting, file organization, comments, and
sometimes error handling or testing habits. Standards matter because software development
is collaborative. If each developer writes in a completely different style, reading and reviewing
Consistency helps the code becomes slower.
teams
Standards do not make code good by themselves, but they remove many avoidable distractions.
They help the team focus on real logic instead of arguing repeatedly about small style choices.
• place validation near user input and in shared rules where needed;
• write commits with clear messages;
• use one consistent formatting style;
• remove dead code instead of leaving confusion behind;
• update important documentation when behavior changes.
These rules are modest, but they already improve team collaboration strongly.
Real users do not always enter perfect input, and real systems do not always run under perfect
conditions. Networks fail. Files are missing. Passwords are wrong. A requested record may
not exist. Error handling is the practice of responding to such situations in a controlled and
understandable way.
Without good error handling, a system may crash, confuse users, or hide important information
from developers. With better error handling, the system remains calmer under difficulty.
Students often first meet syntax errors, which prevent code from running because the language
rules were broken. They then meet logic errors, where the code runs but produces the wrong
result. Runtime errors happen while the program is executing. User input errors happen when
entered data is missing, badly formatted, or outside allowed rules.
These categories matter because they call for different responses. A syntax error must be fixed
in code. A logic error must be reasoned about. A user input problem should usually be handled
with helpful feedback rather than a crash.
4 DESIGNING AND BUILDING SOFTWARE Debugging Software
134
Input validation checks whether incoming data is acceptable before the system uses it. This in‐
cludes checking required fields, data types, ranges, formats, and relationships between values.
For example, a registration form may need to confirm that student number format is correct,
that required fields are present, and that the selected course units do not clash.
Validation is important not only for correctness but also for security and trust. If a system
accepts anything carelessly, defects and abuse become more likely.
A strong error message helps the user recover. Instead of simply saying “Invalid input,” it tells
the user what needs correction. Instead of showing a system crash screen, it guides the user
or at least protects the system from revealing unnecessary internal detail.
For developers, errors should also be logged in a useful way. If the system fails silently, diag‐
nosing problems later becomes much harder.
Debugging is the process of finding the cause of a defect and correcting it. It is different from
testing. Testing helps reveal that a problem exists. Debugging investigates why it exists and
how to fix it.
developers debug regularly because software systems contain many moving parts and assump‐
tions.
Bugs often come from incorrect assumptions, weak logic, incomplete requirements, typing mis‐
takes, and unexpected user inputs. Sometimes the bug is not in the code that first appears
suspicious. Sometimes it is in data, configuration, integration, or misunderstanding of the re‐
quirement.
Useful debugging habits include reading error messages carefully, reproducing the problem
consistently, checking recent changes, isolating the smallest failing part, and testing assump‐
tions one by one. Print statements, logs, and debuggers can all help when used thoughtfully.
One of the most important habits is to avoid random changes. If a developer edits many things
at once without understanding the cause, the system may become harder to reason about.
This rhythm is slower than guessing, but usually much more effective.
Some bugs reveal deeper design or process issues. If the same category of defect returns re‐
peatedly, the team should ask whether a shared function, stronger validation, better review,
or clearer acceptance criteria could prevent it in future.
Modern software development rarely begins from nothing. Teams use libraries, frameworks,
packages, UI kits, database systems, testing tools, and version control platforms because these
save time and provide tested capability.
A library usually offers useful functionality the developer calls when needed. A framework
provides a broader structure within which the application is built. Beginners do not need to
memorize a perfect definition immediately, but they should understand that these tools shape
how software is constructed.
Using existing tools can speed development, reduce repetition, and improve reliability by rely‐
ing on components that have already been tested widely. However, external tools also carry
risks. If the team does not understand the tool well, it may misuse it. Dependencies may create
compatibility or security issues. Upgrades can break assumptions. Poorly chosen tools can add
complexity instead of removing it.
The lesson is not to avoid tools. It is to choose them carefully and understand them enough to
use them responsibly.
Version control is the practice of tracking changes to project files over time in a controlled way.
In software projects, this is essential because teams need to know what changed, who changed
Track change it, and how to recover if something goes wrong.
deliberately
Common concepts include the repository, which stores the project history; the commit, which
records a set of changes; the branch, which allows parallel work; and the merge, which com‐
bines work from different branches. Sometimes changes conflict, meaning two versions altered
the same area in incompatible ways.
4 DESIGNING AND BUILDING SOFTWARE Documentation During Construction
137
Without version control, student teams often exchange files manually, overwrite one another’s
changes, or lose working versions. With version control, collaboration becomes safer and more
visible. The team can review history, experiment more responsibly, and work in parallel with
clearer control.
Version control is not only a storage tool. It is also a communication tool. A clear commit
message and sensible branch practice help others understand what happened.
CHECKPOINT
Why is version control useful even for a small project with only two or three team mem‐
bers?
Some students think documentation should wait until the end of a project. In practice, useful
documentation must grow during construction. Setup notes, design decisions, API expecta‐
tions, test instructions, and deployment steps are easiest to capture while they are still fresh.
Documentation can take several forms: code comments, technical notes, README files, user
instructions, installation guidance, and records of important decisions. The right amount de‐
pends on the project, but some documentation is always helpful.
Good documentation is clear, accurate, updated, and easy to follow. Poor documentation is
vague, outdated, or longer than it needs to be without answering practical questions.
If the system has changed but the documentation has not, new team members lose time and
trust. This is why keeping documentation current is more important than writing large volumes
once.
Refactoring means improving the internal structure of code without changing its external be‐
havior. This may include renaming unclear variables, splitting large functions, removing dupli‐
cation, simplifying logic, and improving module boundaries.
Refactoring matters because first versions are rarely the best possible versions. As the team
learns more, the code can often be made clearer and safer.
Technical debt describes the future cost created when teams take shortcuts that make later
change harder. This may happen because of rushed coding, poor design, duplication, weak
documentation, or postponed cleanup. Sometimes taking a shortcut is a conscious trade‐off.
The danger comes when the debt grows silently and begins to slow everything.
Technical debt often appears as code that nobody wants to touch, features that break unex‐
pectedly, or changes that require too many edits in too many places.
Teams manage technical debt through regular refactoring, code reviews, better standards, stronger
tests, and improved documentation. The goal is not perfection. The goal is to prevent the soft‐
ware from becoming harder and harder to develop.
Security is not something that can be added only at the end. Construction choices affect secu‐
rity from the beginning. Weak password handling, hard‐coded secrets, poor input validation,
careless error messages, and exposed sensitive data can all create serious problems. Build with care
Even beginner systems should develop good habits early. Validate user input. Protect access
to privileged actions. Avoid storing sensitive data carelessly. Do not expose internal details in
user‐facing errors. Keep dependencies updated. Think about who is allowed to see or change
what.
Students do not need to become security specialists in this chapter, but they should learn that
careless construction can create risks long before deployment.
Consider a student team building a library management system for a departmental library. The
system should help staff register books, track copies, record borrowing and returning, calculate
overdue fines, and allow students to search the catalog.
The requirements are clear enough to begin design, but the system still needs structure.
4 DESIGNING AND BUILDING SOFTWARE Running Case Study: Designing and Building a Library
Management System
140
The team identifies several modules: book management, member management, borrowing
and returning, fine calculation, reporting, and authentication. This helps the team avoid placing
every function into one large collection of files.
They also decide that the interface, application logic, and data access should be separated. This
means the search page should not directly contain all database details and business rules in one
place.
The team identifies entities such as Book, Copy, Member, and Borrowing. They define relation‐
ships carefully so that one book can have multiple copies and one member can borrow multiple
items over time. They include due dates and return dates because these are needed for fines
and status tracking.
For the interface, the team sketches screens before coding. The search page should be simple
and usable by students. The staff pages should support adding books, marking items borrowed,
and viewing overdue records. They decide to keep forms short and place error messages near
the fields that need correction.
During construction, the team agrees on naming standards, small commit messages, and visible
task ownership. They build the borrowing workflow in pieces, testing each part rather than
waiting for the entire system to exist before checking behavior.
When they notice duplicate logic for overdue calculations in two different places, they refactor
that logic into a shared function. When a bug appears because returned books are still shown
as unavailable, they debug by reproducing the flow and checking recent changes in status han‐
dling.
4 DESIGNING AND BUILDING SOFTWARE Chapter Summary
141
By the second sprint, the team notices that one module mixes search logic with formatting
rules for the user interface. They separate those concerns, making later changes easier. They
also update the README with setup instructions and note the decisions they made about fine
calculation.
This case shows that design and construction are not separate worlds. Good design guides the
build, and construction reveals where design needs improvement.
CHECKPOINT
In the library case study, which design decisions helped later construction move more
smoothly?
Software design helps teams move from requirements to a structure that can be built, under‐
stood, and changed responsibly. It includes decisions about overall system shape, detailed
module behavior, user interface flow, data design, and the relationship between software
parts. Strong design principles such as modularity, abstraction, separation of concerns, co‐
hesion, coupling, and encapsulation help control complexity and support maintainability.
Design also connects directly to construction. Construction is the practical work of turning
design into code, tests, fixes, and working features. Good construction depends on readable
code, meaningful names, sensible organization, validation, careful error handling, debugging
habits, coding standards, version control, documentation, refactoring, and secure practices.
Teams that build with these habits create software that is not only functional, but also easier
to improve and trust.
n KEY TAKEAWAYS
• Design helps teams think before code becomes difficult to change.
• High‐level and detailed design answer different but connected questions.
• Good design principles reduce confusion, duplication, and fragile dependencies.
• User interface design, data design, and system structure must support one an‐
other.
• Construction includes testing, validation, debugging, documentation, and cleanup,
not only coding.
4 DESIGNING AND BUILDING SOFTWARE Review Questions
142
• Coding standards and version control make teamwork safer and easier.
• Refactoring and technical debt management are part of responsible software de‐
velopment.
• Secure coding habits should begin during construction, not after release.
1. A team says, “We will design as we code and not waste time with structure.” What risks
can follow from this?
2. How can a poor database design create problems in screens, reports, and later mainte‐
nance?
3. Why can readable code be considered a teamwork issue and not only a personal style
issue?
4. Compare a helpful coding standard with an unnecessarily rigid rule. How can a team tell
the difference?
5. In what ways can secure coding habits be useful even in small student projects?
Choose one of the following systems or use your own project idea:
4 DESIGNING AND BUILDING SOFTWARE Review Questions
143
CHAPTER REVIEW
• Design turns requirements into a structure 1. What are the main modules and responsi‐
the team can build responsibly. bilities of this system?
• Good design principles help software stay 2. Where should validation, rules, and data
understandable and changeable. storage responsibilities live?
• Construction includes coding, validation, 3. How will the team keep code readable and
debugging, documentation, and cleanup. maintainable?
• Readable code, standards, version control, 4. What risks should be reduced during con‐
and refactoring support quality and team‐ struction rather than after release?
work.
REFERENCE
Modularity
Deciding how a software system should be orga‐
nized so it can meet requirements effectively.
High‐Level Design Dividing a system into smaller parts with clear re‐
sponsibilities.
Abstraction
The broad design of the system’s main parts and
their relationships.
Separation of Concerns
Closer design work about specific modules, func‐
tions, data structures, and logic.
Cohesion
A description of what the system should do and
how information should move.
144
4 DESIGNING AND BUILDING SOFTWARE Review Questions
145
Software Construction
Input Validation
Debugging
Version Control
Refactoring
Technical Debt
COMING UP NEXT
5
Connecting, Checking, and
Improving Systems
œ LEARNING OBJECTIVES
By the end of this chapter, you should be able to:
• Explain why software that works in separate parts can still fail when the parts are
combined.
• Describe common kinds of integration and practical strategies for integrating sys‐
tems safely.
• Explain software quality in a way that includes user needs, organizational needs,
and developer responsibilities.
• Distinguish between quality assurance, quality control, verification, and validation.
• Describe different forms of testing and explain what each one is trying to reveal.
• Prepare simple test plans and test cases for beginner software projects.
147
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Introduction to Connecting and Checking Systems
148
• Explain how technical reviews help teams find problems before they become ex‐
pensive.
• Describe how teams prepare software for delivery and choose suitable deploy‐
ment approaches.
• Explain why maintenance, monitoring, and continuous improvement are normal
parts of software life.
Y THE TIME A TEAM REACHES this stage, many useful things may already exist. The user
B interface may work on its own. The database may store records. Some business rules
may already be coded. A login page may succeed. A search feature may return results.
Each part may look promising when viewed separately. Yet the system as a whole may still be
Parts working unreliable.
alone is not enough
This happens because software systems do not create value only through isolated parts. They
create value when those parts connect properly. A registration portal is not useful because it
has a login screen and a database in separate corners. It is useful because students can log
in, choose units, have rules checked, save records, receive correct feedback, and later retrieve
accurate information.
The move from separate pieces to a complete working system is therefore a major stage of
software development. It requires integration, checking, review, and improvement. Teams
that ignore this stage often discover late that the software “worked on my machine” but not as
a dependable system.
Some students feel that once code exists and the main screens appear to work, the project
is almost complete. In reality, building software and checking software are deeply connected.
A feature may appear correct with one example and fail badly with another. A system may
pass through a clean demonstration and still break under ordinary user mistakes, higher data
volume, network delay, or inconsistent assumptions between modules.
Checking is needed because software is full of hidden assumptions. One developer may assume
dates are always present. Another may assume a status field is never blank. A third may assume
a report only shows approved records. These assumptions may remain invisible until features
are connected and users behave in ordinary, unpredictable ways.
Integration, quality, and improvement belong together. Integration reveals how parts behave
together. Quality work helps teams judge whether the system is dependable, usable, secure,
and correct enough for its purpose. Improvement responds to what the team learns from in‐
tegration, testing, user feedback, and real operation. Check, learn,
improve
This means Chapter 5 is not only about defect hunting. It is also about maturity. Strong teams
do not merely hope the system is good. They create habits that help them discover problems,
judge readiness honestly, and improve both product and process.
This chapter begins with system integration and practical ways of combining software parts.
It then introduces software quality and explains how quality can be understood from several
points of view. After that, the chapter explores reviews, verification, validation, and testing as
complementary ways of checking software.
Later sections focus on test planning, defect handling, delivery, deployment, maintenance,
monitoring, and project closure. A running case study based on a student registration system
ties these ideas together so the chapter remains grounded in practical software work rather
than abstract terminology.
System integration is the process of connecting different parts of a software system so that they
work together correctly. The parts may include modules, databases, user interfaces, external
services, or even hardware devices. Integration matters because a system is useful only when
those parts cooperate reliably.
For example, a clinic appointment system may have a booking form, a schedule checker, a
patient database, and an SMS notification service. Each part may seem reasonable alone. In‐
tegration checks whether booking a real appointment causes the right data to be saved, the
correct conflict checks to happen, and the appropriate message to be sent.
Many beginner projects need to integrate at least three broad kinds of parts: internal software
modules, persistent data storage, and user‐facing screens. More advanced projects may also
integrate external APIs, authentication services, payment platforms, scanners, printers, cloud
storage, or reporting tools.
The important lesson is that integration is not rare or special. It is normal. Even a simple student
project that saves form data to a database is already performing integration.
The system is only integrated if the form sends correct data, the database stores it cor‐
rectly, and the admin page retrieves and displays the right record. If any step breaks, the
system is incomplete even if the separate pieces looked fine alone.
Integration can be difficult because parts are often built at different times, by different people,
under different assumptions. One module may expect one data format while another produces
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Integration Types and Strategies
151
a different one. One developer may assume an external service always responds quickly. An‐
other may forget what happens if the network fails.
This is why teams should not postpone integration until the end if they can avoid it. The longer
assumptions remain untested, the more painful the correction becomes.
CHECKPOINT
Why can two individually correct modules still fail when combined?
There are several common forms of integration in practical software work. Module integration
checks how internal program parts cooperate. Database integration connects application logic
to stored data and ensures records remain consistent. Interface integration connects user ac‐
tions to system behavior so that forms, buttons, and screens trigger the right logic and show
the right results.
API integration connects the system to external services such as email providers, SMS gateways,
payment services, or maps. Some systems also involve hardware and software integration, such
as barcode scanners used with a library system or fingerprint devices used with attendance
systems.
Students do not need to memorize these as a rigid list. The practical question is always the
same: what separate parts must communicate correctly for the system to do real work?
Teams integrate systems in different ways. Big bang integration means combining many parts
at once near the end. This may look fast, but it is risky because when something fails, it becomes
difficult to know which connection caused the problem.
Incremental integration combines parts step by step. This is usually easier to manage because
problems are revealed in smaller, more understandable pieces. If the login feature is integrated
first, then profile loading, then reporting, the team can trace failures more clearly.
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Common Integration Problems
152
Top‐down integration starts from higher‐level components and gradually brings in lower‐level
parts, sometimes using temporary placeholders called stubs. Bottom‐up integration starts
from lower‐level components and moves upward, sometimes using drivers to simulate higher‐
level callers. These ideas are useful because they show that integration can be staged thought‐
fully.
Continuous integration in modern development means integrating code frequently rather than
letting branches drift apart for long periods. This often goes together with automated builds
and tests. The main benefit is not fashionable tooling. The real benefit is early discovery of
integration problems.
The best integration strategy depends on project size, risk, team maturity, and tooling. Small
student projects often benefit from incremental and frequent integration because it keeps the
work visible and reduces last‐minute surprises. Larger and more complex systems may combine
several strategies.
In general, early and repeated integration is healthier than waiting until the end. Integration is
easier to fix while the project is still flexible.
Integration problems often come from incompatible components, mismatched interfaces, dif‐
ferent data formats, connection failures, hidden assumptions, weak security controls, or poor
error handling. A page may send a field called studentId while the receiving service expects
student_number. A module may expect approved data only, but receive unfiltered records. A
payment service may time out and leave the system unsure whether the payment succeeded.
Database connection issues are also common. The application may connect to the wrong
schema, use outdated table names, or mis‐handle missing relationships. Network and commu‐
nication failures can reveal whether the system behaves calmly under partial failure or simply
crashes.
Teams reduce integration problems through clear interface definitions, shared understanding
of data formats, early integration, realistic test data, strong documentation, and active com‐
munication between developers. It helps to agree on expected inputs, outputs, and error re‐
sponses instead of leaving them to guesswork.
Another useful habit is to test connections under less‐than‐perfect conditions. What happens
if the external service is slow? What happens if the database returns no rows? What happens
if the user submits the form twice? These questions make the system stronger.
Software quality is the degree to which software is fit for its intended purpose. This sounds
simple, but it is richer than “does the code run?” A system may run and still be difficult to
use, too slow, insecure, or impossible to maintain. Quality therefore includes several aspects
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Quality Management, Standards, and Reviews
154
Quality is also viewed differently by different people. A user may care most about ease of use
and dependable results. A manager may care about reliability, reporting, and reduced opera‐
tional disruption. A developer may care about maintainability, clarity, and defect prevention.
All these views matter.
Poor quality creates cost. Bugs consume time. Users lose trust. Organizations depend on un‐
reliable data. Security weaknesses expose private information. Support teams become over‐
loaded. Eventually the project spends more effort reacting to problems than improving the
product.
Good quality does not mean perfection. It means the software is dependable enough for its
purpose, and the team works deliberately to reduce avoidable failure.
Several quality attributes appear again and again in software projects. Correctness asks whether
the software gives the right results. Reliability asks whether it continues working dependably
over time. Usability asks whether people can understand and use it effectively. Efficiency
concerns speed and resource use. Security concerns protection of data and control of access.
Maintainability concerns ease of fixing and improving the system. Scalability concerns growth
in users, load, or data. Availability concerns whether users can access the system when needed.
Students do not need to memorize all of these in abstract language. They should connect them
to ordinary questions: Is it right? Is it dependable? Is it understandable? Is it fast enough? Is
it safe? Can we improve it later?
CHECKPOINT
Why can a system be functionally correct and still be considered low quality by users?
Quality management means organizing work so the project can reach the desired level of qual‐
ity. This includes planning quality goals, preventing defects where possible, checking work
products, and learning from mistakes.
Quality assurance focuses on preventing problems by improving how work is done. This may
include standards, training, review practices, and better development habits. Quality control
focuses on finding defects in the product through testing, inspection, and checking outputs.
The difference matters because quality is not created only by testing at the end. Strong teams
build quality into the process as well as into the product.
Standards and procedures help teams work consistently. A coding standard reduces unnec‐
essary variation. A testing procedure helps ensure that important checks are not forgotten.
A documentation standard makes handover easier. A release checklist helps the team avoid
missing critical preparation steps.
For first‐year students, standards should stay practical. The point is not bureaucracy. The point
is repeatability and clarity. If every team member names files differently, writes defect notes
differently, and tests in completely different ways, quality becomes much harder to manage.
Technical reviews are structured ways of checking work products before relying on them too
heavily. Reviews can be informal or more organized. Teams can review requirements, designs,
code, test plans, user manuals, and other project artifacts. Find problems
early
Reviews help because many problems are cheaper to fix before execution or before wide de‐
ployment. A requirements review may reveal ambiguity before coding starts. A design review
may reveal tight coupling before implementation spreads. A code review may reveal confusing
logic, duplication, or security weaknesses before users ever see the system.
Informal reviews are lightweight checks, such as one developer asking another to look at a
module. Peer reviews involve colleagues examining work more deliberately. Walkthroughs in‐
volve the author guiding others through the work product and collecting questions or concerns.
Inspections are more formal and structured.
In beginner projects, a lightweight peer review is often enough to teach the discipline of shared
checking.
Verification asks whether the team is building the system correctly. Validation asks whether
the team is building the correct system. These phrases are easy to repeat but much more
valuable when understood practically.
Verification concerns whether the implementation matches the requirements, design, and agreed
rules. Validation concerns whether the result actually solves the user’s real problem in a satis‐
factory way. A system can be verified well and still fail validation if it is the wrong solution. It
can also satisfy users in one area while being poorly verified in technical details that later create
risk.
Verification can happen through requirements checks, design reviews, code reviews, static anal‐
ysis, traceability, and several forms of testing. The main idea is to compare what was produced
with what was expected.
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Testing the System
157
For example, if the requirement says only approved results should be visible to students, ver‐
ification checks whether the design supports that rule, whether the code implements it, and
whether the tests cover it.
Validation often involves users and stakeholders more directly. It can happen through demon‐
strations, prototypes, usability testing, field trials, user acceptance testing, or stakeholder re‐
view. The question is not only whether the feature works technically, but whether it fits real
work, real expectations, and real conditions.
Suppose a student portal technically allows students to register in the right order, but users still
find the process confusing and frequently abandon it midway. That is a validation problem.
CHECKPOINT
Why is user acceptance testing usually more closely connected to validation than to ver‐
ification?
Software testing is the activity of executing or checking software to discover defects and build
confidence about behavior. Testing is not proof of perfection. It is a disciplined way of learning
where the software fails and where it appears dependable.
Unit testing checks individual parts such as functions, classes, or modules. Integration testing
checks interaction between connected parts. System testing checks the complete system as a
whole. Acceptance testing checks whether users or stakeholders agree the software is ready
for its intended use.
There are also special‐purpose tests. Regression testing checks that changes did not break
older working behavior. Performance testing explores speed and behavior under load. Security
testing explores authentication, authorization, protection of data, and resistance to misuse.
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Test Planning and Test Cases
158
Unit testing Does this small part behave correctly on its own?
Integration testing Do these connected parts work together properly?
System testing Does the whole system behave as expected overall?
Acceptance testing Do users or stakeholders agree it is suitable for use?
Regression testing Did a new change damage something that used to work?
Performance testing Is the system fast and stable enough under expected load?
Security testing Are access controls, data handling, and protections working properly?
No single kind of testing is enough. Unit testing may show that the fine calculation function
works, but not whether the borrowing screen calls it at the right time. Integration testing may
show the modules connect, but not whether users understand the workflow. Acceptance test‐
ing may show the workflow is acceptable, but not whether performance remains stable during
peak use.
This is why testing should be layered rather than treated as one event near the end.
A test plan is a simple statement of what will be tested, how it will be tested, in what environ‐
ment, with what data, by whom, and when. Even small student projects benefit from basic test
planning because otherwise testing tends to become rushed, uneven, and incomplete.
A practical test plan should identify the features to be tested, any features outside current
scope, the environment, the test data, the schedule, and the responsibilities. This does not
need to be long. It needs to be useful.
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Defects and Defect Management
159
A test case describes a specific check. It usually includes an identifier, objective, setup or input
data, steps, expected result, actual result, and a pass/fail outcome. Writing test cases forces
the team to be more precise about what correct behavior means.
For example, a login test case might specify valid credentials, steps to sign in, the expected
landing page, and the expected behavior when the password is wrong. A registration test case
might check what happens when a student chooses two clashing courses.
Test data should reflect realistic use. If every test uses neat and perfect values, many important
problems stay hidden. Teams should include normal cases, boundary cases, invalid cases, and
unusual but possible situations.
A defect is a flaw in the software or its related artifacts that may lead to wrong behavior. People
also use words such as bug, error, or failure, though they are not always exactly identical. For
first‐year students, the practical issue matters more than the terminology: something is wrong,
it needs to be described clearly, and the team must handle it systematically.
A useful defect report explains what happened, how to reproduce it, what was expected, what
actually happened, how severe the issue is, and how urgent it is. Weak defect reports waste
time because other team members cannot reproduce or understand the problem.
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMSPreparing the System for Delivery and Deployment
160
For example, saying “login broken” is not enough. A better report says that when a valid stu‐
dent signs in after changing a password, the system redirects to a blank page instead of the
dashboard, and it happens consistently in a specific browser or context.
After a defect is fixed, the team should retest the corrected behavior and, when necessary,
run regression checks nearby. Defects also provide learning. If similar defects keep appearing,
the team should ask whether the root cause lies in unclear requirements, poor design, weak
review, inadequate test data, or rushed coding.
CHECKPOINT
Why is it not enough to fix a defect once and move on without asking why it appeared?
Before software is delivered, the team should check whether the important features are com‐
plete enough, whether critical tests have passed, whether serious defects have been resolved
or consciously deferred, whether documentation is current, and whether users or support staff
have what they need.
Delivery is not just sending files. It is preparing the system and the people around it for suc‐
cessful use.
Release preparation often includes version numbering, release notes, installation or setup in‐
structions, backup planning, and communication about what changed. Even in student projects,
it is valuable to practice this discipline because it reflects professional care.
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS System Maintenance, Monitoring, and
Improvement
161
Deployment means placing the system into the environment where it will actually be used.
This may require installing software, configuring databases, creating user accounts, assigning
permissions, and providing training.
Teams can deploy in different ways. Direct changeover replaces the old system immediately.
Parallel changeover runs old and new systems together for a while. Phased changeover intro‐
duces the system in parts. Pilot changeover starts with a smaller group before broader rollout.
The right choice depends on system risk, user readiness, organizational size, and how much
failure can be tolerated during transition.
Deployment is not complete when installation ends. Early user support matters because real
use reveals real friction. Training, quick‐response support, and careful observation of early
problems can prevent frustration from turning into rejection.
Many beginners imagine that once software is deployed, the main work is over. In reality, de‐
ployment often marks the beginning of a different kind of work. Systems need fixes, adaptation,
improvement, and protection over time. Software lives
after release
helps the system fit changed environments, rules, or platforms. Perfective maintenance im‐
proves performance, features, or usability. Preventive maintenance reduces future problems
by improving structure, security, or internal quality before visible failure happens.
Monitoring means observing how the system behaves in operation. Teams may watch avail‐
ability, response time, logs, security events, usage patterns, and user complaints. Monitoring
matters because some problems appear only in live conditions with real users, real traffic, and
real timing.
Monitoring also helps prioritization. If a system is technically functional but users repeatedly
struggle with one process, that issue deserves attention even if it does not produce a crash.
Improvement should not depend only on crisis. Strong teams collect feedback, notice patterns,
prioritize useful changes, and improve both the product and the process. If several users com‐
plain about the same unclear message, improve the interface. If the same category of defect
appears in every sprint, improve review or testing habits. If deployment support was chaotic,
improve the release checklist.
Project closure is the deliberate finishing of a project or project phase. It includes confirming
delivery, handing over the system or artifacts, documenting remaining issues, capturing lessons
learned, and releasing resources or responsibilities appropriately.
Closure matters because unfinished endings create confusion. Without clear closure, people
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Running Case Study: Checking and Deploying a
Student Registration System
163
may not know whether the system was accepted, what still needs attention, or who owns the
next stage of work.
One of the most useful closure activities is reflecting on what went well, what went badly, and
what should be improved next time. This is valuable in both student projects and professional
work. Lessons learned prevent the team from repeating avoidable mistakes blindly.
At closure, the team should be able to explain what was delivered, what remains unresolved,
what recommendations are important, and what documents or instructions the next users or
maintainers need. This creates continuity.
Consider a student registration system with modules for student accounts, course registration,
fee verification, timetable checking, and reporting. Earlier chapters showed how such a system
might be planned, designed, and built. Now the team must integrate it, verify it, validate it,
deploy it, and prepare it for continued use.
The team first connects login with student account data, then connects course registration with
timetable and prerequisite checks, then connects fee verification so that students with unpaid
balances receive the correct message. Reporting is integrated later so approved registration
records can be summarized for administrative staff.
During this work, the team discovers a mismatch: the timetable module expects one format
for course codes while the registration module uses another. Because integration is being done
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Running Case Study: Checking and Deploying a
Student Registration System
164
incrementally, the team notices the issue early and corrects it before more features depend on
the inconsistency.
The team performs a short requirements review to check that important registration rules are
clear. A design review reveals that one report pulls unapproved records accidentally. Code
review reveals repeated validation logic that should be shared.
Verification then proceeds through unit tests on registration rules, integration tests on the in‐
teraction between fee verification and registration, and system tests covering end‐to‐end regis‐
tration. Regression checks confirm that recent fixes did not break previously working behavior.
Two administrative staff members and several students participate in user acceptance testing.
They confirm that the system generally works, but students report that the clash warning mes‐
sage is unclear. Staff also request a clearer summary view of rejected registrations. These
findings are not treated as embarrassment. They are treated as valuable validation results.
The team updates the documentation, writes release notes, prepares a backup of test data, and
decides that a pilot‐style deployment is safest. One department will use the system first while
the team monitors errors and collects feedback. Training notes are prepared for staff who will
assist students.
After early use begins, monitoring shows that registration checks are slower during peak hours.
The team investigates the database queries and improves one report. User feedback also re‐
veals that students want clearer next‐step guidance after a rejected registration. This becomes
part of perfective maintenance.
CHECKPOINT
In this case study, which activities belonged mainly to verification, and which belonged
mainly to validation?
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Chapter Summary
165
Software systems must be connected, checked, and improved before they can be trusted in real
use. Integration joins modules, interfaces, databases, and services into one working whole,
while quality work helps teams judge whether that whole is correct, usable, reliable, secure,
and maintainable enough for its purpose. Reviews, standards, and quality planning help pre‐
vent defects early rather than relying only on late testing.
Verification and validation ask different but equally important questions: whether the system
was built correctly and whether the right system was built. Testing supports both by checking
units, integrations, complete systems, acceptance, regression, performance, and security con‐
cerns. Defect management, delivery preparation, deployment strategy, maintenance, monitor‐
ing, and project closure all help software move from a build artifact into a dependable service
that can continue improving over time.
n KEY TAKEAWAYS
• A system is only valuable when its parts work together correctly.
• Quality includes correctness, usability, reliability, security, maintainability, and
other practical concerns.
• Reviews and standards help prevent defects before testing alone can find them.
• Verification checks whether the system was built correctly; validation checks
whether it is the right system for users.
• Different forms of testing reveal different kinds of risk.
• Delivery and deployment require preparation, not only working code.
• Maintenance and monitoring are normal parts of software life, not signs of failure.
• Improvement should continue after release through feedback, learning, and de‐
liberate change.
1. A team says, “Our modules work separately, so we are almost finished.” What risks would
you point out?
2. Why can a system pass many technical checks and still fail users in practice?
3. Compare verification and validation using a university portal example.
4. When might a pilot deployment be wiser than direct changeover?
5. How can repeated defects teach a team something about its process rather than only
about its code?
CHAPTER REVIEW
• Integration turns separate parts into a 1. Which parts of the system are most risky to
working system and reveals hidden as‐ integrate?
sumptions. 2. How will the team know the product is both
• Quality work includes prevention, check‐ technically correct and useful to users?
ing, and continuous improvement. 3. What tests, reviews, and release checks
• Verification, validation, reviews, and test‐ must happen before deployment?
ing each contribute a different kind of con‐ 4. How will the team monitor, maintain, and
fidence. improve the system after release?
• Deployment, maintenance, and monitor‐
ing continue the software life after con‐
struction ends.
REFERENCE
Quality Control
Connecting software parts so they work together
correctly as one system.
Technical Review
Combining parts step by step instead of all at once.
Continuous Integration
A structured check of a work product such as re‐
quirements, design, code, or tests.
Software Quality
Checking whether the system was built correctly
according to agreed requirements and design.
Quality Assurance
Checking whether the built system is the right one
for real users and stakeholders.
168
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Review Questions
169
Unit Testing
Defect
Integration Testing
Testing the complete system as a whole. Placing the system into the environment where it
will actually be used.
Acceptance Testing
Maintenance
Monitoring
Project Closure
COURSE GLOSSARY
Key terms for Software Development Practices.
Program
Software System
Stakeholder
A short fixed period in which a team works toward
a clear goal and produces a usable increment.
Requirement
A meeting where the team chooses what it can
complete in the sprint and agrees on a sprint goal.
Product Backlog
A short coordination meeting where team mem‐
170
5 CONNECTING, CHECKING, AND IMPROVING SYSTEMS Review Questions
171
Functional Requirement
A meeting where completed work is shown to
stakeholders for feedback.
Non‐Functional Requirement
Testing
Maintenance