Agile and DevOps in Practice
Prerequisite Knowledge
This lecture builds on the following concepts from earlier lectures. If any feel unfamiliar, review the linked notes before proceeding.
Previously Covered in This Subject
- The Waterfall Model — 1.9 The Waterfall Model (Lecture 1)
- Agile Methodology — 1.10 Agile Methodology (Lecture 1)
- Roles in Agile — 1.13 Roles in Agile (Lecture 1)
- Where Waterfall Still Wins — 2.2.2 Where Waterfall Still Wins (Lecture 2)
- The DevOps lifecycle phases — 3.7 The DevOps Lifecycle: Changes Across the SDLC (Lecture 3)
- Release anti-patterns — 3.4 Common Release Anti-Patterns (Lecture 3)
- Test-Driven Development — 4.8 Test-Driven Development (Lecture 4)
- Feature-Driven Development — 4.9 Feature-Driven Development (Lecture 4)
Agile and DevOps in Practice
This session turns the DevOps theory you have already covered into a working walkthrough. You follow one Flutter application from the moment a client hands over a new project, through a full Scrum cycle managed in Jira, a code change committed to Git, an automated build in Jenkins, and the background scheduling that keeps everything running with cron jobs. Along the way you get the complete tool map of a DevOps engineer's daily work, so you know what each tool does, why it exists, and how the pieces talk to each other.
Think of this session as a flight over the entire DevOps landscape before you ever land on any single tool. The theory sessions gave you the why — this session gives you the how: one concrete application moving through real tools, in the order a real team would use them. When the walkthrough mentions a tool you have not met yet, do not stop to learn it — the map comes first, the deep dive comes in the practical sessions that follow.
The route the session takes is the route a story takes: a client meeting decides the development model (waterfall or agile), a Scrum team turns that model into two-week sprints on a Kanban board, story points size the work, a burndown chart watches the sprint's health, Jira tracks every state change, Git stores and branches the code, Jenkins builds and tests it automatically, and cron jobs schedule the background work. By the end you will know not just what each tool does, but where it sits in the chain and which role owns it at each step.
5.1 The DevOps Tool Landscape
A DevOps engineer does not live inside one tool. The role spans the whole chain of taking code from a developer's machine to a running production service, and each link in that chain has its own set of tools. You are not expected to master all of them in one sitting — the practical sessions that follow this one cover each tool in turn — but you need the map first: what exists, which job each tool does, and where it sits in the process.
Hook. If a developer writes perfect code but nothing around it is automated, the software still never reaches users. Every link in the chain — storing the code, building it, testing it, shipping it, watching it in production — is a tool job, and the DevOps engineer is the person who owns all of them. This section is that chain, drawn as one map.
Think of the tool landscape as a production line with six stations: the operating system everything runs on (Linux), the network that connects machines (TCP/IP family), the scripts that automate work (shell scripts), the store where code lives (configuration management), the machines that build and ship it (integration and deployment), and the instruments that watch it in production (monitoring). Two more stations feed the line — testing tools and code-quality tools — and the DevOps engineer stands at the end of the line as the gate keeper.
5.1.1 Why Linux Is the Base
Every DevOps environment, whatever you are building, starts with Linux. Nobody builds a real-time deployment pipeline on a Windows server, and Mac is rare too. Linux is the default for two reasons. First, it is open source — free to use, free to inspect, and free to modify. Second, it gives you a huge ecosystem of tools, and because the source is open you can customize almost anything that your networking and deployment setup needs. If a standard package does not do exactly what your environment requires, you can change it. That level of control simply does not exist on closed platforms.
Analogy. Linux is like buying a car with the hood open and the service manual printed: you can see every part, swap any part, and tune it to your exact route. A closed platform is a sealed car — you drive it, but you cannot change how it behaves. DevOps work is precisely the kind of work that needs the open hood: build servers, cron schedulers, and container runtimes are all tuned at a level of detail that only an open system allows.
The practical consequence: the commands, scripts, and scheduling tools taught in this course (shell scripting, cron, Jenkins "execute shell" steps) are all Linux-world skills, and they transfer directly to any cloud deployment. Whatever the company's stack, the deployment layer underneath it is almost always Linux.
5.1.2 Networking Protocols: TCP/IP, HTTP, HTTPS, UDP
Since deployment is fundamentally about machines talking to each other, you also need the networking vocabulary. The protocols used for all of this networking come from the TCP/IP family — the professor actually misspoke at first and corrected himself to TCP/IP, so keep that name straight. TCP/IP (Transmission Control Protocol / Internet Protocol) is the underlying protocol suite everything else rides on. HTTP and HTTPS, the protocols your web applications speak, are part of TCP. UDP (User Datagram Protocol) is the other main transport, and it carries the video and audio protocols — streaming traffic, where losing the odd packet matters less than keeping up with real time. So HTTP, HTTPS, and UDP all sit on top of IP. You will see these in detail in later sessions, but the hierarchy is: IP at the bottom, TCP and UDP on top of it, and HTTP/HTTPS as TCP applications.
The protocol stack, from the bottom up:
- IP (Internet Protocol) — the lowest layer; moves data packets between machines by address. Everything in the family rides on it.
- TCP (Transmission Control Protocol) — a reliable transport built on IP: it checks that every packet arrives, and re-sends anything lost. Used when correctness matters — web pages, file uploads, commits to Git.
- UDP (User Datagram Protocol) — a fast, unreliable transport built on IP: it fires packets without checking delivery. Used when timing matters more than completeness — video and audio streams.
- HTTP/HTTPS — application protocols that run on top of TCP. HTTPS is HTTP with encryption (the S stands for secure), which is why browsers and web servers use it for anything sensitive.
Pitfall — mixing up the layers. Students often say "HTTP and UDP are the same kind of thing." They are not: HTTP is a request–response application protocol (a browser asks a server for a page), while UDP is a transport protocol (a stream, not a question-and-answer). The right mental picture is a stack: HTTP and HTTPS sit on TCP, TCP and UDP both sit on IP, and IP moves the raw packets.
Visual intuition. Picture a layered cake: the bottom plate is IP (every packet gets an address), the next layer up has two halves — TCP on the left (checked, orderly delivery, like registered mail) and UDP on the right (fast, unregistered, like a postcard drop). On top of the TCP half sit HTTP and HTTPS, because web traffic wants guaranteed delivery; on top of the UDP half sit the streaming protocols, because a video that pauses to re-check one lost packet would freeze on screen.
5.1.3 Shell Scripting and Background Jobs
Whenever you need to start a process, create a cron job, or run any job in the background, you write shell scripts — small programs executed by the Linux command-line shell. This is how DevOps work gets automated: a script encodes the steps, and a scheduler runs it repeatedly. There are teams that operate on Windows, and for them the equivalent is a Windows batch file, but the overwhelming majority of the industry uses Linux shell scripting, so that is the skill to invest in.
A shell script is a plain text file containing the same commands you would type at a terminal, saved and made executable. Its power is that it can be run by a machine: a human types the build steps once, the script replays them forever, and a scheduler (like cron, Section 5.16) triggers the script at set times without anyone at the keyboard. The build pipeline in Section 5.14 is exactly this — a script the developer runs manually at first, then hands to Jenkins to run automatically.
5.1.4 Configuration Management and Version Control
Configuration management covers everything about storing, sharing, and tracking your code. The tool for this is Git, and around Git sit the hosting platforms: GitHub, GitLab, and Bitbucket. These all do the same core job — code repository access: uploading code, downloading code, and version control, meaning the ability to track history, create branches, and switch between versions of the codebase. Git, Bitbucket, TeamCity, and SVN all belong to this same configuration-management family. Jenkins technically builds code rather than storing it, but it is still grouped under configuration management in this tool map, because it consumes the repository and manages the build history.
Version control (also called source control or revision control) is the mechanism for keeping multiple versions of your files so that when you modify a file you can still reach the previous revisions. The two fundamental promises are: any version of any file can be reproduced, and every change can be traced to who made it, when, and why. Git is the modern open-source tool; GitHub, GitLab, and Bitbucket are hosted platforms that add a shared server, web review, and integrations; SVN (Subversion) is the older centralized system still found in older enterprises; TeamCity is JetBrains' build server, which also manages build history.
Analogy. The repository is the team's shared library: Git is the librarian who records every edition of every book, the hosting platform is the building where the books live, and a branch is a private desk where you can work on a copy without disturbing the shelves. The commit is the moment you hand your annotated copy back to the librarian — from then on, your change is part of the shared collection (see the commit in Section 5.11.2).
5.1.5 Integration and Deployment
Version control and integration use the same family of tools. For deployment, Jenkins and CircleCI come in. Their job: take the code, build it, and push the result to whatever environment the project has — the automation environment, pre-production (preprod), UAT (user acceptance testing), or SAT (system acceptance testing). Whatever environments exist in your organization, the deployment tool moves the built artifact there.
The deployment tool's job in one sentence: turn a repository commit into a running artifact in a target environment. The environment names are a vocabulary every organization shares: the automation environment is where pipelines test themselves; preprod (pre-production) mirrors production for final checks; UAT (user acceptance testing) is where the client or business confirms the software does what they asked; SAT (system acceptance testing) is where the complete system is validated end to end. Jenkins is the on-premises workhorse; CircleCI is the same job offered as a cloud service.
5.1.6 Monitoring and Analytics
Once an application is running in production, you need eyes on it. If something goes down, if the load gets heavy, if there is unusual network traffic, or if a service stops responding properly, the analytics and monitoring tools tell you. They answer questions like: how much traffic is coming in, how many users are logged in, what is the concurrency limit, how many connections are connected to the server, what is the RAM usage, what is the processor usage, and how many VMs are attached. Named tools in this space include Google Analytics, Firebase, Prometheus, Grafana, and New Relic — there are many players, some open source and some licensed, and they can be integrated into the same pipeline. Real-world: Prometheus and Grafana together are a common open-source monitoring stack in production Kubernetes setups; New Relic is a commercial APM (application performance monitoring) product.
Monitoring splits into two questions: is it up? (infrastructure metrics — CPU, RAM, connections, VM count, concurrency) and who is using it? (analytics — traffic volume, logged-in users, page activity). Google Analytics and Firebase cover the analytics side for web and mobile apps; Prometheus collects time-series metrics and Grafana draws them on dashboards; New Relic is a commercial APM (application performance monitoring) product that traces how slow each request is inside the application.
5.1.7 Testing Tools
Testing splits into many types — unit testing, regression testing, normal functional testing, performance testing, and security testing — and each has its own toolset. The unit-testing map looks like this: JUnit is for Java unit testing; Karma, Jasmine, and Cucumber are mainly for JavaScript-level and hybrid-environment testing; Mockito is for mock testing (simulating dependencies so you can test a component in isolation); and Selenium, plus what is labeled "APM" here, is for native testing of mobile or desktop system applications — the label is the tool Appium, the mobile test-automation companion to Selenium: Selenium drives web browsers, and Appium drives native mobile and desktop applications. The pair covers "click through the interface and check it behaves."
The unit-testing tool split by platform:
- JUnit — the standard unit-testing framework for Java.
- Karma, Jasmine, Cucumber — JavaScript-level and hybrid-environment testing: Jasmine writes behavior-style assertions, Karma runs them in real browsers, and Cucumber expresses tests in near-plain-language scenarios.
- Mockito — mock testing: it simulates (mocks) dependencies — databases, APIs, other services — so a component can be tested in isolation, without the real dependency being present.
- Selenium — UI test automation for web applications: it drives a real browser through clicks and form fills.
- Appium — the mobile/desktop sibling of Selenium: UI test automation for native apps on Android, iOS, and desktop.
Pitfall — confusing mock tests with integration tests. A Mockito mock proves the component's logic when its neighbor pretends to behave; it does not prove the two real components work together. Teams that only mock discover at the end of a sprint that two perfectly unit-tested services cannot actually talk to each other. Mocks and real-environment tests are complementary, not substitutes.
5.1.8 Code Quality and Linting Tools
Quality measurement is a separate category, and it is about catching code irregularity. A developer uploads code that has quality issues: a variable that is declared but never used, dead code after a return statement, unused functions, very big modules, a function longer than 50 lines of code, and sometimes even memory leaks. Linting tools scan for these problems. The map: Android Lint for Android applications, JS Lint and ES Lint for HTML-based applications, Swift Lint for iOS, Apache JMeter for Java-based applications, and Micro Focus LoadRunner for load testing.
Linting is the automated scan for code irregularity — patterns that compile and run but signal sloppy or risky code: an unused variable, unreachable code after a return, an unused function, an oversized module, a function stretching past ~50 lines, or a memory leak. The lint tools are platform-specific: Android Lint for Android apps, JS Lint and ES Lint for HTML/web JavaScript, Swift Lint for iOS, Apache JMeter for Java-based applications, and Micro Focus LoadRunner for load testing. Lint is a gate in the pipeline: a lint failure stops the release until the code is cleaned (Section 5.14.2).
5.1.9 The DevOps Engineer's Span
A DevOps engineer touches all of these areas — analytics, the CI/CD process, configuration management, scripting, networking, and testing and measurement tools — because it is the deployment engineer who runs these tools and reads their output. Based on success or failure of each stage, you either move the application to production or you stop the production release. That gate-keeper role is why the whole tool map matters: each future session dives into one of these tools, and this overview is the frame that holds them together.
Recap. The tool landscape is one chain: Linux at the base, the TCP/IP stack connecting machines, shell scripts automating the work, Git and its hosts storing the code, Jenkins/CircleCI building and deploying it, monitoring watching it, and testing and lint tools checking it at every gate. Bridge. The next section plugs a concrete application into this map — a Flutter project and the architecture it will be deployed into — so that every tool you just placed has a real job to do.
Real-world & domain. This map is not academic — it is the actual daily toolset of deployment and site-reliability teams. Prometheus and Grafana form the standard open-source monitoring stack in production Kubernetes setups, New Relic is the commercial APM used for request-level performance, GitHub/GitLab/Bitbucket host the repositories, and Jenkins on-premises with CircleCI in the cloud are the CI/CD workhorses. The exam-relevant skill from this section is the map itself: for each tool, which category it belongs to — configuration management, deployment, monitoring, testing, or linting — because every practical session that follows builds on these categories.
5.2 The Sample Project and Solution Architecture
Hook. A DevOps pipeline that works for one app could still be useless for the next one if every target platform needed its own machinery. The running example is chosen to prove the opposite: one codebase, four different applications, one identical deployment process. If you can ship a Flutter app, you have seen the whole pattern.
5.2.1 Why Flutter
To make every upcoming demonstration concrete, the running example is a Flutter application. Flutter is chosen because a single Flutter codebase compiles to Android, iOS, and web, and on the demo machine even macOS is available. So from one project you get one desktop system application, two mobile applications (Android and iOS), and one web application. Four targets, one DevOps process. You do not need to know Flutter itself — it will be explained in later classes — but it is the perfect vehicle for showing that the deployment machinery is identical no matter which platform you ship to.
Flutter is Google's open-source UI framework that compiles a single Dart codebase into native applications for multiple platforms. For this course the detail that matters is the multi-platform property: one project produces
- an Android application (installed as an APK),
- an iOS application (installed as an IPA),
- a macOS desktop application (installed as a DMG),
- a web application (served by a browser).
Four targets from one source — and every one of them is shipped by the same pipeline. The artifact types differ (Section 5.12), but the build, test, lint, and release steps do not.
5.2.2 The Client and Web Tiers
The overall solution architecture shows how an application is deployed and what the DevOps operations protect. At the front is the client tier — the end user's device running the app. Next comes the web tier, the security perimeter. Here you find the gateways through which push notifications arrive (this is how WhatsApp-style messages and other alerts reach your phone), firewalls, and load balancers — the devices that spread incoming traffic across many servers. This zone is also called the DMZ (demilitarized zone): the area where a lot of security protocols run, including reverse proxies and port tunneling. All the tunnelling, proxy, and firewall work happens in the web tier before any request is allowed deeper into the system.
The solution is a layered chain of four tiers. From the front:
- Client tier — the end user's device running the application (phone, laptop, tablet).
- Web tier — the security perimeter. Everything outside passes through here first: firewalls (filter who gets in), load balancers (devices that spread incoming traffic across many servers so no single machine is crushed), push-notification gateways (how alerts like WhatsApp messages reach the phone even when the app is not open), reverse proxies (entry points that hide the internal servers behind them) and port tunneling. Because this zone is exposed to the internet, it is called the DMZ (demilitarized zone) — the area where the heavy security protocols run. No request is allowed deeper into the system before this tier has checked it.
- Application tier (normally called the service tier) — where the actual features live.
- Data tier — the storage and enterprise systems at the back.
Pitfall — thinking the firewall is the whole defense. The web tier is not one wall but a sequence of gates: firewall, load balancer, reverse proxy, tunneling rules — each doing a different job. A reverse proxy, for example, does not filter like a firewall; it stands in front of internal servers, receives requests on their behalf, and forwards them. Layering these is what makes the perimeter survivable; expecting a single device to do all of it is how systems get breached.
5.2.3 The Application Tier
Cross the web tier and you reach the application tier, normally called the service tier. Multiple services run here for you, arranged behind further layers of security: external proxies and internal proxies, external management tools and internal management tools. Below all that sit the microservices — the individual services that actually deliver features: one for authentication, one for file management, one for role management, the Microsoft Office 365 applications such as email and Teams, a social media connector for Facebook and similar platforms, chatbot services, AR/VR and AI tools, and a security layer. All of these produce the data the end application shows.
The application tier runs the microservices — the individual small services that each deliver one feature. In the example architecture the list is typical of a real modern platform:
- an authentication service (who the user is),
- a file management service,
- a role management service (what the user is allowed to do),
- Microsoft Office 365 applications such as email and Teams,
- a social media connector for Facebook and similar platforms,
- chatbot services,
- AR/VR and AI tools,
- a security layer.
Because this tier is one step behind the DMZ, it is guarded by further security layers — external proxies and management tools facing the perimeter, internal ones inside the tier itself.
Analogy. Think of the tiers as rooms in a bank. The client is the customer at the street door, the web tier is the guarded lobby (metal detectors, reception desk, the DMZ), the application tier is the staff offices where the actual work happens, and the data tier is the vault at the back. Each doorway has its own guard; the deeper you go, the stricter the checks — and money (here, data) is only touched at the deepest level.
5.2.4 The Data Tier and Three Kinds of Code
At the back sits the data tier: ERP tools, CRM tools, the basic database providers, office providers, and everything legacy. The architecture is a chain — client tier at the front, web tier, application tier, data tier — and each layer is protected by its own security mechanisms. From a deployment perspective, note that you ship three kinds of artifacts: the client code, the application code, and the database code. All three are deployed, and all three are part of the deployment architecture that later sessions dissect in detail.
The data tier holds the systems that store and manage the business's data: ERP (enterprise resource planning) tools, CRM (customer relationship management) tools, the database providers themselves, office providers, and everything legacy that the company has accumulated. The chain is: client tier → web tier → application tier → data tier, each layer protected by its own security mechanisms.
From a deployment perspective the tier diagram hides an important fact: you ship three kinds of code, not one.
- the client code — what runs on the user's device,
- the application code — the microservices in the service tier,
- the database code — schema changes, migrations, and stored procedures.
All three are deployed, all three must move through the pipeline, and a release that ships the app without its database change is a release that breaks in production.
Recap. The sample project is a Flutter app deployed into a four-tier architecture — client, web (the DMZ security perimeter), application (microservices), and data — and the deployment ships three kinds of artifacts: client, application, and database code. Bridge. With the architecture in place, the session steps back from the machines to the process that builds them: how a new project decides between waterfall and agile (Section 5.3), which is the first decision of every engagement.
Real-world & domain. The four-tier picture is the standard shape of enterprise deployments: the DMZ with firewalls, load balancers, and reverse proxies is exactly what sits in front of every bank, hospital, and SaaS platform; Office 365, social connectors, chatbots, and AI services are the real microservices inside modern service tiers; and the "three kinds of code" rule is why release engineering treats database migrations as first-class artifacts alongside binaries.
5.3 Waterfall versus Agile
A new project starts with a first meeting between your team and the client: what are we building, what is the timeline, how many sprints will it take, what is the team structure. One of the first decisions in that meeting is the development model: waterfall or agile. Modern software projects almost never choose waterfall. Agile is the default, but understanding why — and when the exception applies — is exactly the kind of judgment a DevOps engineer needs.
Hook. Imagine ordering a custom kitchen: the contractor asks for full payment, disappears for six months, then returns with a kitchen you have never seen. That is waterfall for software. The question this section answers is why the industry abandoned that model — and why a few industries still refuse to.
5.3.1 Where Waterfall Still Wins
Waterfall is the sequential model: requirements, design, implementation, testing, delivery, each phase finished before the next begins, on a long timescale — three months, six months, or more. It survives in places where you cannot change the product every two weeks. Military operations, for example: when you build large ships, aircraft, or weapons systems, you cannot revise the product every two weeks. The same logic applies to manufacturing and hardware: the physical production line cannot absorb weekly changes. So waterfall remains the traditional practice in manufacturing and retail hardware contexts.
Waterfall is the sequential development model: requirements → design → implementation → testing → delivery, where each phase is fully finished before the next one starts. Its defining property is the long, unbroken timescale — three months, six months, or longer between the first requirement and the first delivered product. It survives exactly where the product cannot be revised every two weeks:
- Military systems — large ships, aircraft, weapons systems, whose requirements and certifications are fixed years ahead.
- Manufacturing and hardware — the physical production line cannot absorb weekly changes; retooling is expensive and slow.
- Retail hardware contexts — physical products, for the same reason.
The test for waterfall is not tradition; it is changeability. If the artifact physically cannot be changed mid-project, waterfall is the honest model.
5.3.2 Why Agile Wins in Software
Software is a volatile market, driven by people's reactions, and there agile wins for three reasons. First, you get faster processing and a small, working, testable increment of code every sprint — a viable product emerges within weeks, not months. Second, competition forces the pace: if two competitors are shipping new features to users every two weeks, you must ship on the same rhythm or lose the market. Third, and most important: unclear requirements are an automatic vote for agile. If the client is not clear about what they want, or is even doubtful themselves, waterfall is a trap — after six months of building, the client can say "this is not what we expected, we want something different," and you are facing a nightmare. With agile you show something every two weeks, so the client can correct course while the damage is still small. If only two weeks of work needs redoing, you simply change direction in the next two weeks.
Software lives in a volatile market — driven by people's reactions, habits, and competitors — and there agile wins for three reasons:
- A viable product emerges within weeks. Every sprint produces a small, working, testable increment of code; after two or three sprints the client is already touching a real product, not a document.
- Competition forces the pace. If two competitors ship new features every two weeks, you must ship on the same rhythm or lose the market. A six-month release cadence simply cannot survive that pressure.
- Unclear requirements are an automatic vote for agile — and this is the decisive one. If the client is not clear about what they want — or is doubtful themselves — waterfall is a trap: after six months of building, the client can say "this is not what we expected, we want something different," and the whole investment is wasted. Agile shows something every two weeks, so the client corrects course while the damage is still small. If only two weeks of work needs redoing, you change direction in the next two weeks.
Pitfall — treating agile as "no planning." Agile is not an excuse to skip requirements; it is a way to discover them. The agile answer to an unclear requirement is a two-week experiment the client can react to, not an unstructured sprint. Teams that abandon planning entirely ship chaos, and clients notice quickly.
5.3.3 The Comparison in One View
Both models run the same underlying activities — build, test, review, release — but at wildly different timescales. Waterfall does everything over six months or more; agile compresses the loop to two weeks. That two-week cycle is the heartbeat of everything that follows in this session.
| Dimension | Waterfall | Agile |
|---|---|---|
| Process shape | Sequential phases, each finished before the next | Repeating two-week cycles (sprints) of build-test-review-release |
| Requirements | Fixed up front, fully specified | Discovered and refined as the client reacts to working increments |
| First visible product | After months (end of the chain) | After the first sprint (weeks) |
| Cost of a wrong direction | Six months of work lost | Two weeks of work lost |
| When it fits | Products that cannot change mid-project (ships, aircraft, hardware, manufacturing) | Software in a volatile market, or any unclear requirements |
When to pick which: if the product can be revised frequently and the market moves fast, agile — the default for software; if the artifact is physically frozen, waterfall remains the honest choice.
Recap. Waterfall and agile run the same activities at different timescales — months versus two weeks — and the deciding factor is whether the product can change course cheaply. Bridge. Agile is delivered through a specific process with a specific team shape: Scrum (Section 5.4) — the two-week heartbeat made formal.
Real-world & domain. The two-week release rhythm is the industry standard behind continuous delivery: the same cadence that lets a client correct course is what lets a deployment team ship small, low-risk releases constantly. Lean manufacturing's value-stream thinking underpins this — small batch sizes and fast feedback are exactly what waterfall's six-month batch lacks.
5.4 The Scrum Team and the Sprint
Agile is delivered through a process called Scrum, and Scrum is run by a small team following a fixed cycle called a sprint.
Hook. Agile says "ship every two weeks," but someone still has to decide what to ship, who builds it, and how fast. Scrum is the answer: a fixed team shape and a fixed cycle that turn the agile idea into a repeatable machine. The two numbers that define that machine are ten and two — ten people, two weeks.
5.4.1 Roles in a Scrum Team
A Scrum team has a product owner (PO) — the person who is effectively the client's representative inside your team, providing the requirements. Then there is the Scrum Master, who handles the entire management side: helping the team, connecting tester with developer, developer with tester, and both with the product owner. The Scrum Master is responsible for the smoothness of the whole Scrum process. Below them sit the developers, the testers, and sometimes UX designers. That is the minimal shape of a Scrum team.
A Scrum team has three role groups:
- Product Owner (PO) — the client's representative inside the team. The PO provides the requirements, owns the backlog, and decides what gets built and in what order. The PO is not a manager of people; they are the manager of what the team builds.
- Scrum Master — handles the entire management side of the process: helping the team, connecting tester with developer, developer with tester, and both with the product owner. The Scrum Master is responsible for the smoothness of the whole Scrum process — removing blockers, keeping ceremonies running, making sure the machine keeps turning.
- Developers, testers, and sometimes UX designers — the people who actually build and verify the product.
That is the minimal shape of a Scrum team: one PO, one Scrum Master, and the hands below them.
Analogy. The team is a small ship. The PO is the navigator, who decides the destination (requirements and priorities); the Scrum Master is the engineer of the ship itself, who keeps the rudder, sails, and crew coordinated so the voyage stays smooth; the developers and testers are the deck crew doing the actual work. A ship with no navigator goes nowhere useful; a ship with no process engineer falls apart halfway.
5.4.2 Optimal Team Size: Ten People
The optimal Scrum team is about ten people: one Scrum Master, one product owner, two or three developers, one or two testers, and one or two UX developers. This number matters. If the team grows past ten people, you do not keep adding members to the same team — you create another Scrum team. A team above ten becomes a management nightmare: coordination cost grows, and the Scrum Master can no longer keep the process smooth. So the rule is: ten people is the ceiling, and beyond it you split.
Scope of the ten-person rule. The ten-person ceiling is about coordination, not capability. As a team grows, the number of pairs who must talk to each other grows roughly with the square of the team size: at five people there are ~10 pairs, at ten ~45, at fifteen ~105. Every extra member multiplies the chatter the Scrum Master must keep smooth. When a team passes ten, the answer is never to keep adding members — it is to create another Scrum team, each with its own PO and Scrum Master. The rule is a ceiling: ten people is the ceiling, beyond it you split.
5.4.3 Why Two-Week Sprints
Scrum is a two-week process. That is the optimum, though a sprint can run anywhere from one week to four weeks. Why exactly two weeks? Because two weeks is the shortest time in which a developer can produce a minimal viable piece of code — a small working product. With one week the code may be written but not yet operational or properly testable. With three weeks you overshoot: the first feature is finished and the developer is already half-way into a second feature, so nothing ships complete. Two weeks lets the team produce at least one minimal, running, testable product. Two weeks is also the origin of feature driven development (FDD): every sprint is built around one feature.
A sprint is the fixed time-box of the Scrum cycle — normally two weeks, by design, with a range of one to four weeks. The two-week optimum is a calibration against a real constraint:
- One week is too short. The code may be written, but it is not yet operational or properly testable — a week is not enough for the build-test-fix loop to close.
- Two weeks is just enough. It is the shortest time in which a developer can produce a minimal viable piece of code — a small, working, testable product.
- Three weeks overshoots. The first feature finishes, and the developer is already half-way into a second feature — so nothing ships complete at the boundary.
Two weeks is also the origin of feature driven development (FDD): because the sprint is built around completing one feature end to end (Section 5.17), every sprint naturally delivers a feature.
Recap. Scrum is the machine that delivers agile: a PO decides what to build, a Scrum Master keeps the process smooth, and a team of about ten people (never more) works in two-week sprints — the shortest cycle that yields a working, testable product. Bridge. Before the team can start, the team needs a shared vocabulary for how big things are: the four-level hierarchy of epic, story, task, and subtask (Section 5.5).
Real-world & domain. The ten/two shape is what makes agile work at scale: when organizations grow past one team, they split (or "scale") into multiple ten-person Scrum teams rather than fattening a single one — the same logic the lecture shows in Section 5.10.9 with multiple teams sharing one board. The two-week cadence is also what deployment teams plan against: a release every two weeks is a small, low-risk release, which is the core pattern of continuous delivery.
5.5 Agile Vocabulary: Epic, Story, Task, Subtask
Agile has four level-sized terms you must keep straight, because every board in Jira is organized around them: epic, story, task, and subtask.
Hook. If everyone on the team calls the same work three different names, the board becomes noise. Agile solves this with a fixed four-level size ladder — epic → story → task → subtask — and every piece of work on the board must sit on exactly one rung of that ladder. Learn the ladder and you can read any Jira board in any company.
5.5.1 Epic: Every Feature Is an Epic
In the agile model, every feature is called an epic. If you want to build a login feature, you create an epic called "Login." The epic contains everything that feature needs: a username area, a password area, a submit button, a cancel button, the behavior when submit is clicked, the behavior when cancel is clicked, and the backend logic. All of that is one epic. A project has multiple epics: Login is one feature, the main menu is one feature, the settings page is one feature. In a banking application the accounts page and the account list page are each separate features. The test for whether something is a feature: can it run independently? Login can run without depending on the main menu, and the main menu without depending on settings — so each is its own feature.
In the agile model every feature is an epic — the top rung of the size ladder. The Login epic, for example, contains everything that feature needs: the username area, the password area, a submit button, a cancel button, the behavior when submit is clicked, the behavior when cancel is clicked, and the backend logic behind it. A project holds multiple epics: Login, the main menu, the settings page, and in a banking application the accounts page and the account-list page are each separate epics.
The feature test: can it run independently? Login runs without depending on the main menu, and the main menu runs without depending on settings — so each is its own feature. If one thing cannot function without another, they belong in the same epic.
5.5.2 Story, Task, and Subtask
Below the epic come three smaller levels. A story (also called an issue) is a new functionality item — one piece of a feature. Within the Login epic, the stories might be the login screen, the submit logic, the API call. A task is a sub-part of a story: when a tester finds a bug, the bug is created as a task on the story, labeled "bug." A subtask is the finest grain — developer-created slices of a task. The hierarchy is always epic → story → task → subtask.
Below the epic the ladder descends through three levels:
- Story (also called an issue) — a new functionality item, one piece of a feature. Within the Login epic, the stories might be the login screen, the submit logic, and the API call.
- Task — a sub-part of a story. When a tester finds a bug, the bug is created as a task on the story, labeled "bug" — it does not become a new story, and the story cannot advance until the bug task is fixed (Section 5.6.4).
- Subtask — the finest grain: developer-created slices of a task (Section 5.17.5 shows a developer splitting a task into one subtask per test case).
The hierarchy is always the same: epic → story → task → subtask. Work moves down the ladder as it gets more concrete, and a Jira board is just this ladder turned into columns.
5.5.3 Definition of Ready
Before a story is allowed into a sprint, it must satisfy the definition of ready (DOR). That means the requirement is completely clear, there is no dependency on any other team, the UX screen is ready, the test cases are ready, the unit-testing cases are ready — everything a developer needs is in hand. If you start a story that is definition-ready, you can finish it within the two-week sprint. DOR is the gate that turns a vague idea into a buildable story.
The definition of ready (DOR) is the entry gate into a sprint. A story is "ready" only when:
- the requirement is completely clear (no guessing about what "done" means),
- there is no dependency on any other team (the story will not be blocked waiting on someone outside the team),
- the UX screen is ready (the designer's work is done),
- the test cases are ready, and
- the unit-testing cases are ready.
If a story satisfies DOR, a developer can finish it within the two-week sprint. DOR is the gate that turns a vague idea into a buildable story — and Section 5.6.2 shows the ceremony (backlog grooming) whose whole job is pushing stories across this gate.
Pitfall — starting a story that is not ready. The most common scheduling failure in Scrum is pulling a half-specified story into a sprint "because we have capacity." The story then blocks on a missing UX screen, an unavailable dependency, or a requirement the developer must guess — and the sprint's two-week promise collapses. If the story cannot pass DOR, it stays in the backlog; the board enforces nothing by itself (Section 5.6.5), so the discipline is the team's.
Recap. The size ladder is epic → story → task → subtask: features are epics, stories are pieces of features, tasks are sub-parts of stories (like bugs), and subtasks are the developer's finest slices — and no story enters a sprint before it passes the definition of ready. Bridge. With the vocabulary in hand, the next section follows a story through its entire life on the board — every state, every ceremony, and every role hand-off (Section 5.6).
Real-world & domain. This exact ladder is what Jira boards are built on — in Jira the issue types are Epic, Story, Task, and Subtask by default, which is why the vocabulary transfers to every company using the tool. The independence test for epics also drives architecture: independently deployable features map to independently deployable microservices (Section 5.2.3), which is how the agile board and the deployment architecture stay aligned.
5.6 The Scrum Flow: Board States, Ceremonies, and Workflow Rules
5.6.1 The Board and Its States
The Scrum process is visualized on a Kanban board — the board where every story's state is tracked as a column. The journey of a story across the board: backlog → pointing → ready for planning → in development (in progress) → ready for testing → testing complete → ready for demo → demo complete → ready for release → release complete → done. The demo itself mixes three agile terminologies deliberately: Kanban provides the board, Scrum provides the two-week process, and FDD (feature driven development) means the whole sprint is built around one feature. Two other agile flavors exist but are not used in this project: XP (extreme programming), where two or three developers sit together and code, and the lean process, which is based on quality.
A Kanban board is the visual heart of the process: every story is a card, and each column is a state. The full journey of a story across the board:
- backlog → 2. pointing → 3. ready for planning → 4. in development (in progress) → 5. ready for testing → 6. testing complete → 7. ready for demo → 8. demo complete → 9. ready for release → 10. release complete → 11. done.
The board is the point where three agile flavors deliberately meet: Kanban provides the board itself, Scrum provides the two-week process that drives it, and FDD (feature driven development) means the whole sprint is built around one feature. Two other agile flavors exist but are not used in this project: XP (extreme programming), where two or three developers sit together and code, and the lean process, which is based on quality.
5.6.2 Ceremony: Backlog Grooming
A ceremony is just a meeting — in agile, all meetings are called ceremonies, and every two-week sprint has four or five of them. The first is backlog grooming. The backlog holds the stories the product owner has created for future development; the owner of the backlog is always the PO. The problem: the product owner understands the business process but not the technical side, so the stories they write are business-level only — "I want a log-in screen" — with no detail. During grooming the entire Scrum team sits in one meeting and goes through every story in the backlog: does it have test cases, does it have the UX screen, does it have all the necessary information? Based on the team's comments, the PO updates each story until it is fully ready — everyone now knows exactly what development and testing must deliver.
A ceremony is simply a meeting — in agile, all meetings are called ceremonies, and every two-week sprint has four or five of them. The first ceremony is backlog grooming:
- What is the backlog? The pool of stories the product owner has created for future development. Its owner is always the PO.
- The problem it solves. The PO understands the business process but not the technical side, so their stories are business-level only — "I want a log-in screen" — with none of the detail a developer needs.
- The ceremony. The entire Scrum team sits in one meeting and goes through every story in the backlog: does it have test cases? Does it have the UX screen? Does it have all the necessary information? Based on the team's comments, the PO updates each story until it is fully ready — which is exactly the definition of ready gate from Section 5.5.3. When grooming ends, everyone knows precisely what development and testing must deliver.
5.6.3 Ceremony: Sprint Planning
Once stories are groomed and pointed, the planning ceremony officially starts the sprint. A sprint normally runs from Wednesday morning to Tuesday night — ten working days. Teams choose Wednesday-to-Tuesday on purpose: if the sprint starts on Monday, people come in late after the weekend and the sprint loses its first day. After planning, the PO tells everyone to start picking stories. Nobody is allocated work — team members pick their own stories. Once chosen, the story moves to in progress.
Once stories are groomed and pointed, the planning ceremony officially starts the sprint:
- The sprint window. A sprint normally runs from Wednesday morning to Tuesday night — ten working days. Teams choose Wednesday-to-Tuesday deliberately: if the sprint starts on Monday, people drift in late after the weekend and the sprint loses its first day.
- Self-selection, not allocation. After planning, the PO tells everyone to start picking stories. Nobody is allocated work — team members pick their own stories. Once a story is chosen, it moves to in progress.
5.6.4 Development, Testing, and Demo
In development, the developer writes the code, then unit-tests it themselves. When the code passes, it goes for a code review; the reviewer checks it, and when everything is fine the story moves to the testing bucket. The tester gets notified automatically when a story is pushed. If the tester finds a bug, they create a new task on the story labeled "bug" — they do not push the story back — and the story cannot advance until the developer fixes that task. After the fix the tester re-tests, marks testing complete, and the story moves to demo. In the demo ceremony the PO verifies the application with real-time UAT (user acceptance testing): they play with everything, check the UI, the fonts, the functionality. If the PO is satisfied the story moves to the release bucket; if not, it reverts — a bug goes back as a new bug task, and a functionality change goes back as a change request (CR) to the developer, who reworks, re-pushes to testing, and re-demos. The release bucket holds a single viable version of the code that can be pushed to production, or handed to the real-time testers to work on.
The middle of the flow — development, testing, demo:
- Development. The developer writes the code, then unit-tests it themselves. When the code passes, it goes for a code review; the reviewer checks it, and when everything is fine the story moves to the testing bucket.
- Testing. The tester is notified automatically when a story is pushed. If the tester finds a bug, they create a new task on the story labeled "bug" — they do not push the story back — and the story cannot advance until the developer fixes that task. After the fix the tester re-tests, marks testing complete, and the story moves to demo.
- Demo. In the demo ceremony the PO verifies the application with real-time UAT (user acceptance testing): they play with everything, check the UI, the fonts, the functionality. If satisfied, the story moves to the release bucket. If not, it reverts: a bug goes back as a new bug task; a functionality change goes back as a change request (CR) to the developer, who reworks, re-pushes to testing, and re-demos.
- Release bucket. Holds a single viable version of the code that can be pushed to production, or handed to the real-time testers to work on.
5.6.5 Workflow Rules: What Can Move Where
The board is not free-form — it is configured with rules about allowed transitions. A story in the backlog can only move to pointing. From pointing it can go to planning. From planning it goes to in progress, and from in progress it cannot come back — moving to in progress is a commitment. From in progress the only forward move is to testing, but testing can come back to in progress if a bug is found. You cannot jump to demo without completing testing properly. From demo a story can revert to testing (or back to development), or move to release. From release it cannot come back to demo — it can only move to done. And once done, the code is ready for production. These arrows are configured in the tool so the process enforces itself.
The board is not free-form — it is configured with rules about allowed transitions. The legal moves:
- backlog → only to pointing.
- pointing → to planning.
- planning → to in progress. Once a story is in progress it cannot come back — moving to in progress is a commitment.
- in progress → the only forward move is testing, but testing can come back to in progress if a bug is found.
- testing → demo; you cannot jump to demo without completing testing properly.
- demo → may revert to testing (or back to development), or move to release.
- release → cannot come back to demo; it can only move to done.
- done → the code is ready for production.
These arrows are configured in the tool, so the process enforces itself: a user cannot drag a card to a state the workflow forbids.
Visual intuition. Draw the board as a horizontal pipeline of columns. Forward arrows run the full width. Only two backward arrows exist: testing → in progress (a bug found) and demo → testing/development (PO rejects). Everything else is one-way — which is what makes the board a gate system rather than a free-for-all. The one-way arrow into "in progress" is the load-bearing rule: it is where the team's commitment is made.
5.6.6 Roles over a Story's Lifecycle
Each state has an owner. First the PO creates the story and owns it through grooming and pointing. Then the developer owns it through development, the tester through testing, the PO again at demo, and finally the DevOps engineer: they take the story at release, push the code to production, and move it to done. That hand-off sequence — PO, developer, tester, PO, DevOps engineer — is the exact path of every story you will see on every project.
Every state on the board has an owner — the role whose work moves the story through it:
| Board phase | Owning role | What they do |
|---|---|---|
| Creation, grooming, pointing | Product Owner | Creates the story, runs it through DOR and estimation |
| Development | Developer | Writes code, unit-tests, fixes bugs |
| Testing | Tester | Verifies, files bug tasks, re-tests |
| Demo | Product Owner | Real-time UAT — accepts or rejects |
| Release → done | DevOps engineer | Pushes code to production, moves story to done |
That hand-off sequence — PO, developer, tester, PO, DevOps engineer — is the exact path every story takes on every project, and it is the same role chain the live walkthrough in Section 5.11 executes end to end.
Recap. A story's life is a fixed board journey — backlog → pointing → planning → in progress → testing → demo → release → done — driven by four or five ceremonies per sprint (grooming, planning, demo, and more), governed by one-way transition rules, and owned state by state by PO, developer, tester, PO, and finally the DevOps engineer. Bridge. Before planning can pick which stories enter the sprint, the team must size them — which is the job of story pointing and the Fibonacci scale (Section 5.7).
Real-world & domain. These board states and arrows are exactly what Jira's workflow configuration encodes (Section 5.10): the tool does not merely display the process, it enforces it, so a card literally cannot skip testing or re-enter demo from release. That enforcement is why a DevOps engineer can trust that a story in the release bucket has genuinely passed every gate.
5.7 Story Pointing and the Fibonacci Scale
Hook. Two developers can look at the same story and honestly disagree: one sees a day of work, the other sees a week. If the team cannot agree on how big work is, it can never promise anything. Story pointing is the ritual that makes "how big?" a question with one answer — and the scale it uses is a 700-year-old number sequence.
5.7.1 The Fibonacci Scale
After grooming comes pointing (estimation): the team gives every story a value reflecting how much effort it will take or how complex it is. Optimal estimation is based on the Fibonacci series. Fibonacci is built so that each number is the sum of the two before it: the first number plus the second gives the third. Formally:
with and . The series technically starts at 0, but since a zero-point story is useless, the scale used here starts at 1: 1, 2, 3, 5, 8, 13. So the sequence grows as the previous number plus the current number — , , , .
The Fibonacci recurrence. In the sequence, every term is the sum of the two terms before it:
which generates the scale used for pointing: . Writing out the recurrence: ; ; ; .
Two details worth keeping straight. First, the mathematical Fibonacci series conventionally starts with and , giving 0, 1, 1, 2, 3, 5, 8, 13, 21 — but a zero-point story is useless in Scrum (a story that needs no work is not a story), and the 1,1,2 start would give two one-point rungs, so the Scrum scale shifts to , and drops 0. Second, the gaps between values grow: 1 → 2 is a 1-point step, 2 → 3 is 1, 3 → 5 is 2, 5 → 8 is 3, 8 → 13 is 5. That widening gap is deliberate — it forces the team to make the big, honest judgment calls (3 or 5? 8 or 13?) instead of splitting hairs over 4 versus 5.
Pitfall — thinking Fibonacci "adds" accuracy. The sequence's role is not arithmetic precision; it is relative sizing. A 5-point story is not "two-thirds of an 8-point story"; it is "bigger than 3, smaller than 8." The gaps grow because real estimation cannot be precise — pretending a story is 4.7 points is false accuracy.
5.7.2 Why 5 Is Optimal and 13 Is the Ceiling
The maximum number used in Scrum is 13 points. Even 13 is meant to be rare, and 8 should be avoided too. The optimum is 5. The breakdown rule: if a story comes out to 13, you split it into two stories of 8 and 5; if you still have an 8-point story, you split it into 5 and 3:
So in practice stories are kept at 1, 2, 3, or 5 points; 8 happens occasionally; 13 only when there is literally no way to break the story further. Beyond 13 you never go, because the next Fibonacci number is , and 21 points cannot possibly be completed in ten working days. The arithmetic is deliberate: a two-week sprint has ten working days, so a developer's stories should sum to roughly ten points. To keep it intuitive, the professor suggests taking one point as about one day — but hold that thought, because Section 5.7.4 corrects this simplification.
The ceiling and the split rule. The maximum usable value is 13, and the split rule keeps stories small:
A 13-point story is too big to hold in the head for two weeks, so it splits into an 8 and a 5; if the 8 is still too big, it splits into a 5 and a 3. In practice, stories live at 1, 2, 3, or 5 points; 8 happens occasionally; 13 only when the story literally cannot be broken further. Beyond 13 you never go: the next Fibonacci number is , and 21 points cannot possibly be completed in ten working days.
Why 5 is the optimum: it is the largest value that still fits the two-week box comfortably (roughly half a sprint's worth of work for one developer), while 8 already risks overreaching and 13 almost guarantees spillover. And why the scale tops out at 13: the arithmetic is deliberate — a two-week sprint has ten working days, so a developer's stories should sum to roughly ten points.
Worked example — the split arithmetic. Take the story "build the accounts dashboard" that the team points at 13. Apply the rule:
- 13 points → split into 8 and 5: a new story "accounts dashboard — read view" at 8 points, and "accounts dashboard — export" at 5 points.
- The 8-point read view still feels heavy → split into 5 and 3: "accounts dashboard — layout and data pull" at 5, and "accounts dashboard — filters" at 3.
- The team now has three stories of 5, 3, and 5 points — sum , the same total work, but three stories that fit inside the two-week box.
Sense-check: the total points are preserved by the arithmetic (13 = 8 + 5 = 5 + 3 + 5), so splitting changes size, not workload.
5.7.3 Planning Poker
Pointing is done through a game called planning poker. Each team member has their own screen. The PO broadcasts a story to the whole team, and everyone privately enters the point value they think it deserves — nobody sees anyone else's number. When everyone has entered, the results are revealed. If everyone gave the same points, the story gets that value. If there is a mismatch, the PO asks each outlier to justify their low or high estimate; if the team accepts the justification, that value is used, otherwise the story takes the average of the numbers given. The justification ritual is the point of the game: low and high estimators argue from different angles, and the discussion surfaces details the story was missing.
Planning poker is the pointing ceremony, played as a game:
- Deal. The PO broadcasts one story to the whole team.
- Bet privately. Each member privately enters the point value they think it deserves — nobody sees anyone else's number, so nobody is swayed by the loudest voice in the room.
- Reveal. All numbers are shown at once.
- Agree or argue. If everyone gave the same points, the story gets that value. If there is a mismatch, the PO asks each outlier — the person with the lowest and the person with the highest estimate — to justify their number. If the team accepts a justification, that value is used; otherwise the story takes the average of the numbers given.
Why the game exists. The justification ritual is the point: the low estimator usually sees the story as simple ("this is a standard pattern, I have done it before"), the high estimator usually sees risks the description misses ("we have never integrated with that legacy API"). Arguing from the two angles surfaces exactly the details the story was missing — which is why pointing is not just estimating, it is the last chance to complete the story's definition of ready.
5.7.4 Points Measure Complexity, Not Days
A common trap: treating story points as days. A five-point story can be finished in one day, and a one-point story can take four days — points have nothing to do with calendar days. Points encode complexity, estimated by gut feeling: when you read a story you know whether it feels easy, hard, or medium. The day-based interpretation was only a teaching scaffold; real agile teams estimate by complexity so that a team's throughput (Section 5.8) becomes comparable across members of different speed.
The trap the professor flagged. Students (and many real teams) treat points as days: "5 points = 5 days." That is wrong twice. A five-point story can be finished in one day by an experienced developer, and a one-point story can take four days when it hides an integration nobody anticipated — points have nothing to do with calendar days. Points encode complexity, judged by gut feeling: when you read a story you know whether it feels easy, hard, or medium. The "one point is one day" rule was only a teaching scaffold to make the arithmetic concrete; the real method is complexity, because a team's throughput (Section 5.8) must be comparable across members of different speeds — if points meant days, every estimate would depend on who does the work, and velocity would be meaningless.
Q: Why not just estimate in days, like 4 or 6 points for a 4- or 6-day story? A: Two reasons. First, the two-week sprint: Fibonacci numbers add up to 10 working days neatly — 8 plus 2, or 5 plus 3 plus 2, or 5 plus 5. Try that with 4s and 6s: four plus four plus four is 12, and no combination of 4s and 6s reaches 10, so the sprint never fills cleanly and you cannot tell whether a developer will finish. Second, the alternatives are too coarse: shirt sizing — small, medium, large — gives only three buckets, so a "small" story and a slightly-bigger "small" story collapse into the same size. Fibonacci gives many levels, from very easy to very hard, so the scale separates stories properly.
A precise note on the arithmetic: strictly speaking, a 4-plus-6 pair does sum to 10 — the professor's example means the pattern is fragile, not impossible: 4s and 6s offer only that one exact fill of the ten-day box (4 + 6), while Fibonacci values offer many exact fills — 8 + 2, 5 + 5, 5 + 3 + 2, 3 + 3 + 2 + 2. Day-based estimates also inherit whatever days feel like — a 4-day estimate from a junior and a 4-day estimate from a senior are different amounts of actual work — which is exactly why points measure complexity instead (Section 5.7.4). The professor's deeper point stands: with 4s and 6s the sprint fills cleanly only by luck, and with shirt sizes everything collapses into three buckets.
5.7.5 Estimating the First Story
There is a classic procedure for the very first story of a project, when the team has no prior reference points. The team picks one story — the first story — and each member judges it individually: is it simple, medium, or complex? A junior developer will call it harder; a senior will call it easy. The rule: take the judgment of the least experienced developer, and whatever feels "medium" to them becomes the anchor — medium is five points. Every later story is then estimated relative to that anchor: simpler means 3, more complex means 8. This is the classic, correct way of estimating; many teams today shortcut to day-based estimates, but the classic way is the one to learn, as the exchange below makes clear.
Q: For the very first story of a project, how do we decide its points? A: Take the first story and judge whether it is simple, medium, or complex — not by days, but by how it feels. Different members will disagree: a junior developer finds it harder, an experienced one finds it easy. So take the judgment of the junior-most developer; whatever feels medium to them is the anchor, and medium is five points. Every later story is compared to that anchor: if it feels simpler, it gets 3; if it feels more complex, it gets 8. Remember, points depict complexity, not days — a five-point story can be done in one day, and a one-point story can take four days. I said "one point is one day" earlier only to make it easy to understand; the real method is gut feeling.
The first-story anchor. A project's first pointing session has no reference points, so the team creates one:
- Pick one story — the first story — and have each member judge it individually: simple, medium, or complex? A junior developer will call it harder; a senior will call it easy.
- Take the judgment of the least experienced developer; whatever feels "medium" to them becomes the anchor. Medium is five points — the optimum from Section 5.7.2, and the widest rung of the scale.
- Every later story is estimated relative to that anchor: feels simpler → 3; feels more complex → 8.
The junior's judgment is deliberately chosen as the anchor because it is the most conservative: if a story feels medium to the person with the least experience, it is a safe middle value for everyone. This is the classic, correct way of estimating; many teams today shortcut to day-based estimates, but the classic way is the one to learn.
Exam note: the Fibonacci scale and why 5 is optimal is likely assessment material — know the recurrence, the split rule , and the correction that points measure complexity, not days, anchored at "medium = 5" by the least-experienced developer's gut feeling.
Recap. Story pointing sizes work with the Fibonacci scale (1, 2, 3, 5, 8, 13): stories split until they are 5 or smaller, planning poker settles disagreements through justification, and points always encode complexity — never calendar days. Bridge. Once stories are sized, the team can compute how much it can actually deliver per sprint — velocity, capacity, and what happens when a story does not finish (Section 5.8).
Real-world & domain. The Fibonacci scale and planning poker are used by Scrum teams in nearly every software organization — Jira's point field and velocity reports are built on exactly these numbers. The same "relative sizing over absolute precision" idea appears in release planning everywhere: teams promise in velocity units (Section 5.8), not days, precisely so that promises stay comparable sprint after sprint.
5.8 Velocity, Capacity, and Spillover
Hook. A team that estimates stories but never measures how much it actually finishes is flying blind: every sprint it promises more than it can deliver, and every sprint something rolls over. Velocity is the one number that turns promise into prediction — and spillover is what happens when the promise overshoots.
5.8.1 How Velocity Is Computed
Velocity is the team's speed — how many story points the team completes per sprint. In the first sprint the team works conservatively, because they do not yet know their own capacity. Two developers might take only 10 story points. If they finish those by the first week, they pull 10 more, and by sprint end they have completed 20 points: the team's velocity is 20. Next sprint they commit to the same 20. If they again finish early and complete 22 or 23, the velocity updates. The third sprint's velocity is the average of the first two:
If the third sprint also completes 23, the new velocity becomes the average over all three:
So velocity is a rolling average of completed points. It climbs as the team learns, then plateaus: eventually the team reaches the maximum it can complete in ten days, and beyond that point any further commitment produces a spillover. Velocity is the tool that lets you plan: at 23 points per sprint you can promise exactly 23 points, never more.
Velocity is the team's speed — the number of story points the team completes per sprint (not plans, completes). Because a brand-new team does not know its own capacity, the first sprint is deliberately conservative: two developers take only 10 points. They finish those by the first week, pull 10 more, and complete 20 by sprint end — the team's velocity is 20. The next sprint they commit to the same 20 and complete 23. The velocity now updates by averaging:
and if the third sprint also completes 23, the average runs over all three sprints:
Velocity is a rolling average of completed points: it climbs as the team learns its capacity, then plateaus at the maximum the team can complete in ten working days. Beyond that ceiling, any further commitment produces spillover (Section 5.8.2). The planning rule follows directly: at 23 points per sprint you can promise exactly 23 points, never more.
Worked example — the rolling average. Sprint 1: the team completes 20 points (10 first week + 10 pulled in). Sprint 2: commits 20, completes 23. Sprint 3: commits 23, completes 23. Step by step:
- After sprint 2: — the velocity used to plan sprint 3.
- After sprint 3: — the velocity used to plan sprint 4.
Sense-check: the average lands between the lowest (20) and highest (23) completed totals, and it rose from 21.5 to 22 as the team confirmed its plateau — exactly the "climb then plateau" shape the professor describes.
5.8.2 The Team's Ceiling and Spillover
A spillover is a story the team failed to complete in the current sprint; it rolls into the next sprint. A spilled story carries no points into the new sprint — it is not part of the sprint plan, it is simply carried debt, and it has to be completed anyway. Spillover hurts the current team's velocity because one team member stays blocked on the old story while everyone else moves on. So the default rule is: no spillovers. The fix is to commit only to your optimum velocity — the amount you know the team can deliver.
A spillover is a story the team failed to complete in the current sprint; it rolls into the next sprint. Two properties make it expensive:
- It carries no points into the new sprint. The spilled story is not part of the next sprint's plan — it is simply carried debt — yet it has to be completed anyway, consuming capacity that the next sprint's plan assumed was free.
- It hurts current velocity. One team member stays blocked on the old story while everyone else moves on, so the team completes fewer new points this sprint.
So the default rule is no spillovers, and the fix is structural: commit only to your optimum velocity — the amount you know the team can deliver — rather than to a hoped-for stretch number.
5.8.3 Spillover Points in the Next Sprint
Q: Suppose a sprint ended and a story was not finished or not tested. How do the story points count in the next sprint — the full story, or a negotiated part of it? A: The full story points carry over, and the velocity adjusts downward. Say the team planned for 30.5 points of velocity, but two points of work were not completed. The effective velocity drops to 29.5, and the next sprint picks up only 29.5 — not the originally planned 30.5. The velocity calculation (last sprint plus current sprint divided by two) already absorbs the shortfall, so the team plans to the reduced number and does not over-commit again.
Q: Suppose a sprint ended and a story was not finished or not tested. How do the story points count in the next sprint — the full story, or a negotiated part of it? A: The full story points carry over — there is no negotiated partial credit — and the velocity adjusts downward. The arithmetic behind the professor's numbers: the team planned a velocity of 30.5 and completed 2 points short, so the current sprint contributed points; averaging with the previous 30.5 gives the new effective velocity
So the next sprint picks up only 29.5 points — not the originally planned 30.5. The rolling-average calculation (last sprint plus current sprint divided by two) already absorbs the shortfall, so the team plans to the reduced number and does not over-commit again. The lesson: spillover punishes the next sprint's capacity automatically.
5.8.4 Planned and Unplanned Leaves
Q: Vacation planning — if developers have planned or unplanned leave during a sprint, does the velocity hold? The product owner is focused on commitments, not the team's leave. A: The product owner is part of the team and is very much bothered about the team. For planned leaves, the PO asks everyone about their leave plans before every two sprints — monthly — and increases or decreases the team's velocity accordingly. For example, four people can complete 20 points; if one is away the velocity drops to 15 and the PO will not assign beyond that. For unplanned leaves, like sudden sickness, the remaining members pitch in and collectively close the story; if it falls out of the sprint, the team accepts that. None of this hits the overall project delivery, because delivery happens every two weeks regardless — you are always shipping something. What gets impacted is features: instead of five features in two weeks, you deliver three or four. The next sprint the velocity returns to normal, and a single bad week is negligible in a two- or three-year project.
Q: Vacation planning — if developers have planned or unplanned leave during a sprint, does the velocity hold? The product owner is focused on commitments, not the team's leave. A: The product owner is part of the team and is very much bothered about the team. For planned leaves, the PO asks everyone about their leave plans before every two sprints — monthly — and raises or lowers the team's velocity accordingly. The arithmetic is per-head: if four people complete 20 points (5 per person), one person away drops the number to 15, and the PO will not assign beyond that. For unplanned leaves — sudden sickness, emergencies — the remaining members pitch in and collectively close the story; if it falls out of the sprint, the team accepts that.
None of this hits the overall project delivery, because delivery happens every two weeks regardless — you are always shipping something. What gets impacted is the feature count: instead of five features in two weeks, you deliver three or four. The next sprint the velocity returns to normal, and a single bad week is negligible in a two- or three-year project.
Recap. Velocity is the rolling average of points completed per sprint — it climbs, plateaus at the team's true capacity, and is the ceiling for every future promise; spillover is the penalty for promising past that ceiling, carrying full points into the next sprint and shrinking its effective velocity; leave is handled by adjusting the same number, planned in advance, unplanned by collective effort. Bridge. Velocity tells the team how much it will finish — the burndown chart tells them when it is on track to finish it (Section 5.9).
Real-world & domain. Velocity is the number release planners actually promise on: at 23 points per sprint, the roadmap (Section 5.10.3) forecasts how many sprints an epic will take. Tools like Jira compute velocity and burndown automatically from completed points, which is why the "points measure complexity" discipline from Section 5.7.4 matters — if points meant days, the average would be meaningless across a team of mixed experience.
5.9 The Burndown Chart
Hook. How does anyone know a sprint is failing before the final day? The answer is one line on one chart: the burndown. It is the sprint's health dashboard — the single earliest warning device the team has, and the shared heartbeat of every downstream role, including deployment.
5.9.1 What the Chart Shows
The burndown chart is the sprint's health dashboard. It plots the difference between when the team took stories and when it completed them — remaining story points against time. Each day, ideally, one point of work should burn off. The chart is the number-one early-warning device for sprint trouble: if it says nine points are still to go, or shows 33% of the sprint in progress and 67% not started, the sprint is behind and nobody is pulling work.
The burndown chart plots remaining story points (vertical axis) against sprint time (horizontal axis, day 1 to day 10). Each day, ideally, one point of work should burn off — the line should descend by roughly one point's height per day. It is the number-one early-warning device for sprint trouble: if the chart still shows nine points to go late in the sprint, or the bars show 33% of the sprint in progress against 67% not started, the sprint is behind — and the shape of the line says who is not working: a flat line means nobody is pulling work.
5.9.2 The Ideal Shape
The ideal burndown falls smoothly and steadily from start to end:
At the start of the sprint the remaining work is at 100%; after two days it should be at about 80, then 60, 40, 20, 10, and finally 0 on the last day. A good chart looks like a gentle staircase down, not a series of flat ledges.
The ideal shape. The remaining work starts at 100% on day one and falls smoothly and steadily to 0% on the last day:
Two days into the sprint the line should already sit at about 80%; by day four, 60; day six, 40; day eight, 20; day nine, 10; and zero on the last day. A good chart looks like a gentle staircase down — a small step each day — not a series of flat ledges.
Worked example — reading the ideal line on a ten-day sprint. A 20-point sprint burns:
- Day 1: remaining 20 points (100%)
- Day 3: remaining ~16 points (80%)
- Day 5: remaining ~12 points (60%)
- Day 7: remaining ~8 points (40%)
- Day 9: remaining ~2 points (10%)
- Day 10: remaining 0 points (0%)
Sense-check: the line ends exactly at zero on the last day, and every step is a small, continuous descent — no ledges, no flood.
5.9.3 What a Zigzag Does to the Team
The bad pattern is the zigzag: five days of no completions, then a sudden flood of finished stories, then more silence, then another flood. A flat-then-flood chart is not a cosmetic problem — it is a resource problem. If nobody delivers for five days, the testers sit idle waiting; from day six onward every developer hands stories over at once, the tester cannot keep up, the PO cannot finish demos, and the whole team is overloaded at the end of the sprint. The completion stream must instead be gradual and sequential: the first developer completes, the tester starts on their story while a second developer is still working, and so on, so every role has continuous work instead of a pile-up.
The zigzag pattern — why the professor called it a resource problem, not a cosmetic one. The bad chart is flat-then-flood: five days with no completions, then a sudden wave of finished stories, then silence, then another wave. Trace what that does to the people downstream:
- Days 1–5: nobody delivers. The testers sit idle waiting for work.
- Days 6 onward: every developer hands stories over at once. The tester cannot keep up; the PO cannot finish the demos; the whole end of the sprint is overloaded while its start was wasted.
The completion stream must be gradual and sequential: the first developer completes, the tester starts on their story while a second developer is still working, and so on. Then every role has continuous work instead of a pile-up — which is exactly what the pacing rule in Section 5.9.4 enforces.
5.9.4 Pacing Rules and the Deployment Payoff
Pacing has an explicit rule: if one developer takes a five-point story, the next developer should take only two or three points, so testers get breathing room between stories. This benefits the deployment engineers too — a steady burndown tells them exactly what is coming next, so they can prepare the release in advance. A zigzag chart, by contrast, means deployment gets hit by a wave of finished work with no warning. The burndown chart is not just a developer's tool; it is the shared heartbeat of every downstream role.
The pacing rule. If one developer takes a five-point story, the next developer should take only two or three points, so testers get breathing room between stories. Alternating the sizes keeps the completion stream sequential instead of simultaneous.
The rule pays off beyond the team itself. A steady burndown tells the deployment engineers exactly what is coming next, so they can prepare the release in advance — set up the environment, schedule the build, line up the store upload. A zigzag chart, by contrast, means deployment gets hit by a wave of finished work with no warning. The burndown chart is not just a developer's tool; it is the shared heartbeat of every downstream role.
Recap. The burndown chart plots remaining points against sprint days; the ideal is a steady staircase from 100% to 0%; a zigzag means idle testers early and an overloaded queue late; and pacing — alternating big and small stories — keeps the line smooth, which is exactly what deployment needs to prepare releases. Bridge. All of this board machinery — states, points, velocity, burndown — runs on one tool in this course: Jira (Section 5.10).
Real-world & domain. Jira renders burndown charts automatically from completed stories, and delivery teams watch them daily in the stand-up meeting — the ten-minute daily check that this chart exists to feed. For release engineering, the same steady-cadence idea shows up as continuous delivery: small, even batches of completed work are what make every-two-week deployments low-risk.
5.10 Jira and the Atlassian Suite in Practice
5.10.1 Jira, Confluence, Crucible
The tool driving this whole board is Jira, from the company Atlassian. Atlassian offers three interrelated modules. Jira handles the stories and the tracking — the Kanban boards, sprints, and workflows you have seen in Sections 5.6 through 5.9. Confluence is the documentation tool. Crucible is for code review and inspection. They are designed to work together: story tracking, documentation, and review each get a dedicated home, and they plug into the same project.
The tool driving this whole board is Jira, from the company Atlassian, which offers three interrelated modules:
- Jira — the story tracker: Kanban boards, sprints, workflows, velocity, and burndown — everything from Sections 5.6 through 5.9.
- Confluence — the documentation tool, where durable decisions live (Section 5.10.6).
- Crucible — the code review and inspection tool.
The trio is designed to work together: story tracking, documentation, and review each get a dedicated home, and all three plug into the same project — the review you do in Crucible appears on the Jira story, and the documents in Confluence link back to the work they record.
5.10.2 Story Fields and Due Dates
Every story carries fields that matter to the process. A story sitting in the backlog typically has no story points (it has not been estimated yet), a priority such as "medium" (meaning it is not the most urgent item in the queue), no due date and no start date (it has not been taken up), and no assignee. The reporter is whoever created it. Once a story is taken into a sprint, the team fixes a timeline — a due date set from the story's complexity. Jira color-codes the timeline against today's date: if the due date is today or has passed, the date turns red, telling the assignee the story must reach the done state today. A story with a due date three days away shows normally. You see the story numbers on the board too, all children of the same epic — the epic called "Flutter app" groups every one of its stories together.
Every story carries a set of fields, and each field encodes a process decision:
- Story points — empty in the backlog, because the story has not been estimated yet (Section 5.7).
- Priority — e.g., "medium", meaning it is not the most urgent item in the queue.
- Due date / start date — both empty in the backlog, because the story has not been taken up.
- Assignee — empty until someone picks the story; the reporter is whoever created it.
Once a story is taken into a sprint, the team fixes a timeline: a due date set from the story's complexity — roughly the story points mapped onto the sprint's ten days. Jira color-codes the timeline against today's date: if the due date is today or has passed, the date turns red, telling the assignee the story must reach the done state today; a due date three days out shows normally. On the board, every story card shows its number and all the cards of one epic share the same parent — the epic called "Flutter app" groups every one of its stories together.
5.10.3 The Roadmap
Above the sprint level sits the roadmap: the overall plan for the whole application, running several months — for this project, roughly a single quarter. The roadmap shows the running sprint, the next sprint planned for two weeks after it, and the backlog waiting beyond. On the roadmap every epic is a bar with its child stories, color-coded by status: how many are in progress, how many done, how many still in backlog. A green checkmark over the done portion tells you that work is complete and you do not need to revisit it.
Above the sprint level sits the roadmap: the overall plan for the whole application, running several months — for this project, roughly a single quarter. The roadmap is three horizons in one view:
- the running sprint,
- the next sprint planned for two weeks after it,
- the backlog waiting beyond.
Every epic is drawn as a bar with its child stories, color-coded by status: how many are in progress, how many done, how many still in backlog. A green checkmark over the done portion signals the work is complete and does not need revisiting. The roadmap is where velocity (Section 5.8) meets planning: with the team's points-per-sprint number, the roadmap becomes a forecast of how many sprints each epic will take.
5.10.4 Sprint Management on the Board
On the sprint board itself you can create a sprint, edit it, add issues to it, complete it when everything is done, and start the next one. The sprint shows its remaining days (for example, ten days remaining). When you complete a sprint and start a new one, Jira asks for a duration — and the guidance is to use the default two-week sprint, not a custom duration. The sprint's insights section shows the point totals: so many points not started, so many in progress, summing to the sprint's committed total (a 15-point sprint in the demo: ten points not started plus five in progress).
On the sprint board itself you can create a sprint, edit it, add issues to it, complete it when everything is done, and start the next one. The sprint header shows its remaining days — in the demo, ten days remaining at sprint start. When you complete a sprint and start a new one, Jira asks for a duration: the guidance is to keep the default two-week sprint, not a custom duration — for the same calibration reason as Section 5.4.3. The sprint's insights section shows the point totals at a glance: points not started plus points in progress sum to the sprint's committed total. The demo's sprint was committed at 15 points — ten not started plus five in progress — planned for about two developers. (The per-developer split of the 15 points was garbled in the demo; the total of 15 is the number that matters, and it matches the "roughly ten points per developer" guideline from Section 5.7.2.)
5.10.5 Connecting Code to Stories: Branch Naming
This is one of the most important habits in the whole DevOps process: each and every story gets its own branch, and the branch is named after the story. When you check out the code and start work, you create your own branch:
git checkout -b <username>/<story-id>
If the story is DS-11, the branch is <username>/DS-11. Run git branch and it shows you which branch you are on; git status shows your changes. Because the branch name carries the story number, everything you commit is automatically tagged to that story. Once Jira is connected to GitHub, the story page shows a code block listing the branch — the reviewer can open the story, click the branch, and see exactly what difference the developer made, right inside Jira, with no other tool. When the reviewer sees that everything is fine, they mark review complete, and the board automatically moves the story to testing. The naming convention is the glue between the agile board and the version-control system.
The habit the professor called one of the most important in the whole DevOps process: each and every story gets its own branch, and the branch is named after the story. When you check out the code and start work, you create your own branch:
git checkout -b <username>/<story-id>
If the story is DS-11, the branch is <username>/DS-11. git branch shows which branch you are on; git status shows your changes. Because the branch name carries the story number, everything you commit is automatically tagged to that story — the code and the board need no manual cross-referencing. Once Jira is connected to GitHub, the story page shows a code block listing the branch: the reviewer opens the story, clicks the branch, and sees exactly what the developer changed, right inside Jira, with no other tool. When the reviewer marks the review complete, the board automatically moves the story to testing.
Why this matters (the professor's analogy). The branch name is the bridge between two worlds — the agile board and the version-control system. Without it, a commit is anonymous work: "some code changed." With it, every commit carries its story number, so any build failure can be traced to a story and a developer (Section 5.15.8), and the reviewer's verdict flows back onto the board without anyone dragging a card manually.
5.10.6 Documentation and Communication
Agile teams are notoriously light on documentation, and this is a real drawback: with two-week development cycles it becomes hard to maintain documents, so you cannot go back and verify what was decided. The compensating strength is direct communication — the team meets the PO daily, and there are many channels: Slack, Teams, Communicator, and nowadays WhatsApp as well. When you do want durable documentation, Confluence is the Atlassian tool for it.
The documentation trade-off. Agile teams are notoriously light on documentation, and the professor flagged this as a real drawback: with two-week development cycles it becomes hard to maintain documents, so you cannot go back and verify what was decided months ago. The compensating strength is direct communication: the team meets the PO daily, and there are many channels — Slack, Teams, Communicator, and nowadays WhatsApp. The skill is knowing which tool fits which job: chat for the daily conversation, Confluence (the Atlassian documentation tool) when the decision is durable enough that someone will need to verify it later.
5.10.7 Q&A: Virtual Labs and Tool Access
Q: You demoed several tools. Will we get access to virtual labs where we can try the integration ourselves? A: Yes, that should be available — I will check and update you. In the meantime, note that Jenkins and Git are local applications; only Jira lives in the cloud. You can install Jenkins and Git on your own machine today and test the whole integration locally.
Q: You demoed several tools. Will we get access to virtual labs where we can try the integration ourselves? A: Yes, that should be available — I will check and update you. In the meantime, the tool-deployment split is worth knowing: Jenkins and Git are local applications; only Jira lives in the cloud. That means you can install Jenkins and Git on your own machine today and test the whole integration locally — push to Git, let Jenkins build — before the labs are ready.
5.10.8 Q&A: Pull Requests and Merging
Q: When I raise a pull request, how does my branch actually merge into the main code? A: There are two ways. The developer can do it themselves: push to the branch, then use
git rebaseto fold your local branch onto the master branch, followed by a merge. But normally there is a reviewer in between — a team lead or a senior person who has been in the project or technology for a long time. The reviewer reviews your code and, in Git itself, marks the review complete; Git then merges automatically for you, no further commands needed. When several developers are pushing at the same time you can get merge conflicts, and the dedicated Git session covers how to resolve those.
Q: When I raise a pull request, how does my branch actually merge into the main code? A: There are two ways.
- The developer merges themselves: push to the branch, then use
git rebaseto fold the local branch onto the master branch, followed by a merge. - The reviewer merges (the normal path): a team lead or senior person — someone who has been in the project or the technology for a long time — reviews the code and, in Git itself, marks the review complete. Git then merges automatically; no further commands needed. This is the same reviewer whose verdict moves the story to testing on the board (Section 5.10.5).
When several developers push at the same time you can get merge conflicts; the dedicated Git session covers how to resolve those.
5.10.9 Q&A: Multiple Scrum Teams on One Board
Q: If we use Kanban instead of Scrum, or run multiple Scrum teams in parallel — how does the board look in that case? A: You can have several projects running in parallel, each with its own board — this setup literally shows five projects running side by side, one Scrum, one Kanban, and others. You can also create multiple epics inside one project and they run in parallel. For multiple teams working on one application, a single board still works: the board is split by labels. Stories carry labels like "front end" and "back end"; each label implies a different Scrum happening inside the same project — a different Scrum Master and a different PO, with two sprints running in parallel on the same board.
Q: If we use Kanban instead of Scrum, or run multiple Scrum teams in parallel — how does the board look in that case? A: Three setups are possible. Several projects can run in parallel, each with its own board — the demo literally showed five projects side by side, one Scrum, one Kanban, and others. Inside one project, multiple epics can run in parallel. And for multiple teams working on one application, a single board still works: the board is split by labels. Stories carry labels like "front end" and "back end"; each label implies a different Scrum happening inside the same project — a different Scrum Master and a different PO, with two sprints running in parallel on the same board. This is the same "split at ten people" rule from Section 5.4.2, expressed on a shared board.
5.10.10 Q&A: The Dedicated Git Class
Q: What are the important Git commands for this session? A: The next tutorial session is dedicated entirely to Git — a full class on Git alone. Everything will be shown there, command by command.
Recap. Jira is the tool that runs the whole board: Confluence holds the durable documents, Crucible the reviews, story fields encode the process state, the roadmap spans the quarter, sprint insights sum the committed points, and the branch-naming convention ties every commit to its story. Bridge. The board machinery is now complete — the session shows it live in Section 5.11 by walking one real story, "banner removal," from creation to production.
Real-world & domain. Jira is the most widely used agile tracker in industry, and the branch-naming convention is the standard glue between Jira and GitHub — the same mechanism (story-key-in-branch-name) that lets Jira automatically link commits, PRs, and deployments to stories. The "reviewer completes review → board moves story" automation is a standard Jira–GitHub integration pattern, and it is exactly the bridge the deployment architecture in Section 5.13 formalizes.
5.12 Multi-Platform Builds: One DevOps Process
5.12.1 Four Platforms, Four Artifacts
The same Flutter project builds four applications: an Android app, an iOS app, a macOS app, and a web app. Each platform produces its own executable artifact: the Android APK, the iOS IPA, the macOS DMG, and the web build served by a browser — plus, in general, the Windows .exe. The demo machine could not build Windows or Linux versions, but Flutter supports them. All four applications give the same output; only the packaging differs.
The same Flutter project builds four applications — Android, iOS, macOS, and web — and each platform produces its own executable artifact:
- Android → APK (Android Package)
- iOS → IPA (iOS App Package)
- macOS → DMG (disk image)
- Web → a build served by a browser
- (in general also Windows → .exe and Linux builds; Flutter supports them, but the demo machine could not build them)
The four applications give the same output — the same app, same screens, same features — and only the packaging differs. From a DevOps perspective this is the point: the artifact formats are the only thing that varies per platform.
5.12.2 The Build Folder
Each artifact lands in the project's build folder. For Android the path is build/app/outputs/ and the APK lives there; the iOS and macOS artifacts are created in their own output directories in the same build folder. Everything is produced automatically by the build step — you never hand-assemble an APK.
Each artifact lands in the project's build folder, organized per platform:
- Android:
build/app/outputs/— the APK lives here. - iOS and macOS: their own output directories inside the same build folder.
- Web: its own output directory as well.
Everything is produced automatically by the build step — you never hand-assemble an APK. This is the concrete payoff of the automated build (Section 5.14): the build folder is the single place where every platform's artifact appears, ready for the deployment step to pick up.
5.12.3 One Process for All
Why show all four? Because the lesson is that the DevOps process is common to all platforms. Whether you ship a system application, a web application, or a mobile application on Android or iOS, the pipeline is identical. You do not create a different deployment process for each target — one process handles every artifact, which is exactly the design goal of the Flutter example.
Recap. One Flutter project yields four artifacts — APK, IPA, DMG, web build — each landing automatically in the build folder, and the deployment process that ships them is identical for all four. Bridge. That one process is what the next section draws in full: the deployment architecture that carries code from the developer's IDE to the app stores (Section 5.13).
Real-world & domain. Cross-platform frameworks exist precisely so that teams maintain one codebase and one pipeline instead of four siloed release trains. In production, the artifact naming is universal: APK for Android, IPA for iOS, DMG/EXE for desktop, and a static bundle for web — and every one of them is produced by the same CI job, which is what keeps multi-platform releases cheap.
5.13 The Deployment Architecture
Hook. Sections 5.1 through 5.12 placed tools one by one; this section wires them into one machine. The deployment architecture is the full map of where code goes after a developer types the last line: through security, into the repository, into the build server, and out to the cloud stores where users actually get it.
5.13.1 The Developer Side
The deployment architecture starts with the developer's integrated development environment (IDE). For Android the IDE is Android Studio; for iOS it is Xcode; for JavaScript applications it is Visual Studio Code — and even Notepad works in a pinch. Development can be online or offline, local or in the cloud. The developer takes feedback from the PO, picks up user stories, and writes code for them.
The architecture starts with the developer's IDE (integrated development environment). The IDE is platform-specific: Android Studio for Android, Xcode for iOS, Visual Studio Code for JavaScript applications — and even Notepad works in a pinch, because the pipeline cares about the code, not the editor. Development can be online or offline, local or in the cloud. The developer's day is a loop: take feedback from the PO, pick up user stories from the board (Section 5.6.3's self-selection), and write code for them.
5.13.2 The Pipeline: Web Server, Repository, Build Server, Cloud
When the code is complete, the developer pushes it. The push travels through a web server that handles security and authentication; only with correct authentication does the code reach the Git repository, which stores the code. From the repository the build server — Jenkins — pulls automatically. The DevOps engineers set up the Jenkins part: they create the build jobs, the monitoring services, the scheduled services, and integrate everything, so that once the code arrives, the pipeline runs on its own. Jenkins builds the code, producing the executable packages — APK, IPA, WAR, DMG, PKG, EXE. The executables are stored, then moved to the cloud tier, because the destination stores live in the cloud: the Android Play Store, the iOS App Store, the Windows Store, and websites. End users download the artifact from there.
The pipeline, link by link:
- Push. When the code is complete, the developer pushes it.
- Web server. The push travels through a web server that handles security and authentication — only with correct credentials does the code reach the repository. (This is the security perimeter doing its job in front of code, just as the web tier in Section 5.2.2 protects applications.)
- Git repository. Stores the code.
- Build server (Jenkins). Pulls automatically from the repository. This is the part the DevOps engineers set up: they create the build jobs, the monitoring services, the scheduled services, and integrate everything — so that once the code arrives, the pipeline runs on its own. Jenkins builds the code, producing the executable packages: APK, IPA, WAR, DMG, PKG, EXE.
- Cloud tier. The executables are stored, then moved to the cloud tier, because the destination stores live in the cloud: the Android Play Store, the iOS App Store, the Windows Store, and websites. End users download the artifact from there.
5.13.3 The Three-Tier View and the DevOps Engineer's Job
Read this as a three-tier architecture. Tier one, the client tier, is where development happens. Tier two is the data and code tier: the Git repository and the stored code. Tier three is the cloud tier holding the executables. The developers work in tier one; the DevOps engineer works on the automation in tier two — Jenkins jobs, monitoring, scheduling — which is the part you will work on regularly. After the build, the testers test once more, the executables are confirmed ready, and the pipeline pushes them to the respective stores.
Read the pipeline as a three-tier architecture:
- Tier one — the client tier: where development happens (the IDE, the developer's machine).
- Tier two — the data and code tier: the Git repository and the stored code.
- Tier three — the cloud tier: the executables, in or bound for the app stores.
The roles split cleanly across the tiers: the developers work in tier one; the DevOps engineer works on the automation in tier two — Jenkins jobs, monitoring, scheduling — which is the part of the pipeline the course focuses on. After the build, the testers test once more, the executables are confirmed ready, and the pipeline pushes them to the respective stores.
5.13.4 The Error Path Reverses
If something fails — if the application has an error in production — the process reverses: the error flows back to development, and the whole cycle repeats. The reverse path is not an edge case; it is the designed feedback loop of the architecture.
The reverse path is by design. If something fails — an application error in production, a store rejection, a monitoring alert — the process reverses: the error flows back to development, where it becomes a new story (a bug task on a story, as in Section 5.6.4), and the whole cycle repeats. The reverse path is not an edge case to be tolerated; it is the designed feedback loop of the architecture — the same loop that R2's "second way" (feedback) describes: problems discovered in production must travel back to the people who can fix them.
Recap. The deployment architecture is a three-tier machine — developer IDE (tier one) → Git repository guarded by a web server's authentication (tier two) → Jenkins build producing APK/IPA/WAR/DMG/PKG/EXE → cloud stores (tier three) — with errors flowing back to development as designed feedback. Bridge. Jenkins is the machine at the heart of tier two; the next section shows the exact build script it runs — build, test, lint, package, install (Section 5.14).
Real-world & domain. This architecture is the shape of real CI/CD: a web server (like GitHub's) authenticates pushes, a CI server (Jenkins, CircleCI — Section 5.1.5) builds every commit, and the artifacts land in platform stores or package registries where end users download them. The "error flows back" loop is what production monitoring (Section 5.1.6) feeds — an alert in Prometheus or New Relic becomes a bug story, which restarts the whole cycle.
5.14 The Build Pipeline: Build, Test, Lint
Hook. The whole deployment architecture stops working if nobody can build the app reproducibly. This section shows the build as a script — five steps that a human can run at a command prompt, and that Jenkins will later run for them, identically, every time.
5.14.1 The Five Steps of the Build Script
The build is driven by a shell script in the project's build-process folder — this is the shell scripting from Section 5.1.3 in action. The script runs five steps in order:
- Build. Compile the application —
flutter build apk --debug, where Gradle (the Android build manager) performs the "assemble debug" build and runs many internal processes. - Run the unit test cases. Verify the compiled code works.
- Run code cleanup and lint. Check code quality with the lint tools from Section 5.1.8.
- Generate the APK. Produce the deliverable artifact once everything is clean.
- Install and open. Install the APK on the connected device and open the application for further testing.
After these steps, the DevOps configuration also sets up a monkey process — a randomized UI exercise that pokes at the installed app — which runs in the background. The demo executes all three background activities at once: build, test, lint — and the outputs appear as the pipeline runs.
Purpose. The build script turns "the code works on my machine" into "the code builds reproducibly on any machine" — the prerequisite for every automated step that follows (CI from Section 5.1.5, Jenkins jobs in Section 5.15). The build is driven by a shell script in the project's build-process folder — this is the shell scripting from Section 5.1.3 in action.
The five steps, in order:
- Build — compile the application:
flutter build apk --debug. Inside, Gradle (the Android build manager) performs the "assemble debug" build and runs many internal processes — dependency resolution, compilation, packaging. - Run the unit test cases — verify the compiled code works (the unit tests from Section 5.17.1).
- Run code cleanup and lint — check code quality with the lint tools from Section 5.1.8.
- Generate the APK — produce the deliverable artifact once everything is clean (Section 5.12.2's build folder).
- Install and open — install the APK on the connected device and open the application for further testing.
After these steps, the DevOps configuration also sets up a monkey process — a randomized UI exercise that pokes at the installed app (random taps, swipes, inputs, hunting for crashes) — which runs in the background. The demo executes all three background activities at once — build, test, lint — and the outputs appear as the pipeline runs.
Worked example — the five steps traced on the banner-removal project. Step 1 compiles the fixed app (flutter build apk --debug, Gradle assembling the debug APK). Step 2 runs the unit test cases against the compiled code — the banner-removal change introduces no logic, so the existing unit tests pass. Step 3 runs cleanup and lint — the change removed a widget, so the linter checks for unused imports left behind. Step 4 generates the APK into build/app/outputs/. Step 5 installs it on the connected Android emulator and opens the app — where the demo shows the banner is gone. Sense-check: every step is verifiable on screen (compile output, test report, lint report, file existence, app launch), which is exactly what makes the script auditable when Jenkins runs it unattended.
5.14.2 Failure Escalation Paths
Each failure type has its own escalation route:
- If the build fails, the developer is notified — they broke compilation and must fix it.
- If a test fails, both the developer and the tester are notified, because both own the quality of the test and the code.
- If lint fails, the developer and the reviewer are both updated, because a lint failure is a code-compatibility problem — the code compiles but still has issues, so the reviewer (who will release the code) and the developer work together.
These three paths map exactly onto the tool categories: build problems belong to the developer, test problems to developer plus tester, and quality problems to developer plus reviewer.
Failure escalation paths. Each failure type has its own route, and the routes match who owns the problem:
- Build fails → the developer is notified. They broke compilation; only they can fix it.
- Test fails → the developer and the tester are both notified. Both own the quality: the tester wrote the test, the developer wrote the code under test.
- Lint fails → the developer and the reviewer are both updated. A lint failure is a code-compatibility problem: the code compiles but still has issues, so the reviewer — the person who will release the code — works with the developer to clean it.
The three paths map exactly onto the tool categories from Section 5.1: build problems belong to the developer (Section 5.1.5), test problems to developer plus tester (Section 5.1.7), and quality problems to developer plus reviewer (Section 5.1.8).
5.14.3 The Pipeline in Motion
Running the script live, you see what Jenkins does internally: first the Gradle build (many processes visible), then the test run against a release build, then the lint check, then the install and launch on the emulator. The build step prints build successful, the tests pass, the lint is clean — and that sequence, visible step by step at a command prompt, is exactly what the Jenkins job will do automatically in Section 5.15.
Running the script live shows exactly what Jenkins does internally — the command prompt is the CI server's cockpit: first the Gradle build (many processes visible), then the test run against a release build, then the lint check, then the install and launch on the emulator. The build step prints build successful, the tests pass, the lint is clean — and that sequence, visible step by step at a command prompt, is exactly what the Jenkins job will do automatically in Section 5.15. The point: Jenkins does not do anything a script cannot do manually — it simply does it automatically, on every commit, every time.
Recap. The build pipeline is a five-step shell script — build, unit test, lint, generate APK, install and open — with a monkey process poking the app in the background; each failure type escalates to exactly the roles who own it; and the live command-prompt run is a preview of Jenkins. Bridge. The next section turns this manual run into an automatic job — Jenkins configuration, logs, and the four ways to trigger a build (Section 5.15).
Real-world & domain. This five-step shape is the standard commit stage of a delivery pipeline: compile → automated unit tests → static analysis/lint → package → (optionally) deploy to a test environment. Real CI servers (Jenkins, CircleCI) run exactly this sequence on every push, and the monkey process is the same idea as Android's UI fuzzers and randomized monkey testing used to shake out crashes before release.
5.15 Jenkins: Job Configuration and Build Triggers
Hook. The build script from Section 5.14 works — but only when someone runs it. Jenkins is the worker that runs it automatically, and the four triggers in this section are the answer to one question: when should the build run? That choice is the difference between a pipeline that always lags and one that always catches every commit.
5.15.1 Configuring a Job
Jenkins jobs are configured with three essential pieces: where the code lives (the repository URL and branch — the same code you saw in Git), the credentials, and the build step. The build step is the heart of the job: the execute shell step, which runs the same shell script you executed manually in Section 5.14. Whatever you showed at the command prompt, Jenkins now runs for you.
A Jenkins job (or project) is configured with three essential pieces:
- Where the code lives — the repository URL and branch: the same code you saw in Git.
- The credentials — the authentication that lets Jenkins read that repository (the same security step the web server performs for pushes, Section 5.13.2).
- The build step — the heart of the job: the execute shell step, which runs the same shell script you executed manually in Section 5.14.
Whatever you showed at the command prompt, Jenkins now runs for you — automatically, on schedule, with every detail recorded.
5.15.2 Build Logs and Failure Emails
Every build produces a log — you open the build and read exactly what happened, step by step. If the build fails, Jenkins sends an email to the DevOps engineer; you can also add the developer's mail IDs, comma-separated, so the person who broke the code gets notified too. If the build succeeds, no email is sent. The log plus the failure mail is the whole observability story for builds.
Every build produces a log: you open the build and read exactly what happened, step by step — the same output you saw at the command prompt in Section 5.14.3. On failure, Jenkins sends an email to the DevOps engineer; you can add the developer's mail IDs (comma-separated) so the person who broke the code gets notified too — the same escalation logic as Section 5.14.2, automated. If the build succeeds, no email is sent — silence means success. The log plus the failure mail is the whole observability story for builds.
5.15.3 Trigger: Poll SCM
The next question is when the build should run. Should it run every five minutes? The first option is poll SCM: Jenkins checks the GitHub server on a schedule, and if new code has arrived, it builds. The schedule is a cron expression — the five-star cron * * * * * means every minute. Polling keeps hitting the repository to ask "anything new? anything new?" which works but is chatty.
Trigger 1 — Poll SCM. Jenkins checks the GitHub server on a schedule, and if new code has arrived since the last check, it builds. The schedule is a cron expression (the five-field notation of Section 5.16): the five-star cron * * * * * means every minute. Polling works, but it is chatty — the repository is asked "anything new? anything new?" on every cycle, even when nothing changed. That constant traffic is the cost of never missing a commit.
5.15.4 Trigger: GitHub Hook
The second, better option is the GitHub hook (webhook): instead of Jenkins polling, GitHub pushes a notification the moment new code arrives — "I got a new build, please start building." This is the optimized solution because nothing polls and nothing waits; the build starts exactly when the code changes.
Trigger 2 — GitHub hook (webhook). Instead of Jenkins asking, GitHub pushes a notification the moment new code arrives — "I got a new build, please start building." This is the optimized solution because nothing polls and nothing waits: the build starts exactly when the code changes, with zero wasted checks. Compare with poll SCM: the hook is event-driven, the poll is time-driven — and in event-driven, the build lag shrinks to nearly zero.
5.15.5 Trigger: Build Periodically
The third option fits very large projects where developers push every five minutes. Building for every single push wastes resources, so you batch: wait an hour or two and build everything at once. The build periodically option takes a cron expression: H * * * * runs once every hour, H/2 every half hour, H/4 every 15 minutes, and a value like 4 runs every four hours. The Jenkins help text itself advises not to run every four hours when hourly is enough. The demo showed the next run time advancing: built at 8:23, next run 9:23. This is the batch process that matches the automation pattern from Section 5.1.3.
Trigger 3 — Build periodically. This fits very large projects where developers push every five minutes: building for every single push wastes resources, so you batch — wait an hour or two and build everything at once. The option takes a cron expression, and Jenkins enriches plain cron with the H (hash) symbol: Jenkins replaces H with a deterministic number chosen per job, so that many jobs scheduled for the same moment spread out instead of all starting at once — avoiding a stampede of builds. In plain cron, H is not a valid field character; only Jenkins accepts it.
The professor's examples in full five-field form:
H * * * *— once every hour (at a hash-chosen minute, e.g., :23 — the demo built at 8:23, next run 9:23).- every half hour — written
H/30 * * * *(the professor's shorthand "H/2" means the step-divided value; the exact expression is H/30 for 30-minute steps). - every 15 minutes — written
H/15 * * * *(the shorthand "H/4" is the same idea at quarter-hourly granularity). - every four hours — written with a step in the hour field,
H H/4 * * *(the professor's "a value like 4" is the step of 4 hours).
The Jenkins help text itself advises not to run every four hours when hourly is enough — batching beyond the actual push volume just delays feedback. This is the batch process that matches the automation pattern from Section 5.1.3.
5.15.6 Trigger: Build After Other Projects
The fourth trigger solves a classic failure mode with backends and frontends. If the backend is not ready and you release the frontend, users download the app from the Play Store, start using it, and it crashes — because the backend it talks to does not exist. That is a public embarrassment. The rule: build the backend first; only once it is stable and running, build the frontend. In Jenkins this is the build after other projects option: you name the upstream project (by project ID), and Jenkins watches it — if that project's last build was stable, this project builds; otherwise it waits.
The failure mode the professor warned about. If the backend is not ready and you release the frontend, users download the app from the Play Store, start using it, and it crashes — because the backend it talks to does not exist. That is a public embarrassment: the defect ships to every user in the store, not to an internal environment. The rule: build the backend first; only once it is stable and running, build the frontend. In Jenkins this is the build after other projects trigger: you name the upstream project (by project ID), and Jenkins watches it — if that project's last build was stable, this project builds; otherwise it waits. The dependency chain in the build mirrors the dependency chain in the application.
5.15.7 Q&A: Windows Applications and Batch
Q: What about Windows applications — building software into an installer? Is that handled by Jenkins too? A: Yes, with one small change. The build step here is execute shell, which is for Linux, Unix, and macOS. For Windows you use execute Windows batch command instead: create a
.batfile with the full path to it, and Jenkins builds the Windows artifact. Jenkins itself runs on Windows too — you can install your own Jenkins on a Windows machine. There is a build step for every platform, and beyond the built-in ones, the Jenkins plugin manager (under the settings icon) lets you download plugins for almost anything; if a build step does not exist, a plugin provides it.
Q: What about Windows applications — building software into an installer? Is that handled by Jenkins too? A: Yes, with one small change. The build step here is execute shell, which is for Linux, Unix, and macOS — the shell scripting of Section 5.1.3. For Windows you use execute Windows batch command instead: create a .bat file with the full path to it, and Jenkins builds the Windows artifact. Jenkins itself runs on Windows too — you can install your own Jenkins on a Windows machine. There is a build step for every platform, and beyond the built-in ones, the plugin manager (under the settings icon) lets you download plugins for almost anything — if a build step does not exist, a plugin provides it.
5.15.8 Q&A: Mapping Builds to Work Items
Q: When a build runs, can we identify which work item it was for? A: Yes — this is exactly why the branch naming convention exists. The branch is named after the story number, for example DS-10. When a build runs on that branch, you know it belongs to story DS-10. If the build fails, you know which developer's branch caused it. When several developers' branches are being built at once and one fails, you remove that branch, rebuild, and the other four branches run fine — isolating the culprit is a five-minute operation.
Q: When a build runs, can we identify which work item it was for? A: Yes — this is exactly why the branch naming convention exists (Section 5.10.5). The branch is named after the story number, e.g., DS-10: when a build runs on that branch, you know it belongs to story DS-10, and if the build fails you know which developer's branch caused it. When several developers' branches are being built at once and one fails, you remove that branch, rebuild, and the other four branches run fine — isolating the culprit is a five-minute operation. The branch name is the traceability key that connects build, story, and developer.
5.15.9 Q&A: Installation and Configuration Depth
Q: Some of us come from infrastructure backgrounds. Will the sessions cover installing and configuring tools like Jenkins, Git, Puppet, and Chef from scratch? A: We will not have time to show installation from scratch — that alone can eat five to ten minutes per tool, and the sessions run about two hours. We will show configuration, not installation. Installation itself is very easy; you can pick it up from tutorials. If time permits, I will configure Puppet and Chef live for you, though they are not in the main tutorial list.
Q: Some of us come from infrastructure backgrounds. Will the sessions cover installing and configuring tools like Jenkins, Git, Puppet, and Chef from scratch? A: We will not have time to show installation from scratch — that alone can eat five to ten minutes per tool, and the sessions run about two hours. The course shows configuration, not installation: installation itself is very easy and can be picked up from tutorials. If time permits, Puppet and Chef will be configured live — they are not in the main tutorial list, but they are the configuration-management tools (Section 5.1.4 family) that infrastructure teams use daily.
Exam note: Jenkins cron configuration and branch naming conventions are pieces of the end-to-end flow — know the four triggers (poll SCM, GitHub hook, build periodically, build after other projects) and what each one costs or solves.
Recap. A Jenkins job needs three pieces — repository, credentials, build step — and its behavior is decided by the trigger: poll SCM (chatty but simple), the GitHub hook (event-driven, the optimized choice), build periodically (batch with H-hash spreading), and build after other projects (backend-before-frontend ordering). Logs and failure emails make every run observable. Bridge. The cron expressions that appear in Jenkins triggers are a general skill — the next section covers them properly: the five fields of cron and how a DevOps engineer writes schedules (Section 5.16).
Real-world & domain. Jenkins is the on-premises CI/CD workhorse (Section 5.1.5), and the four triggers map onto real pipeline design choices: webhooks are how GitHub, GitLab, and Bitbucket all notify CI today; H-spread cron is how large Jenkins farms avoid synchronized build stampedes; and "build after other projects" is the same dependency ordering that pipeline tools express as upstream/downstream stages. The branch-named build traceability is why the branch naming habit from Section 5.10.5 is considered one of the most important DevOps conventions.
5.16 Cron Jobs and Scheduling
Hook. A pipeline that only runs when someone clicks a button is not automation. Cron is the Linux scheduler that turns "run this build at 2 a.m." into a fact of the machine — and the same five-field notation reappears in Jenkins, in every cloud platform, and in every DevOps tool. Learn the five fields once and you can read any schedule anywhere.
5.16.1 The Five Fields
A cron job is a Linux background task that runs on a schedule. The schedule is written as a five-field expression — each field tells cron when to fire:
A typical expression is written with the fields separated by stars: * * * * *, which means every minute — every value is a wildcard. The five stars are the default pattern you start from. Jenkins uses the same five-field notation for its scheduling options, which is why the "poll SCM every minute" setting was the same five-star expression in Section 5.15.3.
A cron job is a Linux background task that runs on a schedule. The schedule is a five-field expression, one field per time unit, in this fixed order:
A wildcard * means "every value in this field." The expression * * * * * means every minute — every value in every field matches — and it is the default starting pattern. Because Jenkins uses the same five-field notation for its scheduling options, the "poll SCM every minute" setting in Section 5.15.3 was the same five-star expression: one notation, every tool.
5.16.2 Ranges and Overflow
Each field has a maximum value, and the numbering is zero-based. The minute field holds at most 59: if you need something at minute 60, that is not a minute anymore — it spills into the hour field. The hour field holds at most 23: minute 0 of hour 24 is midnight of the next day, so it spills into the day field. Understanding the overflow is how you translate a plain-language schedule into the correct fields: the hour comes first in the written expression, then the minute, which is a classic source of confusion.
Each field has a maximum value, and the minute and hour fields are zero-based:
- Minute field: 0–59. There is no minute 60 — a need for "minute 60" spills into the hour field (60 minutes = 1 hour).
- Hour field: 0–23. There is no hour 24 — "minute 0 of hour 24" is midnight of the next day, so it spills into the day field.
- Day of month: 1–31; month: 1–12; day of week: 0–6 (and in most implementations 7 = Sunday, the same as 0). Note the split: minute, hour, and day-of-week are zero-based; day-of-month and month are one-based.
Understanding the overflow is how you translate a plain-language schedule into correct fields. The classic confusion: the hour comes first in speech, but the minute is the first field in the expression — "10:15" is written 15 10 * * *, not 10 15 * * *.
5.16.3 Wildcards and Special Names
Besides numbers, cron supports wildcards. In Jenkins, H in a field means the job runs once within that unit — H in the minute position of an hourly job means "once this hour, at some minute." Some cron implementations also accept named macros such as @yearly (once a year), @hourly, and @reboot (run whenever the machine starts). These macros are non-standard: some cron versions accept them, others throw an error. In the demo, Jenkins accepted @yearly without complaint.
Besides plain numbers, cron supports three kinds of special notation:
- Wildcards —
*matches every value;*/nmatches every n-th value (Section 5.16.4). In Jenkins,Hin a field means "run once within this unit, at a hash-chosen value":Hin the minute position of an hourly job means once this hour, at some minute — the stampede-avoiding symbol from Section 5.15.5. - Named macros — some implementations accept words in place of the five fields:
@yearly(once a year),@hourly, and@reboot(run whenever the machine starts). These macros are non-standard: some cron versions accept them, others throw an error. In the demo, Jenkins accepted@yearlywithout complaint — Jenkins is one of the implementations that supports them.
5.16.4 Common Patterns
Putting the fields together, here are the standard patterns, described in words and written in cron notation:
- Run at 12 o'clock noon each day:
0 12 * * *— minute 0, hour 12. - Run at 10:15 each day:
15 10 * * *— minute 15, hour 10. Note the order: hour comes first in speech but the minute is the first field. - Run at exactly 14 minutes past 2 o'clock:
14 2 * * *. - Run every 5 minutes, but only during the 2 o'clock hour:
*/5 2 * * *— the/notation means "every 5th value of the field."
These are the calculations a DevOps engineer does every day — and only DevOps engineers configure them, since other team members do not get access to the scheduling layer.
Worked examples — plain language to cron, field by field. Each pattern translates by filling the five fields in order (minute, hour, day, month, day-of-week):
- "At 12 noon each day" →
0 12 * * *: minute = 0, hour = 12, the last three fields wildcarded (any day of month, any month, any day of week). - "At 10:15 each day" →
15 10 * * *: minute = 15, hour = 10. The spoken order says "10:15", the field order writes minute first — the classic swap. - "At 14 minutes past 2" →
14 2 * * *: minute = 14, hour = 2. - "Every 5 minutes, but only during the 2 o'clock hour" →
*/5 2 * * *: the/step notation means "every 5th value of the field," so minutes 0, 5, 10, ..., 55 during hour 2 only.
Sense-check: every expression's minute field sits in 0–59 and its hour field in 0–23, and the wildcards make the day, month, and weekday fields unrestricted where the schedule does not constrain them.
These are the calculations a DevOps engineer does every day — and only DevOps engineers configure them, since other team members do not get access to the scheduling layer.
5.16.5 crontab in Action
On Linux, macOS, and any Unix system the cron configuration lives in the user's crontab — the "cron table." You edit it with crontab -e (the -e flag means edit). A cron job points at a command or script; in the demo the crontab calls the build shell script from Section 5.14 and redirects its output into a log file, build.log.txt. After saving, cron reports "installing new crontab," and the job starts running. There is no log file at first — it appears only after the job has run once, which is how you verify a cron job fired. This is how DevOps creates background threads that run constantly: hourly builds, health checks, cleanup jobs.
On Linux, macOS, and any Unix system the cron configuration lives in the user's crontab — the "cron table." The workflow:
crontab -e— the-eflag means edit; this opens your cron table.- Add a line: a schedule (five fields) pointing at a command or script. In the demo the crontab calls the build shell script from Section 5.14 and redirects its output into a log file,
build.log.txt. - Save. Cron reports "installing new crontab", and the job starts running.
The verification trick: there is no log file at first — it appears only after the job has run once. The existence of the log is how you confirm the cron job actually fired. This is how DevOps creates the background threads that run constantly: hourly builds, health checks, cleanup jobs.
5.16.6 Windows Has Its Own Scheduler
Cron is a Unix-family feature; Windows does not have it. Windows uses its own scheduled-task tool — the name of which slipped the professor's mind mid-sentence, but it is the standard Windows Task Scheduler. The concept is the same: define what to run and when. Every platform and every tool has some batch-process mechanism — Jenkins has its cron-based schedules, Unix has cron, Windows has Task Scheduler — so the pattern to learn is the five-field schedule, not a specific program.
Cron is a Unix-family feature; Windows does not have it. Windows uses its own scheduled-task tool, the standard Windows Task Scheduler (the professor's name for it slipped mid-sentence, but the concept is the same): define what to run and when. The generalization is the examinable idea: every platform and every tool has some batch-process mechanism — Jenkins has its cron-based schedules (Section 5.15.3), Unix has cron, Windows has Task Scheduler — so the pattern to learn is the five-field schedule, not a specific program.
Exam note: the five-field cron notation and its translation are the examinable core — minute, hour, day of month, month, day of week; minute first in the expression even though speech says the hour first; */n for steps; H for Jenkins hash-spreading; @reboot/@yearly/@hourly as non-standard macros.
Recap. Cron schedules background jobs with five fields (minute, hour, day of month, month, day of week); ranges overflow (minute 60 → hour, hour 24 → day); step notation */n and the Jenkins H extend plain numbers; crontab -e installs jobs whose first log file proves they ran; and Windows' equivalent is Task Scheduler. Bridge. The build that cron and Jenkins run is only as good as the tests inside it — the final section closes the course with how tests drive development: unit testing, FDD, and TDD (Section 5.17).
Real-world & domain. The five-field schedule is the shared language of every scheduler a DevOps engineer touches: Linux crontab, Jenkins build periodically, cloud platform cron (e.g., AWS CloudWatch Events and scheduled functions), and backup/health-check automation. "Only DevOps engineers configure them" is literal in most organizations — the scheduling layer is a controlled surface, which is why the skill is part of the DevOps engineer's daily calculations.
5.17 Unit Testing, Feature-Driven Development, and TDD
The final concept block is about how tests drive development, and it answers a doubt raised about feature driven development (FDD): how does FDD differ from plain unit testing and from test driven development (TDD)?
Hook. Three terms — unit testing, FDD, TDD — and one question that matters for the exam and the job: who tests what, at what level, and who writes the tests? The answer is a three-layer pyramid, and the layers must never be confused.
5.17.1 Unit Testing
Unit testing is the simplest, smallest level of testing. It is done by the developer, for individual components: the submit button, the cancel button, the username text field, the password text field — each component tested in isolation. Unit tests are a broken-down fragment of feature-driven development: they prove the parts work, one at a time, but they do not prove the feature works end to end.
Unit testing is the simplest, smallest level of testing — done by the developer (Section 5.6.4's self-testing step), for individual components: the submit button, the cancel button, the username text field, the password text field — each component tested in isolation. The key limitation: unit tests are a broken-down fragment of feature-driven development — they prove the parts work, one at a time, but they do not prove the feature works end to end. A set of passing unit tests can still ship a feature that fails as a whole, because no single unit test exercises the wiring between the parts.
5.17.2 Feature-Driven Development
FDD works at the feature level. For one feature there will be a success scenario and a failure scenario — both are created as test cases. The practice: write the test case first, then write only enough code to satisfy that specific test case, then add the next test case, then code for it — test case by test case, scenario by scenario. Critically, FDD does not include security testing at all: security is a common concern that applies to every feature, not one feature, so it is written once in the TDD layer instead of being repeated per feature.
FDD (feature driven development) works at the feature level — the level of the epic from Section 5.5.1. For one feature there will be a success scenario and a failure scenario, both created as test cases. The practice is a loop:
- Write the test case first.
- Write only enough code to satisfy that specific test case — no more.
- Add the next test case.
- Code for it — test case by test case, scenario by scenario.
Critically, FDD does not include security testing at all: security is a common concern that applies to every feature, not to one feature, so it is written once in the TDD layer instead of being repeated per feature.
5.17.3 Test-Driven Development
TDD is everything written in one shot: for the whole application you write the success cases, the failure cases, the regression cases, the performance testing, the security testing, and the load testing — all together. So the layering is: unit tests cover single components, FDD covers one feature's success and failure paths, and TDD carries the full suite — regression, performance, security, load — in one go. Security is a separate feature of its own in the TDD layer.
TDD (test driven development) is the whole application's test suite written in one shot: the success cases, the failure cases, the regression cases, the performance testing, the security testing, and the load testing — all together. The three layers stack cleanly:
| Layer | Covers | Written by |
|---|---|---|
| Unit tests | Single components, in isolation | Developer |
| FDD | One feature's success and failure paths | Developer (with test cases per feature) |
| TDD | The full suite: regression, performance, security, load | Tester |
Security is a separate feature of its own in the TDD layer: one common concern, written once, applying to every feature.
5.17.4 The Login Feature as an Example
Concretely, take the login feature. The front end builds the login screen with username, password, submit, and cancel — including the cancel functionality and the login button logic that calls an API. In parallel, the back end builds the security service: whatever mechanism the organization uses — Okta, LDAP, or Active Directory (AD) — the backend implements it and, within the ten working days of the sprint, hands the developer the API to consume. The completed feature is demoable: success username plus success password logs in; success username plus failure password throws an error; both wrong, it fails. The PO tests all four combinations and concludes: this feature is complete.
Worked example — the login feature (the FDD demo). The feature is the Login epic from Section 5.5.1. Two teams work in parallel within the sprint's ten working days:
- Front end — builds the login screen: username, password, submit, and cancel — including the cancel functionality and the login button logic that calls an API.
- Back end — builds the security service: whatever mechanism the organization uses — Okta, LDAP, or Active Directory (AD) — and hands the developer the API to consume within the sprint.
The test cases follow the FDD pattern — one success scenario and one failure scenario, then the combinations:
| Username | Password | Result |
|---|---|---|
| success | success | logs in |
| success | failure | throws an error |
| failure | success | fails |
| failure | failure | fails |
The PO tests all four combinations at the demo (Section 5.6.4) and concludes: this feature is complete. Sense-check: the four combinations cover both scenarios from Section 5.17.2 — the success path (case 1) and the failure path (cases 2–4) — which is exactly the FDD promise: the feature works end to end, not just component by component.
5.17.5 Who Writes What
Q: You said TDD includes security, performance, regression, and load testing. Do the developers write all of that? A: No — the tester writes it. In the agile process it is teamwork: the same story is updated by developer, tester, PO, and the UX person. The tester writes the user test cases and creates the main task with the four or five test cases inside it. The developer then opens the story, creates their own subtask, writes their own TDD test cases there, sets the due date, and works on it. Only the developer works on the subtask; the tester's and PO's work stays at the task level.
Q: You said TDD includes security, performance, regression, and load testing. Do the developers write all of that? A: No — the tester writes it. In the agile process it is teamwork: the same story is updated by developer, tester, PO, and the UX person. The split follows the board's level hierarchy (Section 5.5.2):
- The tester writes the user test cases and creates the main task with the four or five test cases inside it.
- The developer then opens the story, creates their own subtask, writes their own TDD test cases there, sets the due date, and works on it.
- Only the developer works on the subtask; the tester's and PO's work stays at the task level.
So the earlier table's "written by" column is strict: the developer writes unit tests and their subtask test cases; the tester writes the TDD suite.
5.17.6 SRS Mapping: Epics, Features, Tasks, Subtasks
Q: In our organization we follow SRS mapping: multiple epics broken into features, features into user stories, stories into tasks. How do FDD, TDD, and BDD map onto that? A: Your case is a rarer setup. By default in agile, the feature is the epic — teams normally do not create something called a "feature." The default hierarchy is epic → story → task → subtask, with four issue types. But Jira always allows you to create custom issue types: you can create an issue type named "feature" and use it below the epic. If you do, FDD applies to that feature. Normally, though, teams apply FDD at the task level: every task will have its own feature tests. The practice: the tester creates the test suite — the task description lists "success case 1," "success case 2," "failure case 1," and so on, each written as a bold heading with bullet points like "the app should have a login button; upon pressing login, it should verify the user's credentials." The developer then breaks the task into subtasks, one per test case — success case 1 becomes subtask one, case 2 subtask two — and closes all subtasks to close the main task. Ownership is strict: the epic is created by the PO, the task by the PO and tester, and the subtask by the developer. There is no standard or style guide for the subtask content — it is developer-private, never seen by the PO or tester, which is exactly why no standards exist for it.
Q: In our organization we follow SRS mapping: multiple epics broken into features, features into user stories, stories into tasks. How do FDD, TDD, and BDD map onto that? A: Your case is a rarer setup. By default in agile, the feature is the epic — teams normally do not create something called a "feature" at all. The default hierarchy is epic → story → task → subtask, with four issue types. But Jira always allows custom issue types: you can create an issue type named "feature" and use it below the epic — and if you do, FDD applies to that feature. Normally, though, teams apply FDD at the task level: every task has its own feature tests. The practice:
- The tester creates the test suite: the task description lists "success case 1," "success case 2," "failure case 1," and so on, each written as a bold heading with bullet points — e.g., "the app should have a login button; upon pressing login, it should verify the user's credentials."
- The developer breaks the task into subtasks, one per test case — success case 1 becomes subtask one, case 2 subtask two — and closes all subtasks to close the main task.
Ownership is strict: the epic is created by the PO, the task by the PO and tester, and the subtask by the developer. There is no standard or style guide for the subtask content — it is developer-private, never seen by the PO or tester, which is exactly why no standards exist for it.
Exam note: expect the distinction between unit testing, FDD, and TDD to matter — unit tests cover single components (developer), FDD covers one feature's success and failure scenarios written before the code, and TDD carries the whole-app suite (regression, performance, security, load) written by the tester; the feature is the epic by default.
Recap. The test layers stack by scope and owner: unit tests prove components in isolation, FDD proves one feature's success/failure paths test-case by test-case, and TDD carries the whole application's suite — with security owned once, in the TDD layer, never repeated per feature. Bridge. That three-layer test suite is exactly what the build pipeline's step 2 (Section 5.14) runs on every commit — the tests from this section and the automation from Section 5.15 are one pipeline, which is the whole point of the session.
Real-world & domain. The three-layer split is how real teams run: developers own unit and subtask-level tests, QA owns the regression/performance/security/load suites, and CI runs all of them on every commit (Section 5.14's step 2). BDD (behavior-driven development) is the sibling practice mentioned in the Q&A — like FDD's scenario language, it phrases tests as "given/when/then" behavior, but the default agile hierarchy the professor teaches remains epic → story → task → subtask with the feature as the epic.
Exam Guidance Summary
The session ends with assessment guidance worth collecting in one place:
- Quiz timing and scope. The quiz is the same assessment already posted on the portal — it is not a different quiz — and it is specific to the portion of the course discussed in this session and the theory that accompanies it. The quiz window was extended so that everyone could take it; it stays open for roughly two days from this session. Take it now, while the concepts are fresh — that is exactly why the quiz is offered at the end of the session: an hour or two later you would need to search for the answers.
- What the quiz covers. The questions come from a mixture of both: this session's content and the theory portion. Anything that was discussed here and in the theory sessions is fair game.
- FDD terminology. A specific doubt about feature-driven development was raised and answered: every epic is a feature, FDD works per feature with success and failure scenarios written before the code, and security testing belongs to the TDD layer, not FDD. Expect the distinction between unit testing, FDD, and TDD to matter.
- The Git session. The next tutorial session is dedicated entirely to Git: branches, rebase, merge, pull requests, and merge-conflict resolution. Important Git commands were explicitly deferred to that class.
- Deferred integrations. The end-to-end flow — story creation, branch creation, push to Git, automatic Jenkins build, Play Store deployment — will be shown fully once the GitHub and Jira integrations are connected in a later session. The Jenkins configuration, cron scheduling, and branch naming conventions covered here are the pieces of that flow.
- Study the tool map. The tool landscape in Section 5.1 — which tool does configuration management, which does deployment, which does monitoring, which does linting — is the foundation every practical session builds on.
The single most useful preparation for this quiz is the session's own structure: the board journey of a story (5.6), the Fibonacci pointing scale and its ceiling of 13 (5.7), velocity as a rolling average (5.8), the burndown's ideal shape (5.9), the branch-naming convention (5.10), the four Jenkins triggers (5.15), the five cron fields (5.16), and the unit/FDD/TDD layering (5.17). These eight ideas cover almost every question this session can produce, and they are exactly the pieces the later end-to-end integration session will build on.
Key Industry Applications
- Real-world: Prometheus and Grafana form a widely used open-source monitoring stack in production; Google Analytics and Firebase cover web and mobile analytics; New Relic is a commercial APM product. All are integrated into real DevOps pipelines.
- Real-world: GitHub, GitLab, and Bitbucket are the repository hosts used in practice; TeamCity and SVN remain in use in older enterprises.
- Real-world: Jenkins and CircleCI are the CI/CD workhorses — Jenkins on-premises, CircleCI as a cloud CI service.
- Real-world: The Android, iOS, and Windows stores are the production destinations for mobile and desktop artifacts; the push-notification gateways in the web tier are how apps like WhatsApp deliver alerts.
- Real-world: JUnit (Java), Karma, Jasmine, Cucumber, and Mockito (JavaScript and hybrid), and Selenium and Appium (mobile and system apps) are the standard test tooling split; Android Lint, JS Lint, ES Lint, Swift Lint, Apache JMeter, and Micro Focus LoadRunner are the standard quality-and-load tooling split.
- Real-world: Okta, LDAP, and Active Directory are the identity mechanisms a login backend integrates with; Office 365, Teams, and social-media connectors (Facebook) appear as real microservices inside the service tier.
- Real-world: Slack, Teams, and WhatsApp are the communication channels that replace documentation in agile teams, with Confluence used when durable documents are needed.
- Real-world: Puppet and Chef remain common configuration-management tools in infrastructure teams, alongside the Git family.
The pattern behind all eight applications: every tool in the lecture's map (Section 5.1) is a real product category with named, working players — open source and commercial — and real pipelines mix them freely. Knowing the category each tool belongs to, and one concrete production use for each, is both the exam's foundation and the working vocabulary of a DevOps engineer.
ITD Lecture 5 notes · Agile and DevOps in Practice
Sections Breakdown
The full tool map of a DevOps engineer's daily work: Linux, the TCP/IP protocol family, shell scripting, version control, deployment, monitoring, testing, and linting tools, and where each sits in the chain.
The Flutter sample project: why Flutter, the client and web tiers, the application tier, and the data tier with the three kinds of code a release ships.
Where the sequential waterfall model still wins, why agile wins in software, and the two development models compared side by side.
The three roles in a Scrum team, why roughly ten people is optimal, and why sprints run for two weeks.
The work hierarchy — every feature is an epic, stories break into tasks and subtasks — and the definition of ready a story must pass before entering a sprint.
The board journey from backlog to done, the backlog grooming and sprint planning ceremonies, and the rules for what can move where and who owns each state.
The Fibonacci scale 1, 2, 3, 5, 8, 13, why 5 is the optimum and 13 the ceiling, planning poker, and why points measure complexity rather than days.
How velocity is computed as a rolling average of completed points, the team's capacity ceiling, and how spillover points carry into the next sprint.
What the burndown chart shows, the ideal shape from 100 percent down to zero, what a zigzag does to the team, and the pacing rules that keep it healthy.
Jira, Confluence, and Crucible in daily use: story fields, the roadmap, sprint management on the board, branch naming that ties code to stories, and student Q&A.
One story followed live from creation, through the fix and the commit, across the board, to the Jenkins build that ships the artifact.
How one Flutter codebase produces APK, IPA, DMG, and web artifacts, and why one DevOps process serves every platform.
The three-tier deployment architecture: the developer side, the pipeline through web server, repository, build server, and cloud, and the error path that reverses by design.
The five steps of the build script — build, unit test, cleanup and lint, generate the artifact, install and open — and who gets notified when each step fails.
Configuring a Jenkins job, reading build logs and failure emails, and the four build triggers: poll SCM, the GitHub hook, build periodically, and build after other projects.
The five cron fields, ranges and overflow, wildcards, steps and special names, common schedule patterns, crontab in action, and Windows Task Scheduler.
The three-layer test stack: unit tests cover single components, FDD covers one feature's success and failure scenarios, and TDD carries the whole application suite.
Exam Revision Notes
Below is the distilled, exam-ready core. Every entry comes from the full explanation above. Use this section for rapid review; return to the main notes when a point needs more context.
The DevOps Tool Landscape
Must-know: The tool map: which tool belongs to configuration management (Git, GitHub, GitLab, Bitbucket, SVN), deployment (Jenkins, CircleCI), monitoring (Prometheus, Grafana, New Relic, Google Analytics, Firebase), testing (JUnit, Karma, Jasmine, Cucumber, Mockito, Selenium, Appium), and linting (Android Lint, ES Lint, Swift Lint, JMeter).
⚠️ Top pitfall: Mixing protocol layers: HTTP/HTTPS are TCP applications, while TCP and UDP are both transports on top of IP.
Self-check: Which tool category does Jenkins belong to in this tool map, and why?
Connects to: Section 5.2, Section 5.13, Section 5.14, Section 5.15
The Sample Project and Solution Architecture
Must-know: Four-tier architecture chain (client, web, application, data) and the three kinds of deployed artifacts: client code, application code, database code.
⚠️ Top pitfall: Expecting one device (e.g., a firewall) to be the whole security perimeter; the web tier layers firewall, load balancer, reverse proxy, and tunneling.
Self-check: What three kinds of code does a release ship, and where does the DMZ sit in the tier chain?
Connects to: Section 5.1, Section 5.12, Section 5.13
Waterfall versus Agile
Must-know: Waterfall: sequential phases over 3-6+ months, only for products that cannot change (military, hardware, manufacturing). Agile: two-week increments, competitive shipping rhythm, and unclear requirements are an automatic vote for agile.
⚠️ Top pitfall: Treating agile as no planning; it is a way to discover requirements, not skip them.
Self-check: Give the three reasons agile wins in software, and name the industries where waterfall still belongs.
Connects to: Section 5.4, Section 5.6
The Scrum Team and the Sprint
Must-know: Scrum team = PO + Scrum Master + developers/testers/UX (about ten people total); team over ten splits into another Scrum team; sprint = two weeks because one week is too short to be testable and three weeks lets a second feature start mid-flight.
⚠️ Top pitfall: Adding members past ten instead of splitting the team; coordination cost grows with roughly the square of team size.
Self-check: Why is the optimal sprint two weeks, not one or three?
Connects to: Section 5.5, Section 5.6, Section 5.10
Agile Vocabulary: Epic, Story, Task, Subtask
Must-know: Hierarchy epic → story → task → subtask; every feature is an epic; feature test = can it run independently; DOR = clear requirement, no external dependency, UX/test/unit-test cases ready before a story enters a sprint.
⚠️ Top pitfall: Starting a story that has not passed the definition of ready; it then blocks the sprint.
Self-check: When a tester finds a bug, what is created on the story, and what label does it carry?
Connects to: Section 5.6, Section 5.10, Section 5.17
The Scrum Flow: Board States, Ceremonies, and Workflow Rules
Must-know: Board journey backlog→pointing→planning→in progress→testing→demo→release→done; in progress is a commitment (no backward arrow); testing can return to in progress; demo can revert; release only to done; owner chain PO, developer, tester, PO, DevOps engineer.
⚠️ Top pitfall: Jumping to demo without completing testing properly — the board arrows exist to forbid exactly this.
Self-check: Which two backward transitions exist on the board, and what triggers each?
Connects to: Section 5.5, Section 5.7, Section 5.10, Section 5.11
Story Pointing and the Fibonacci Scale
Must-know: Fibonacci recurrence F_n = F_{n-1} + F_{n-2} with F_1 = 1, F_2 = 2 gives 1, 2, 3, 5, 8, 13; splits 13 = 8 + 5 and 8 = 5 + 3; 5 is the optimum; points measure complexity by gut feeling, never days; first-story anchor: junior-most developer's 'medium' = 5.
⚠️ Top pitfall: Treating points as days (a 5-point story can take 1 day; a 1-point story can take 4 days); also claiming Fibonacci adds precision when it only forces coarse honest choices.
Self-check: Why is 5 the optimum point value, and what happens when a story comes out at 13?
Connects to: Section 5.6, Section 5.8, Section 5.9
Velocity, Capacity, and Spillover
Must-know: Velocity = rolling average of completed points: v_3 = (20+23)/2 = 21.5, then (20+23+23)/3 = 22; promise never more than your plateau velocity; spillover carries full points forward and the average absorbs the shortfall (30.5 with 2 short → (30.5+28.5)/2 = 29.5).
⚠️ Top pitfall: Committing beyond the team's plateau velocity, which guarantees spillover; treating spilled stories as part of the next sprint's plan (they carry no points but still consume capacity).
Self-check: A team completes 20, 23, and 23 points in three sprints. What is its velocity after the third sprint?
Connects to: Section 5.7, Section 5.9, Section 5.10
The Burndown Chart
Must-know: Burndown = remaining story points vs. time; ideal 100% → 80% → 60% → 40% → 20% → 10% → 0%; flat-then-flood zigzag is a resource problem (idle testers early, overloaded queue late); pacing rule: a 5-point story should be followed by a 2-3 point story.
⚠️ Top pitfall: Interpreting a zigzag as merely ugly; it means testers sat idle while the end of the sprint overloads everyone, and deployment gets no advance warning.
Self-check: What two things does a zigzag burndown do to testers and to deployment?
Connects to: Section 5.8, Section 5.10, Section 5.14
Jira and the Atlassian Suite in Practice
Must-know: Atlassian trio: Jira tracking, Confluence docs, Crucible review; branch naming git checkout -b <username>/<story-id> makes every commit traceable to its story and lets the reviewer's verdict move the story to testing automatically; use the default two-week sprint in Jira.
⚠️ Top pitfall: Committing to branches that do not carry the story id, which orphans the code from the board and breaks build-to-story tracing.
Self-check: What two ways does a pull request branch merge into the main code?
Connects to: Section 5.6, Section 5.8, Section 5.11, Section 5.15
The Live Walkthrough: The Banner Removal Story
Must-know: The banner-removal story is the lecture's live trace: a 5-point medium-priority story with a today due date (red timeline); commit is when work becomes the repository's work; story reaches done only after Jenkins ships the APK to the Play Store.
⚠️ Top pitfall: Marking a story done before the pipeline has shipped the artifact; the DevOps engineer returns to the board only after automation completes.
Self-check: Why does the story reach done only after the Jenkins build has pushed the APK?
Connects to: Section 5.6, Section 5.10, Section 5.12, Section 5.15
Multi-Platform Builds: One DevOps Process
Must-know: One Flutter codebase → APK (Android), IPA (iOS), DMG (macOS), web build (+ EXE Windows); artifacts appear automatically in the build folder; one DevOps process serves every platform.
⚠️ Top pitfall: Building per-platform pipelines; the design goal of the Flutter example is a single common deployment process.
Self-check: Where does the Android artifact land, and what is its format called?
Connects to: Section 5.2, Section 5.13, Section 5.14
The Deployment Architecture
Must-know: Three-tier view: tier one = development (IDE), tier two = repository + build automation (DevOps engineer's regular work), tier three = cloud stores; pipeline: push → web server authentication → Git repository → Jenkins build → cloud stores; the error path reverses back to development by design.
⚠️ Top pitfall: Treating the reverse (error) path as an edge case; it is the designed feedback loop of the architecture.
Self-check: What does the DevOps engineer own in tier two, and what artifacts does Jenkins produce?
Connects to: Section 5.1, Section 5.11, Section 5.14, Section 5.15
The Build Pipeline: Build, Test, Lint
Must-know: Five build steps in order: 1) build (flutter build apk --debug via Gradle), 2) unit tests, 3) cleanup and lint, 4) generate APK, 5) install and open; failure escalation: build → developer, test → developer+tester, lint → developer+reviewer; monkey process = randomized UI exercise.
⚠️ Top pitfall: Escalating a lint failure only to the developer: lint is a code-compatibility problem owned by developer and reviewer together.
Self-check: What are the five steps of the build script, in order, and who is notified when the test step fails?
Connects to: Section 5.1, Section 5.12, Section 5.13, Section 5.15
Jenkins: Job Configuration and Build Triggers
Must-know: Four triggers: poll SCM (cron-based, chatty), GitHub hook/webhook (event-driven, best), build periodically (H hash symbol spreads jobs; H * * * * hourly, H/30 half-hourly, H/15 every 15 min, H H/4 every 4 hours), build after other projects (backend stable before frontend); failure email goes to DevOps engineer plus comma-separated developer mail IDs.
⚠️ Top pitfall: Releasing the frontend before the backend is stable — users crash in the store, a public embarrassment; also using plain-cron 'H' outside Jenkins, where it is invalid.
Self-check: Which trigger starts a build the moment code arrives, and why is it better than polling?
Connects to: Section 5.10, Section 5.14, Section 5.16
Cron Jobs and Scheduling
Must-know: Five-field cron: (minute, hour, day of month, month, day of week) — minute is the first field despite hour-first speech; 0 12 * * * = noon; 15 10 * * * = 10:15; */5 2 * * * = every 5 minutes during hour 2; H is Jenkins-only hash spreading; @macros are non-standard; crontab -e; Windows Task Scheduler.
⚠️ Top pitfall: Writing the hour before the minute (10 15 * * * instead of 15 10 * * *); also using the Jenkins H symbol in plain cron, where it is invalid.
Self-check: Write the cron expression for 'every 5 minutes, only during the 2 o'clock hour' and explain each field.
Connects to: Section 5.1, Section 5.14, Section 5.15
Unit Testing, Feature-Driven Development, and TDD
Must-know: Unit tests = components, by developer; FDD = one feature's success/failure scenarios, written before the code, no security; TDD = whole-app suite (regression, performance, security, load) by the tester; security is a separate feature owned once in the TDD layer; feature = epic by default; subtasks are developer-private.
⚠️ Top pitfall: Expecting FDD to include security testing — security is a common concern, written once in the TDD layer; also assuming developers write the whole TDD suite — the tester writes it.
Self-check: Who writes the TDD suite, and why does FDD exclude security testing?
Connects to: Section 5.5, Section 5.14, Section 5.15
Exam Guidance Summary
Must-know: Quiz is the same assessment already on the portal, open ~2 days; covers this session plus theory; expect unit/FDD/TDD distinctions; Git commands deferred to the dedicated Git session; Jenkins config, cron, and branch naming are pieces of the deferred end-to-end flow.
⚠️ Top pitfall: Waiting to take the quiz — the window is short by design, while concepts are fresh.
Self-check: Which four areas does the professor flag as the core of this session's assessment?
Connects to: Section 5.1, Section 5.7, Section 5.15, Section 5.16, Section 5.17
Key Industry Applications
Must-know: Every tool category has named real players: monitoring (Prometheus+Grafana, Google Analytics, Firebase, New Relic), repositories (GitHub, GitLab, Bitbucket; older: TeamCity, SVN), CI/CD (Jenkins, CircleCI), testing (JUnit, Karma, Jasmine, Cucumber, Mockito, Selenium, Appium), quality (Android Lint, ES Lint, Swift Lint, JMeter, LoadRunner), identity (Okta, LDAP, AD), config mgmt (Puppet, Chef).
⚠️ Top pitfall: Knowing tool names without their category; the exam and the job both require mapping each tool to its job.
Self-check: Which open-source pair forms a common production monitoring stack?
Connects to: Section 5.1, Section 5.2, Section 5.17
Was this lecture useful?
BitsNotes AI Assistant
Subject Notes AssistantConfigure AI Chat
Choose how to access the chatbotSigned in as
Powered by BitsNotes — 20 messages per day. No API key needed. Want unlimited access? Use "Bring Your Own Key" mode.
Sign in to use AI Chat
Get 20 free AI messages per day to ask questions about your lecture notes. Sign in with Google or GitHub — it takes 5 seconds.
Sign In to BitsNotesSwitch to "Bring Your Own Key" tab above for unlimited access with any OpenAI-compatible provider.