Skip to main content
Introduction to Devops

DevOps Misconceptions, Anti-Patterns, and Agile Methods

Published: 2026-08-14
Level: postgraduate
Audience: Postgraduate students of software engineering and delivery

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

  • DevOps as a culture and a practice — 3.1 What Is DevOps? (Lecture 3)
  • The three dimensions of DevOps — 3.1.6 The Three Dimensions of DevOps (Lecture 3)
  • Release anti-patterns and the blame game — 3.4 Common Release Anti-Patterns and 3.8.3 The Blame Game (Lecture 3)
  • Bottlenecks, waste, and value streams — 3.2.6 The Water Tank Analogy and 3.3 Value Stream Maps (Lecture 3)
  • The DevOps lifecycle across the SDLC — 3.7 The DevOps Lifecycle: Changes Across the SDLC (Lecture 3)
  • Development team responsibility and incidents — 3.6.2 Make Development Responsible for Incident Handling (Lecture 3)

DevOps Misconceptions, Anti-Patterns, and Agile Methods

This session moves into the process side of DevOps. We start by clearing up the most common misconceptions about what DevOps is, look at the anti-patterns that signal DevOps is missing from an organization, and then break DevOps into its three dimensions: people, process, and tools. After that we look at how DevOps changes the agile lifecycle, how teams are structured (component versus feature), and the agile methods the syllabus expects: TDD, BDD, and FDD.

4.1 DevOps Misconceptions

Ask ten people in an organization what DevOps is, and you will hear ten different answers: "it is a team," "it is a CI/CD pipeline," "it is a set of tools." All of these are smaller, easier-sounding versions of the real idea. The real question this section settles: what is DevOps actually, and what is it not?

People hold a handful of recurring myths about DevOps. Each one shrinks the real idea down to a smaller, easier-sounding thing. Here are the myths and the fact behind each.

4.1.1 "DevOps is a team"

The first and most common misconception is that DevOps is a team. If you add another team to your organization and call it the DevOps team, it will not help. Adding more members to more teams creates more communication overhead — the more members you add, the more communication issues will happen. So you cannot say "my organization has a team called DevOps, so we are doing DevOps."

DevOps is not a team; it is a culture and a practice. It rests on three different dimensions — people, process, and tools — and you need best practices, effective people management, and as much automation as you can bring in, all at the same time. A team named DevOps delivers none of that by itself. The same trap shows up in the wider literature: the cartoonish picture of a "devops team" that only acts as a go-between for development and operations is used precisely as an exaggerated example of what DevOps is not. If the go-between team is your whole DevOps effort, nothing has actually changed — the two sides still do not work together; someone just stands in the middle passing messages.

The communication math matters here. In any organization, communication links grow roughly with the square of the number of people involved: two people have one link between them, five people have ten, ten people have forty-five. Every new team you add creates new links between its members and every other team, and every new link is a place where information gets delayed, distorted, or lost. A team called "DevOps" does not remove a single one of those links — it adds more.

4.1.2 "DevOps is just CI/CD"

The next misconception is that DevOps equals a CI/CD pipeline — continuous integration, continuous delivery, or continuous deployment. That is not the fact. DevOps actually takes care of scalability, consistency, and reliability. It is not only about implementing a CI/CD pipeline; the pipeline is one piece of a much larger practice.

A goal-based definition helps here: DevOps is a set of practices intended to reduce the time between committing a change to a system and the change being placed into normal production, while ensuring high quality. Notice what this definition does not mention: no specific pipeline, no specific tool, no specific vendor. The pipeline is the machine that moves code through, but the practice is the whole system around it — how teams share knowledge, how requirements include operations concerns, how failures are investigated, how monitoring is set up after deployment. If your organization has a perfect pipeline but a blame culture, broken communication, and no monitoring, you have a pipeline, not DevOps. The pipeline is one piece of a much larger practice; scalability, consistency, and reliability are outcomes that the whole practice produces.

4.1.3 "DevOps is not compliant with industry standards"

This is the biggest mistake organizations make. They feel DevOps is not compliant with industry standards because there is no governance body behind it. For ITIL, for example, there is a governance body that certifies you. The DevOps Institute exists only to give tutorial sessions and takes a license for giving you a certification; there is no general governing body for DevOps, and no ISO-style certification. The fact is the opposite: DevOps is about regulation — implementing controls to remain compliant with industry standards while reducing the risk that may affect the confidentiality, integrity, and availability of information (the CIA triad of information security).

The confusion comes from mixing two different ideas: certification and compliance. Certification is a piece of paper from a body that audits you. Compliance is a state — the state of having controls in place that keep you within the rules of your industry. Regulated domains such as banking, health care, and utilities have long treated DevOps skeptically for this reason, yet the practices themselves are adaptable: the controls, approvals, and audit trails that the regulator demands can be built into the process instead of bolted on as a separate ceremony. So the argument "no ISO-style certificate exists for DevOps, so DevOps is not compliant" fails: compliance is built into the practice through control and regulation, not through a certificate.

Pitfall 1 — equating certification with compliance. A certificate proves a body audited you once; it does not guarantee that your day-to-day controls are protecting the CIA triad. The reverse also holds: having no certificate does not mean you are non-compliant.

Pitfall 2 — waiting for a governing body before starting. There is no ISO for DevOps and there will not be one, because DevOps deliberately spans every part of the organization rather than one audit scope. Waiting for a body to certify you is a way to delay adopting the practice forever.

Pitfall 3 — treating security as a separate team's job. The CIA triad is not an add-on; controls for confidentiality, integrity, and availability are part of every release decision. Organizations that separate "the security people" from "the DevOps people" tend to discover the gap at audit time.

4.1.4 "Automation eliminates all bottlenecks"

This is a common misconception held by development teams (less so at the higher hierarchy). The belief is: if we automate, it will reduce all the bottlenecks. That is not the fact. If your process has handoffs and waiting times, automation alone will not help increase the feedback loops. So when you look at automating with tools and technology, you are supposed to adhere to the lean approach: minimize the waste in your value stream and increase the value-added time. Improve the partnership between development and operations — dev, test, and operations teams — so that there are fewer handoffs and fewer people-dependent approaches executing your process. Automation multiplies a good process; it does not repair a waiting-chain process.

Think of automation as a photocopier and your process as the original document. A photocopier makes bad handwriting look exactly like the bad handwriting, only faster and in quantity. If your process has people waiting on each other, tickets sitting in queues, and knowledge locked in one person's head, automating it reproduces the waiting at higher speed. The lean approach says: first fix the process — cut the waste, cut the waiting, cut the handoffs — and then automate what is left. Only then do you get a process that produces value faster, because the automation is amplifying something that was already good. Automation multiplies a good process; it does not repair a waiting-chain process.

In lean terms: your value stream is the full set of activities that turn a customer request into a delivered product. Some of those activities add value — writing the feature, testing it, shipping it. Others are waste — waiting for another team, reworking misunderstood requirements, passing knowledge between people by meetings. Automation makes both kinds faster. The lean discipline is to first shrink the waste so that the value-added time is a large share of the total, and only then automate. A team that automates first and improves the process second has ordered the steps backward.

4.1.5 "There is one universal continuous delivery pipeline"

People think some ideal company has already built the perfect CI/CD pipeline and we just have to replicate the same thing. That is not the fact. Even if you say Facebook completes their development and delivery of 10 or 20 features in about an hour, that is not true for Amazon. Amazon has a different frequency — they deliver every new change every second, in a fraction of a second; whenever there is a change, it resides in the production environment. Every organization has a different aspect of delivering features or changes. So we are not looking for a process that fits all organizations universally; we create a process, we improvise the process, which is the best fit for our own organization and business need — not vice versa.

The same pattern appears across the industry at smaller scales. The social network IMVU, for example, deploys new code about 50 times a day: a commit triggers an automated test suite, and a statistically significant regression automatically rolls the change back. A bank, by contrast, might release once a month with extra approval gates because its regulator demands them. Neither organization is doing DevOps "wrong" — each cadence is a choice shaped by business need and risk. That is the point: cadence is an output of the practice, not a template you copy.

Dimension Facebook Amazon A regulated bank (illustrative)
Delivery frequency 10–20 features per hour (development to delivery) Every change every second Monthly, with approval gates
What drives the cadence Speed of feature innovation in a consumer product Continuous flow of small changes to a huge retail platform Regulatory oversight and risk tolerance
Lesson Cadence is organization-specific Cadence is organization-specific Cadence is organization-specific

The takeaway from the table: when to pick which cadence is decided by your own business need — customer expectations, risk tolerance, regulatory environment — never by copying another company's numbers.

4.1.6 "DevOps is all about tools"

That is not correct either. As already mentioned, there are other aspects to DevOps. It is mandatory for a developer to use tools in order to automate some processes, but the tools you use should come from the people — that means you need effective people management at the same time. What DevOps looks for is empowered, smaller, self-sufficient teams and continuous delivery engineering. That is the output DevOps is aiming at: people, organized well, driving the tools.

The direction of influence runs from people to tools, not the other way. A tool cannot create collaboration, and a tool cannot decide what to build. People decide the process; the tool encodes the process and enforces it consistently — a configuration management tool, a CI server, a deployment pipeline. The DevOps outcome is teams that are empowered (allowed to make their own decisions), small (little communication overhead), and self-sufficient (able to build, test, deploy, and monitor their own service without waiting on other departments), plus the engineering discipline of continuous delivery. The tools are how they execute; the people are why it works.

This is also why the history of DevOps is full of tool innovation but the movement itself is not a tool movement: many startup companies came up with very innovative tools because of DevOps, but the core concept of DevOps was already present across industries long before any of those tools existed.

4.1.7 "We must release as fast as Amazon and Facebook"

People adopt different ways of working with a CI/CD pipeline. Recall the earlier distinction between delivery and deployment: there are organizations that do continuous delivery with automation, but when it comes to pushing the code to the production environment, they keep some manual intervention. So you do not have to use the same release process or the same pipeline that Amazon and Facebook use. The pipeline should be relevant to the business need of your particular organization.

Two organizations can both practice continuous delivery and still look very different at the deployment step: one pushes every change to production automatically, the other delivers the change all the way to a production-ready state and then stops for a human to press the button. Both are legitimate choices; the manual step may exist because a regulation demands human sign-off, or because the team simply is not ready for fully automated releases yet. The mistake is to measure your DevOps by someone else's release numbers. Measure it by whether your process fits your own business need and is improving over time.

The seven myths collapse into one fact: DevOps is a culture and a practice — people, process, and tools working together — not a team, not a pipeline, not a tool, not a certificate, and not a release cadence copied from another company. With the myths cleared, the natural next question is: what does an organization look like when DevOps is missing or done badly? Those tell-tale signs — the anti-patterns — are next.

4.2 DevOps Anti-Patterns

If DevOps is missing or done badly, you see characteristic anti-patterns. A useful way to think about them: nothing in this field is rocket science. Every new terminology that comes into the market is made of bits and pieces that were already there, here and there, in different industries. Someone collects the good things together and gives them a new name — that is exactly what happened with DevOps. All the best practices existed; many startup companies came up with very innovative tools because of DevOps, but the core concept of DevOps was already present across industries.

That claim is easy to verify from history. The practice of investigating failures to prevent their recurrence came into IT from total quality management in manufacturing. Kanban boards came from the Japanese manufacturing floor. The idea that the person who builds something should also run it dates back to the earliest computer programmers, who were also the operators of their machines. DevOps did not invent these pieces; it collected them, gave them one name, and connected them. The practical consequence: when an organization shows the four anti-patterns below, it is not facing a new problem — it has simply not yet applied the well-known good practices that DevOps assembles.

How do you know DevOps is missing? Look for the warning signs, not the buzzwords: people hunting for who to blame, knowledge locked in individual heads, failure investigations that stop at "whose fault," and a steady stream of manual mistakes. Each one is an anti-pattern — a pattern that works against the DevOps goal. The good news is that each anti-pattern has a direct replacement practice.

4.2.1 Blame culture

The first anti-pattern is the blame culture. DevOps works to reduce the blame game in the team. Rather than pointing fingers, you combine all the team members into a single team, and that team holds one shared business goal — not different, different goals — and moves in the same direction.

A blame culture is one that tends toward blaming and punishing people when mistakes happen. In such a culture, the failure investigation turns into a search for a single person whose actions caused the incident — and once that person is found, the investigation stops. Everyone else breathes a sigh of relief, and nothing is learned. The DevOps replacement is a blameless culture: the investigation focuses on what happened, why it made sense at the time, and what to change so it cannot happen again. The point of the post-incident discussion is to prevent the same thing from happening in the future; that is only possible if people are willing to bring forward all the details, including their own mistakes, without fear of punishment. A single shared business goal matters because blame thrives when teams have different goals — development pushed to ship, operations pushed to keep things stable — and each side points at the other. One team, one goal, one direction: there is no one else left to blame.

Notice what "one shared business goal" does to the structure: it removes the other team that the blame would attach to. The development team and the operations team stop being adversaries with separate scorecards and become one team whose scorecard is the delivered product working in production.

4.2.2 Silos and the sharing culture

The second anti-pattern is keeping knowledge restricted to yourself. DevOps breaks the silos by improving the sharing zone in the organization. According to the research reports on DevOps adoption — the DORA reports (DevOps Research and Assessment, the research program behind the annual State of DevOps reports) — the first mandatory thing for any organization looking to adopt DevOps is: start sharing. A sharing culture is the prerequisite for adopting DevOps.

There are several ways organizations build this sharing culture. Many have started a weekly meeting where all department people are invited and everyone shares their thoughts and achievements with colleagues — what you achieved this week, what you are working on. Even VPs and other leaders join these calls and share what the earnings were from one particular department, who performed well, and — in terms of motivating people — they give benefits, certifications, honors, extra payment, or awards for achieving something good. Then the people who were awarded are asked to share their thoughts on how they accomplished it, and the organization starts a mentor-mentee program. All of these are different aspects of getting into a sharing culture.

Breaking silos at TVS — promotion made dependent on knowledge sharing.

TVS India was founded by T. V. Sundaram Iyengar, and the founding year given in the session is 1978 — the year TVS Motor Company, the group's flagship firm, was incorporated (the group itself traces its origin to 1911, when T. V. Sundaram Iyengar started his transport business). Breaking silos is the best approach TVS used to follow, and they apply the same process for promotions.

When someone is eligible for promotion, there are prerequisites: say a manager is getting promoted to senior manager — the very first thing that person must do is get ready with the next person who will take over his or her current responsibility. That preparation happens about six to seven months before the promotion cycle starts. So even if you want to grow up the ladder, you are supposed to train someone who is ready to acquire your responsibility.

Step by step:

  1. A manager decides to aim for a promotion to senior manager.
  2. Six to seven months before the promotion cycle, the manager must identify a successor and train that person to take over the current responsibility.
  3. Only when the successor is ready can the promotion proceed.
  4. The cycle repeats at every rung of the ladder.

The sense-check: the promotion of one person forces the sharing of that person's knowledge before they move up. TVS converts "I know something you do not" from a source of personal power into a blocker — a person who hoards knowledge cannot advance, because the first prerequisite of advancing is handing that knowledge over.

It is a great example of breaking silos: you are no longer keeping your knowledge to yourself and creating a dependent zone in the organization; to grow, you have to share your knowledge with your juniors.

4.2.3 Root cause analysis

The next anti-pattern is the wrong kind of failure investigation. In a DevOps culture, an effective root cause analysis is performed rather than finding who introduced the problem — the question is never "is this from the development team, the operations side, or the testing side?" In the DevOps culture, root cause analysis exists to find the problem and prevent it from reoccurring again. The goal is the fix and the prevention, not the blame.

A root cause analysis (RCA) is a method to identify the contributing and root causes of an event and the actions needed to prevent it from happening again. Two classic tools support it. The 5 Whys technique asks "why" repeatedly — for each answer, ask why again — until the discussion reaches a process reason that can actually be fixed. An Ishikawa (fishbone) diagram groups causes into categories — people, process, tools, environment — to see the relationships between contributing factors instead of fixating on one. Both tools share the same discipline: keep digging past the obvious first answer. If the investigation stops at "a developer made a mistake," it has found a stopping point, not a cause — the productive question is what in the process made that mistake likely or even inevitable.

Pitfall 1 — RCA as a blame hunt. If the question is "who introduced this problem," the investigation ends where learning should begin. Keep the question on the process: "what allowed this problem to reach production?"

Pitfall 2 — stopping at human error. "A person made a mistake" is where a good investigation starts, not where it ends. In the DevOps view, people make the choices that make the most sense to them given the circumstances; the useful output of an RCA is the process change that makes the mistake hard or impossible.

Pitfall 3 — asking which team to blame. The question "is this from development, operations, or testing?" assumes the incident belongs to one department. In a DevOps team there is one team with one goal, so the question has no meaning — the only meaningful question is how to prevent the reoccurrence.

4.2.4 Human errors

The final anti-pattern to expect is a high rate of manual mistakes. Since we are increasing automation, the manual mistakes will be lessened — that is the first thing automation gives us. If your organization still shows heavy human-error rates in delivery, automation is missing.

The reasoning is mechanical: every step that a human performs by hand — typing the same configuration, remembering the same sequence of commands, copying the same artifact — is a step where a person can misremember, mistype, or skip something. Automation takes those steps out of human hands and makes them repeatable and identical every time. That is why a high rate of manual mistakes is such a telling signal: it means the organization is still running critical steps by hand, which is the opposite of the DevOps direction. Note the parallel with root cause analysis: the DevOps response to a human error is not to blame the human but to look at the process — and the first place to look is whether that step could have been automated. The automation answer is what turns a repeated human error into a design fix.

Four anti-patterns — blame culture, silos, blame-oriented failure investigation, and manual-error-prone delivery — all trace back to the same root: teams and knowledge kept apart, and processes run by hand. The replacements are one shared team goal, a sharing culture, root cause analysis aimed at prevention, and automation of the manual steps. The four anti-patterns were about what DevOps is not; the three dimensions next describe what DevOps positively rests on.

4.3 The Three Dimensions of DevOps

DevOps has three dimensions: people, process, and tools or technology. The dimensions pair up, and each pairing produces one of the three outcomes DevOps depends on.

Visualize the three dimensions as the three corners of a triangle — people at one corner, process at another, tools at the third. Each side of the triangle connects two corners, and each side produces one outcome. Read the sides in order: people joined with process gives collaboration; process joined with tools gives automation; people joined with tools gives innovation. The triangle is only complete when all three sides exist — an organization with great tools but no process, or great people but no tools, is missing two-thirds of the practice.

4.3.1 People and process: collaboration

When you have people who are adhering to a best process, you bring the greatest collaboration into your team and your organization. People following a good, defined process is what makes teams work together instead of past each other.

The mechanism is worth making explicit. A process is an agreement about how work moves — who does what, in what order, and what each person hands off. When everyone in the team knows and follows the same agreement, they do not need to negotiate the ground rules on every task; the process settles it. Collaboration is not people simply being friendly — it is people able to work on the same goal without stepping on each other, because the process coordinates them. This connects directly to the anti-patterns: a blame culture and knowledge silos are what happens when people do not share a process, so collaboration is the positive counterpart of breaking the silos.

4.3.2 Process and tools: automation

When you talk about process and tools, you are adhering to the process and trying to accommodate the tools within that process. That is how you bring automation: you automate the process with the help of tools and technology.

The direction of fit matters: the process comes first, and the tools are chosen to encode that process. A continuous integration server, a configuration management tool, a deployment pipeline — each one takes a step that people used to perform by hand and executes it the same way every time. That is exactly what automation means in this dimension: the process stops living in people's heads and starts living in the tools. Recall the anti-pattern of manual mistakes: the process-and-tools pairing is its cure, because the tool performs the step identically on every run. The tools do not replace the process; they make the process reliable and repeatable.

4.3.3 Tools and people: innovation

Since you are using tools and technology, and your people are the ones who will use them, the third pairing is people with tools. When people learn new things and write scripts, innovation arrives. For a tester, bringing automation means learning how to write test scripts — code, test as code. For an infrastructure or configuration person from the operational domain, it means writing infrastructure as code or configuration as code, working with tools like Puppet or Ansible. Real-world: Puppet and Ansible are the classic configuration-management tools named in this session for the operations side of DevOps.

Innovation here is not a vague buzzword — it has a concrete shape: people who are empowered to use tools start automating their own corners of the world. A tester who learns to script tests changes testing from a manual checklist into a repeatable artifact. An infrastructure engineer who writes infrastructure as code describes servers and their configurations in files that can be versioned, reviewed, and recreated — instead of configuring each machine by hand. The common pattern is that the people closest to the work are given tools, learn them, and then write their own automation; that is the people-and-tools pairing producing innovation. It also explains the feedback loop from the misconceptions: because the tools are chosen by the people who use them, people keep learning and keep improving the process, which feeds the process-and-tools pairing in turn.

Put the three pairings together — good collaboration from people and process, great automation from process and tools, and innovation from people and tools — and that is the actual foundation of DevOps. One line to remember: people following a good process collaborate, a good process encoded in tools automates, and people empowered with tools innovate. With the foundation in place, the next question is how DevOps changes the agile lifecycle that organizations actually run.

4.4 DevOps and the Agile Lifecycle

DevOps takes the best practices already in the market and modifies them to make them better. DevOps and agile run hand in hand: DevOps carries the practices of agile, with a couple of changes made to agile practices in order to adhere to the DevOps culture.

4.4.1 The agile cycle: inception, construction, transition

The agile cycle looks like this. In the inception phase you actually collect the requirements and design and model them: for your organization you have a vision, you have collected the requirements, and those are converted into an initial module. A high-level ranking is given to the particular features — what to release first and what not to release first — and according to that prioritization your release plan is made ready. Next you move to the construction phase, where you are supposed to adhere to agile principles, but to adhere to those principles you need a method: either you follow Scrum, XP, or Lean — whichever is suitable for your project or your business, your organization picks one. This is the phase where, using that method, the team develops a solution. Then the solution moves to the transition phase, where it gets deployed into the production environment. That is the lifecycle, the cycle, of agile.

Each phase answers one question. Inception answers what are we building and in what order — requirements are collected, designed, and modeled into an initial module, features are ranked, and the ranked list becomes the release plan. Construction answers how do we build it — the team picks an agile method (Scrum, XP, or Lean) and develops the solution according to that method. Transition answers how does it get to the customer — the finished solution is deployed into the production environment. The cycle then repeats for the next release.

4.4.2 Inception: bring the operations team in

DevOps has an impact on all three phases — inception, construction, and transition — and each phase has some modification or add-on with respect to the DevOps culture. In the inception phase, release planning includes feature prioritization, but it also includes coordination with operational personnel. The change that DevOps brings here is: we involve the operation team as well, during the inception phase itself. Operations stops being a downstream receiver and becomes part of planning.

Why does this matter so early? The operational personnel are the people who will run the system after it ships, and they carry knowledge the developers do not have: how the production environment behaves, what configurations break, what logs the support staff can actually read. If operations is consulted only at the end, that knowledge arrives too late — the release plan may already promise features that the environment cannot support. Involving operations in inception means the release plan carries their constraints and requirements from the start: what the deployment will need, what training the support people will require, and how the rollout will be handled. Operations stops being a downstream receiver and becomes part of planning.

4.4.3 Construction: continuous integration and automated testing

In the construction phase, a key element of DevOps practice is the management of the code branches. What DevOps suggests here is to follow continuous integration: whenever you make a small change, that change should go and reside into your code branches and the source code repository, and the continuous build and the subsequent processes should follow. So continuous integration, continuous delivery, and deployment should happen in the construction phase. At the same time, the testing you are doing should be automated testing — as the build is continuous, the testing should also be continuous, and you bring automation into testing as well.

Continuous integration (CI) — write CI, give the one-line meaning, then the pattern: every time a developer makes a small change, the change is merged into the shared code branches in the source code repository, and that merge automatically triggers a build and a test run. The word "continuous" does the work here: changes are integrated in small batches all through the day, not in one large merge at the end. That keeps the batch size small, so when a build breaks, the team knows the problem arrived with the most recent small change and can find it quickly. Continuous delivery and deployment then build on CI — once the change is in the repository and the automated checks pass, it flows onward through the pipeline. So the construction phase carries three things at once: continuous integration of code, the delivery/deployment flow that follows, and testing that is automated and continuous like the build itself. Because the build runs on every change, the testing must keep up with it — manual testing that takes days cannot gate a build that happens every few minutes, so the tests themselves must be automated.

4.4.4 Transition: the development team deploys, monitors, and decides

In the transition phase, the development team should be able to deploy the process: the development team should be responsible for the deployment, they should also monitor the process of deployment, and the development team is the team that should decide whether to roll back. Notice the balance: in the inception phase we gave a room for the operation team, and in the transition phase we give a room for the development team to understand the operation aspect as well. That brings more collaboration into the team — the team works as a team, not as individual job roles.

The three responsibilities are a deliberate package. Deployment is no longer "thrown over the wall" to a separate team — the developers who wrote the code move it to production. Monitoring the deployment means watching the rollout itself as it happens, not walking away after pushing a button. And the rollback decision — whether the new version is healthy enough to keep or should be pulled back and the old version restored — sits with the people who understand the change best. Together the three responsibilities force the development team to experience the operations side of their own work, which is what turns job roles into one team. This is also the balance point with inception: operations moved upstream into planning, and development moved downstream into running.

Q: What exactly happens in the transition phase? What type of tasks are involved? A: The transition phase is where your solution is ready — you have completed the development part, you did the testing, and now you are supposed to move it to the production environment. Those are the steps you follow once your code is ready: you do alpha and beta testing, you perform canary testing, you want to perform capacity testing and security testing as per your business or project need, and once that is complete you push that code to the production environment. The tasks in the transition phase include getting the infrastructure ready: for that you have to depend on the hardware, the operating system patch level, and so on, and then doing the configurations. If your application depends on Tomcat or JRE 7, that is nothing but an example of a configuration that should be present. All these tasks have to be done to get the infrastructure ready where you will perform the testing, and then you push it to the production environment. That is the transition phase.

The answer names two layers of work. The first layer is the testing sequence applied to the ready solution — alpha testing with internal users, beta testing with a limited external audience, canary testing where the new version runs on a small set of real users first, then capacity testing to check the system handles the expected load, and security testing for vulnerabilities. The second layer is infrastructure readiness — the hardware must be in place, the operating system at the right patch level, and the application's configuration present, such as the Tomcat application server or JRE 7 (Java Runtime Environment version 7) the application depends on. Only when both layers are done does the code move to production.

4.4.5 Silos and handoffs before DevOps

Q: How did silos and handoffs work before DevOps was introduced? Is a handoff between the team members, and a silo with other teams? A: In the traditional way of working, projects were reported with gold plating — have you heard about gold plating? It means you always show the positive part: what we delivered, what we did, and you never ever come across with the failures. That was the approach used to follow. The second habit that kept silos alive was being a golden member of your team: you are the subject matter expert, and you do not want to share that information with anyone else, because if you are not there, people will reach out to that person. To keep your hold on that golden member position, you never share the knowledge with anyone else — and that is what creates the dependency: if you are on leave, everyone is stuck if there is a problem. That is the scenario we used to see many times. Now with DevOps, since everything is automated — you have a proper CI/CD pipeline, you have testing scripts, your release pipeline is ready — say I make a change and the build engineer is not present on that day: there is no handoff, there is no dependency on the build engineer. Initially it would be that way till the time your CI/CD is not implemented; but once your CI/CD pipeline is ready, you know that you have to just push the code to the repository and everything will happen automatically, because your process is mature. So there is no people dependency in your team. Handoffs also exist between teams: say you are dependent on some network topology in your organization and you have to reach out to other department people. Traditionally we used to raise a ticket — raising a ticket takes just 10 minutes of time, but getting it moved to the particular network engineer is another story, because they have their own SLA: the network engineer will respond on a ticket as per the SLA, and they will get involved as per their own timeline. That is another example of handoff among different teams. Both were there, and they still are there even with DevOps if you have not reached that maturity level — you will feel those handoffs. But slowly and steadily, by adhering to DevOps, improving the process, and automating as much as you possibly can, everything will be removed, and there will be no handoffs at that point.

Gold plating is the habit of reporting only the positive side of delivery — what we delivered, what we did — and never the failures. It looks like good news management, but it is destructive: if failures are never reported, they are never investigated, and the organization never learns. The golden member is the person who stays the sole subject matter expert on something and deliberately withholds that knowledge, because being the only one who can fix it makes them indispensable. Both habits feed the same dependency: when the golden member is on leave, everyone is stuck. Gold plating hides the problem; the golden member makes the problem permanent.

The two habits connect: gold plating hides failures from the outside, while the golden member hides knowledge from the inside. Together they are why "silos" and "handoffs" became dirty words. A handoff is the transfer of work (or the responsibility for work) from one person or team to another; a silo is a team that does not share its knowledge with the rest of the organization. Where there are silos, there are handoffs — every time work crosses a silo boundary it waits, and the waiting is what automation removes.

The ten-minute ticket that takes a day — a network handoff.

Say your team needs a change in the network topology of the organization, and the network infrastructure is owned by another department.

  1. You raise a ticket — the act of raising the ticket takes about 10 minutes.
  2. The ticket lands in the network team's queue, where it waits for the network engineer.
  3. The network engineer responds as per their own SLA (service level agreement) — the formal commitment that defines how quickly they must respond and on what timeline they get involved.
  4. Your work stays blocked until the engineer's timeline, not yours, allows them to start.

The sense-check: the 10 minutes it took to raise the ticket was never the cost of the handoff — the cost was the waiting time imposed by another team's queue and SLA. With DevOps and a mature, automated process, the same change can be performed by the team itself through self-service tooling, and the handoff — along with its waiting time — disappears.

The endpoint of the process is worth stating precisely: both habits — the silo and the handoff — survive even with DevOps if the organization has not reached the maturity level where its process is automated. But slowly and steadily, by adhering to DevOps, improving the process, and automating as much as you possibly can, everything will be removed, and there will be no handoffs at that point.

DevOps modifies all three phases of the agile cycle: operations joins inception planning, construction runs continuous integration with automated testing, and the development team deploys, monitors, and decides rollback in transition. The balance — operations upstream, development downstream — is what makes the team work as one. With the lifecycle set, the next choice is which agile method family fits the organization: flow-based or non-flow-based.

4.5 Flow-Based and Non-Flow-Based Agile

4.5.1 The two families of agile methods

In agile you have two broad types of methods: flow-based and non-flow-based. The non-flow-based methods are extreme programming (XP), Scrum, FDD, BDD, and TDD. The flow-based methods are Kanban, hybrid agile, and distributed agile. The course on agile software processes is where you get more hands-on and more expertise in this particular domain; here we focus on when to choose which.

The name of each family says how work moves through the team. Non-flow-based methods organize work into fixed cycles: a group of stories is taken in, worked on together, and delivered at the end of the cycle, and the cycle repeats (Scrum's fixed-length iterations, XP's releases). Flow-based methods do away with the fixed cycle: work is pulled continuously, one item at a time, through a visible board of states — to do, in progress, done — and the team limits how much work is in progress at any moment (the WIP limit) so that nothing piles up in queues. Kanban is the flagship of the flow family: a board with columns for each state, cards for each piece of work, and a rule that the team pulls the next card only when capacity frees up. The essential relationship of the flow view is Little's-law style: a small amount of work in progress keeps items moving fast. Where the flow family sees a river of continuous movement, the non-flow family sees a repeating rhythm of cycles.

The two families also carry the same tradeoff into one formula. For a flow-based system, the time a piece of work takes to move from start to finish — its cycle time — is set by how much work sits in progress and how fast the team completes work:

where cycle time is the average time from a card being picked up to it being done, WIP is the number of work items currently in progress, and throughput is the average completion rate (items completed per unit of time). If the team holds ten items in progress and completes five per week, the average cycle time is weeks. Halve the WIP and the cycle time halves too — which is exactly why flow-based methods are obsessed with limiting WIP rather than pushing more work in.

Large batch versus small batch: the envelope game.

Ten brochures must be mailed, and each brochure needs four operations: fold, insert into the envelope, seal, and stamp. Every operation takes 10 seconds per envelope.

Large batch (fold all ten, then insert all ten, then seal all ten, then stamp all ten):

  • Folding all ten: seconds.
  • Inserting all ten: another 100 seconds.
  • Sealing all ten: another 100 seconds.
  • Stamping the first envelope: 10 seconds.
  • First completed envelope: seconds.
  • If a folding error is found during sealing (at the 200-second mark), all ten envelopes must be redone.

Small batch (fold, insert, seal, stamp one envelope, then start the next):

  • First completed envelope: seconds — about eight times faster than the large batch.
  • If a folding error is found, only the one envelope in hand must be redone.

Sense-check: the same four operations take eight times longer to produce the first finished piece in large-batch mode, and an error costs ten pieces of rework instead of one. That is the flow argument in miniature — small batches mean less waiting, faster feedback, and less waste — and it is why flow-based methods keep the batch size near one and the WIP limited.

4.5.2 Choosing between them

If your organization is in the manufacturing domain, or you have a large project that is distributed in different locations, it is always good to opt for the flow-based approach. If your organization is in the software industry — an IT organization — with a small team that is co-located, it is good to follow non-flow-based. In the IT industry generally we all follow the non-flow-based approach. If your customers are manufacturing people for whom you are developing something, then you can see a mixture of Scrum and Kanban: you will adhere to the Kanban board so that your manufacturing people can understand what tasks are to do, what are in working, and what is done. Those are the two broad families. The same logic applies in DevOps: there is no change — looking at what the project really requires and what the business needs, your organization or team will adhere to either the flow-based or the non-flow-based method.

Situation Family to prefer Why
Manufacturing domain, or a large project spread across different locations Flow-based Work flows continuously and the board makes status visible across sites; distributed teams do not need to align to one cycle
Small, co-located software (IT) team Non-flow-based The team can meet and plan in cycles; the fixed rhythm fits a small team working together face to face
IT vendor whose customers are in manufacturing Mixture (Scrum + Kanban) The development follows Scrum cycles internally, while the Kanban board speaks the manufacturing customer's visual language: to do, in working, done

The decision rule in one sentence: match the method family to how the work physically flows through your organization. The same logic applies in DevOps — there is no change: looking at what the project really requires and what the business needs, your organization or team will adhere to either the flow-based or the non-flow-based method.

Two families, one decision rule: flow-based methods (Kanban, hybrid, distributed) for continuous movement — manufacturing settings and large, distributed projects; non-flow-based methods (XP, Scrum, FDD, BDD, TDD) for fixed cycles — small, co-located IT teams. Whatever the family, the choice is driven by the project and business need. Next, the team structure question: once the method and the plan are decided, how do we organize the resources — component teams or feature teams?

4.6 Team Structures: Component Teams and Feature Teams

Before you choose a team structure you decide the planning side: you adhere to a method, you prepare a plan — a release plan, a project plan — you create tasks and subtasks, and you decide the iteration and the tenure of one cycle. That all happens when you decide on the method and the planning. Then comes resource planning: how will we organize our resources? Either we follow a component team structure or a feature team structure. These two are the ones widely accepted in the industry.

The order of decisions matters: method first, plan second, and only then resource planning. The team structure is not the starting point — it is the answer to the question "now that we know the plan, who works on what?" The two structures answer that question in opposite ways: component teams divide the work by the parts of the system, feature teams divide the work by the slices of customer value.

4.6.1 Component teams: experts in one domain

A component team is full of experts — component experts in a specific domain — and that becomes one component, one team. In the reference diagram: team one is the user interface expert, team two is the business logic expert, and team three is the database (DB) experts. Three different teams, each specialized in a different domain.

The best advantage: whatever work is delivered or completed, you know the work is qualitative, because it has been done by special people. The work is done efficiently, with a low defect density. That is the greatest advantage of a component team.

Defect density — the number of defects per unit of work (for example, per thousand lines of code) — is a measure of how clean the delivered work is. The component team's promise is a low defect density: the user interface team writes flawless interfaces because that is all they do, the business logic team writes flawless rules, and the DB team writes flawless schema and queries. The quality comes from specialization — each team is deeply skilled in its own layer. The cost is that the team structure is people dependent: each layer's progress depends on the others, because the layers of a system are not independent pieces.

The disadvantages: it is people dependent. How does being people dependent impact the time to deliver? Think of a scenario: your business team wants to work on a feature that is being designed by the user interface team. Until the design is ready, your business logic team will not be able to proceed ahead — that is the dependency — and because of that, the delivery timeline gets delayed.

4.6.2 The productivity trap: a worked example

Working in a component team also has a negative effect on productivity that cannot be overemphasized. Here is the full scenario.

The rework trap: premature work on feature one.

The business logic team wants to work on feature one, and at the same time the user interface team is working on the UI design of feature one. Since you cannot keep the business logic unit idle, you have to give them some task — so you ask the business logic team to start working on feature one, whatever requirement they understood.

  1. The business logic team starts contributing to feature one based on its own understanding of the requirement — say 40–50% to 60% of the work of feature one is completed.
  2. Meanwhile, the UI team finishes the complete user interface design of feature one.
  3. Looking at the design that came from the UI team, the business team can now understand the dependencies and compatibility issues — and the rework begins.
  4. The team is asked to start reworking the feature-one work, so the time already spent is wasted: the team was kept busy with raw work toward feature one, and now it is forced to redo that work to match the real design.

Sense-check: the wasted time did not come from bad work — it came from starting work before the dependency was ready. Because the business logic team could not be left idle, it produced work based on assumptions, and the assumptions turned out wrong when the UI design arrived. The delay in the timeline from the previous subsection and the rework here are the same disease: a dependency between teams that forces premature work or waiting.

That is the biggest disadvantage of component teams, and that is why nowadays most of the IT industry, when it comes to project implementation, tends to follow feature teams for their resource planning.

4.6.3 Feature teams: vertical slices and generalizing specialists

Feature teams contain multi-discipline individuals who have the ability and freedom to work in any area of the system. Think of it like a cake: you had the user interface layer, the business logic layer, and the DB layer, and now you are just picking up one slice that involves all of them — user interface, business logic, and DB expert. Every multi-disciplined individual can work on every aspect of these three expert domains. A feature team usually has at least one member with specialist knowledge for each layer of the system. That allows feature teams to work on what are known as vertical slices of your architecture — and that is where the term full-stack engineer comes from: someone who knows everything across the layers.

The cake analogy carries the whole structure. The cake is the system: the bottom layer is the database, the middle layer is the business logic, the top layer is the user interface. A component team cuts the cake horizontally — the frosting team, the filling team, the sponge team — each owns a full horizontal layer. A feature team cuts it vertically: one slice contains frosting, filling, and sponge together, so a single team can deliver a complete, working piece of the product without waiting for another layer team. Each slice is a vertical slice: analysis, design, programming, and testing all done for one feature, end to end. The analogy breaks where real people are involved — a vertical slice needs a person who can work in every layer, and such people are rare, which is precisely the hiring problem feature teams face.

The characteristics of a feature team:

  • Long-lived. Why long-lived? The first problem with a feature team is finding those experts — the generalized specialist is really hard to get. And once you get them, you cannot lose them: you cannot say "the project is done, so you can leave this team and join another." We want the feature team to live long, because if they work together for a longer time they gel together very well, and that impacts their performance — they achieve very high performance when they gel. So a feature team is something like six, seven, or eight people who move from one project to another simultaneously, together, throughout. We do not break the team; when the previous project is completed, we move that entire team to another project.
  • Co-located. To create the bond between a team, you need to meet face to face. Communication and connection feel good when you do it face to face rather than online — the same reason the instructor turned the video on for the first sessions, so that you feel from whom you are listening, and that connect makes you more attentive. Delivered face to face, the same session is more fruitful. The co-location requirement is the same idea: the bond of the team is built through face-to-face contact, and a team that has gelled communicates with a few words where a remote team needs an email thread.
  • Work on a complete customer-centric feature across all components and disciplines. You do analysis, programming, and testing in terms of features, not as a whole system: you pick one feature, do the requirement analysis for that feature, design it, program it, test it, and that feature gets deployed.
  • Composed of generalizing specialists. In Scrum terms, a feature team is seven plus or minus two people — minimum five, maximum nine. That is the strength of a feature team in Scrum.

Pitfall 1 — an untrained feature team delivers unqualified work. The feature team model assumes every member can work in any layer. If the members are untrained and not well experienced with the domain, the work delivered will not be qualitative, because they are not skilled to that level yet. The model works only with people who actually are generalizing specialists.

Pitfall 2 — treating the feature team as a project resource pool. The whole point is that the team stays together across projects. Breaking the team at the end of each project destroys the gel that made the team fast.

Pitfall 3 — breaking the vertical slice. If the team splits feature work back into horizontal chunks — UI people only, logic people only, DB people only — it has quietly rebuilt the component structure and its dependency chain.

The disadvantages: if the members are untrained and not well experienced with the domain, the work delivered will not be qualitative, because they are not skilled to that level yet. And the biggest disadvantage is finding those generalizing specialists. Nowadays, with the certifications and institutes that provide full-stack engineering certification programs (BITS runs such a program), you get at least an idea of where to upskill yourself — an introductory idea that brings the motivation and instinct to learn more in the domain. And DevOps itself gives the opportunity to learn: because you allow people to opt for tools, that brings innovation, people learn new things, and gradually they become generalized specialists because they learn almost everything.

4.6.4 Student experiences with team structures

Q: I am working in a feature team, and what I see is that all team members are full-stack engineers. The advantage is that a component we develop can be used by other teams. But there is a dependency on subject-matter expertise based on the knowledge of one feature, and no visibility into other features. Is that how feature teams work? A: Yes — that is a feature team in practice: a cross-functional team. The reusable component is a real advantage, and the dependency on the expert's knowledge of the feature is a real cost.

Q: In a component team I see increased dependency, and the dependency slows down the development process a bit, because time is spent on how those components integrate. A: Rightly said. And another observation from the class: a feature team will form from different domains working for the same project, while a component team works on a specific component. All these comments are in line — and the fact that everyone here already knows these terms shows that real organizations are adhering to these structures well.

The two student observations together give the honest tradeoff. A feature team pays the cost of feature-level knowledge concentration (the expert who knows the feature is a dependency), while a component team pays the cost of integration (the time spent making the separately built components fit together). Each structure moves the dependency somewhere else — the choice is which dependency your organization can absorb.

4.6.5 SRE engineers inside feature teams, and DevOps versus SRE

The discussion then turned to a third structure in the wild — Site Reliability Engineers embedded in feature teams — and the relation between DevOps and SRE.

Q: I work with SREs — Site Reliability Engineers — in my organization. What is your take on them? A: In my organization, SREs are mapped specifically to certain projects, and that is considered professional services. They are involved from the setup, and they are well-versed not just about the infrastructure components but also about the application logic and how it is implemented — that covers all of the entire features. Our managers call them a part of the feature team: they are involved right from the releases, in the discussions with the developers and the stakeholders, and they are mapped dedicated to that project. Some of our operational tasks — the construction of these pipelines and all of those things — have requirements coming from them instead of directly from the stakeholders or customers. So there is a combination of SRE engineers and application engineers combined as one team, and it is called a feature team.

The reply: that is a nice combination — it goes a bit away from the typical definition of an SRE, but it is up to the organization's need. A white paper on this shows that DevOps and SRE both have the same ultimate goal — the ultimate goal is the same for both. However, adhering to DevOps is a lengthy process because it is a culture: you are changing everything in the organization. Adhering to SRE is a little easier, because there is no culture difference — you are just making the teams segregated: development is development and operations is operations, but you automate the operations part; everything should be automated in terms of the operations part. So SRE is development plus automated operations. The team described here — dedicated SRE engineers and application engineers combined together, following the CI/CD pipeline, called a feature team — is a third, new combination.

The contrast to remember: DevOps and SRE share the same ultimate goal — reliable software delivered fast — but they reach it by different routes. DevOps is a culture change: it rewires how the whole organization thinks, so adopting it is a long process. SRE (Site Reliability Engineering, the discipline that originated at Google) is a role change: the teams stay segregated — development is development, operations is operations — but the operations part is automated, so operations work becomes code. In short, SRE is development plus automated operations. The team described in the question — SREs and application engineers combined into one dedicated feature team — is neither pure DevOps nor classic SRE; it is a third, hybrid combination that some organizations find useful, and it is valid as long as the organization's need justifies it.

Component teams buy low defect density with people dependency; feature teams buy end-to-end speed with vertical slices and generalizing specialists; and SRE-shaped teams add automated operations to the mix. Whatever the structure, the DevOps lens asks the same question: does this structure minimize handoffs and dependencies? The next topic moves from how teams are organized to how work is done inside them — starting with extreme programming, the ancestor of test-driven development.

4.7 Extreme Programming and Project Velocity

4.7.1 The XP cycle

To understand TDD, the very first prerequisite is to know extreme programming (XP), because the idea for TDD came from XP itself: from the pair programming concept of extreme programming, the TDD method emerged. XP is not part of the syllabus — this is just an overview — and you will get more familiar with it in your other courses, especially the agile software process course. Resource planning, similarly, is something you will cover in the product management or software project management course.

XP is again an iterative and incremental cycle. In the planning phase, you plan for user stories: you come across the user stories and decide what story point values you will provide for each user story; then you are ready with the acceptance test criteria and the iteration plan. With respect to the design phase, XP adheres to CRC cards — class responsibility and collaboration cards — to design the requirements into a low-level or high-level design: you draw the classes, the roles, and the collaboration between the classes. In terms of design, XP strongly suggests a prototype: create a prototype so that you get feedback from your customer, which minimizes the risk of rework after a long time. In the coding phase — the heart of extreme programming — comes pair programming. In testing, you perform all the testing that is mandatory for your project — acceptance test, capacity test, integration test, system test, and so on. Once testing is done and everything is okay, the user stories developed in the coding phase are pushed to the production environment — that is the release, the software increment. And once the software increment is done, you compute the project velocity for your next cycle.

Pair programming — the heart of extreme programming — is the practice where, on the same module, on the same code, two people work simultaneously. One person writes the code while the other person writes a unit test for the same and refactors the code; so the review of your code, the refactoring, and making your unit test ready all happen in parallel with your development, because of pair programming. The two roles trade continuously — sometimes the writer becomes the reviewer — but the point is that no line of production code exists that was not written while another pair of eyes was watching. That built-in review is why pair programming was the seed of TDD: the practice of writing a test alongside the code came out of the pairing ritual.

The cycle in one line per phase: planning decides the stories and their story point values plus the acceptance test criteria and iteration plan; design turns requirements into classes and collaborations through CRC cards and validates the design early with a prototype; coding runs as pair programming; testing runs every test the project needs; release pushes the increment to production; and velocity is computed to size the next cycle.

4.7.2 Student questions and answers

Q: If the waterfall approach is being followed, which of the two teams is preferred — component or feature? A: Component. We used to follow the component team: every expert completes the first phase, and then the second phase comes, so the work moves phase by phase through the experts. That is why we followed the component team under waterfall. The reasoning connects to the earlier section: waterfall moves work through sequential phases, and a component team is organized to match exactly that movement — the requirements experts finish the requirements phase, then the design experts take over, and so on.

Q: What is velocity? A: Velocity is how you calculate the capacity of your team. Let me explain in layman terms. During planning, say the team got seven user stories, and every user story has five story points — that is the weightage for those stories. Story points refer to the number of hours (or days) you will need to complete that particular user story. Say we calculated that five hours are needed to complete one user story, and we have seven of them. Looking at our capacity, we assume we will be able to deliver 20 hours of work. So the capacity is 20 hours for the team in one increment cycle — say two weeks (the word "sprint" belongs to Scrum vocabulary, so it is avoided here). In those two weeks we know the capacity is 20 hours, which means we can take only the user stories that total 20 hours. At the time of release, we calculate our velocity again: looking at the last increment, we see how much we could deliver, we revisit and revise the capacity, and we commit to a revised number for the next increment. That is how much the team can commit for a particular iteration.

The two answers sit on opposite ends of the planning spectrum. The waterfall answer is about matching the team structure to the lifecycle: phases in sequence, experts in sequence. The velocity answer is about the planning arithmetic inside an iterative cycle: capacity in, commitment capped, measurement after delivery, recalibration before the next cycle.

4.7.3 Project velocity: a worked example

Velocity is the measure of how much a team can commit to for a particular iteration, computed by looking at what the last increment actually delivered.

Take the numbers from the explanation above. The backlog has seven user stories, and every user story carries five story points:

where story points are the weightage of a story — the number of hours of work needed to complete that user story. Out of the 35 hours of work, the team's measured capacity for a two-week increment is only 20 hours:

with the team capacity, here hours. So in the first planning the team took four user stories — exactly the 20 hours it could commit to — and pushed the remaining three stories to the next increment.

Velocity in action: the first increment.

  1. Backlog: 7 user stories, 5 story points each → hours of work in total.
  2. Measured capacity for the two-week increment: hours.
  3. Commitment rule: take only stories whose points sum to at most 20. Four stories at 5 points each give exactly , so the team takes four stories and leaves three for the next increment.
  4. The team collaborates on designing, coding, and testing those four stories.
  5. At the time of release, they understand that they wasted about three days of time by keeping the team idle — they were in a position to complete the 20 hours of user stories in about one week, not two.
  6. They delivered the 20 hours of implementation of the four stories, and at release they calculated the velocity again.

The insight: this team is actually better able to deliver more — they took fewer user stories than their real capacity. So the velocity is recalculated, revisited, and revised upward: the capacity for this team is now to work, say, 25 hours. In the next increment, you pick the user stories whose points sum to near 25 — 22, 23, 24, 25 — something in that bracket.

Sense-check: the numbers behave exactly as the definition promises. The first commitment was honest (20 points committed, 20 delivered), the measurement revealed spare capacity (20 hours of work done in a week), and the recalibration corrected the plan (capacity revised to 25) instead of letting the team keep under-committing.

The general rule behind the numbers: the committed stories in any increment must total no more than the team capacity, and the capacity itself is re-estimated from the last increment's actual delivery. Written once:

where is the set of user stories taken in the increment, is the story point value of story (hours of work), and is the team's capacity (initially 20 hours, revised to 25 after the first increment). That is what velocity is for — calibrating how much the team can honestly commit.

Velocity is the team's honest commitment number: capacity is set before the increment from past delivery, commitment is capped by capacity, and delivery is measured after the increment to recalibrate. It comes from XP, the same method that gave birth to pair programming — and pair programming in turn gave birth to test-driven development, the next topic.

4.8 Test-Driven Development

4.8.1 What TDD is

TDD stands for test-driven development, but it is known by many different names in the market: test-driven development, test-driven design, test-first development, and emergent design are all labels people use for the same idea. Kent Beck's writing on TDD carries two memorable statements: test-first code tends to be more cohesive and less coupled than code in which testing is not part of the intimate coding cycle; and — the sharper one — if you cannot write a test for what you are going to code about, then you should not be thinking about writing the code.

The four names describe the same practice from four angles. Test-driven development names the method by its order of operations; test-driven design points out that the tests, written first, drive the design of the code; test-first development names the same order directly; emergent design describes the result — the design of the system emerges test by test instead of being fixed up front. The two Beck statements are the philosophy behind all four names. The first is a design claim: code that is written to satisfy tests, one test at a time, ends up more cohesive (each piece has one clear purpose) and less coupled (pieces do not depend on each other's internals) than code whose tests were an afterthought. The second is a discipline: if you cannot express what you are about to build as a test, you do not actually know what you are about to build — so do not start coding yet.

4.8.2 The red-green-refactor cycle

TDD follows three steps: red, green, and refactor.

  • Red: you just write a new test, which will fail because there is no code for it yet.
  • Green: you write the simplest possible code to make that test pass — the test should turn clear, not fail.
  • Refactor: you refactor the code, including the test code, wherever the team feels it should be refurnished.

The full working cycle, step by step: TDD starts with writing a test. You compile — if there are any compiler errors, you fix them — then you run the test and watch it fail, because there is no code. Once the test has failed, your team writes the simplest amount of code that will make sure the test passes. Then you run the test and watch it pass. Once it passes, you refactor the code and the test script. If the story is completed, you move to the next user story.

The name "red" comes from the test runner's color for a failing test, and "green" from its color for a passing one — so the cycle literally is: see the test go red, make it go green, then improve the code without changing its behavior. The red step matters because it proves the test can actually fail: a test that never failed is a test that might be testing nothing.

4.8.3 Worked example: adding UPI to a payment gateway

The team is working on a payment gateway task — they would like to add a payment gateway option into their product. First, choose a small task: the team picks the task. There is already implementation code — the team is already contributing, and they have some production code: the payment gateway equals some function for credit card and net banking, and that is what exists. The team wants a UPI option.

Red-green-refactor on a payment gateway.

Step 1 — Red: write a failing test. You write a test case: the new test is "payment gateway includes UPI option," and there are certain test cases in the script. The team writes this test script first, then runs it. The test will fail, because it is running against the production code: the test script hunts for the UPI function in the production (implementation) code, and since the code has a function for credit card and a function for net banking but no function for the UPI option, the test fails.

Step 2 — Green: simplest code. Once it has failed, you write the simplest code to make the test green: you just write a UPI payment function, a small amount of code, and that is it — enough to clear the test. Now the test is clear (passing).

Step 3 — Refactor. In refactoring you add Google Pay, you add any other UPI payment like PayTM, or anything else — that is refactoring: adding more features, more functionality, more lines of code. If there is a failure in the test, you refactor the code according to the failures reported by your test script.

Then repeat the steps for the next small task.

Sense-check: the test controlled the whole sequence — it failed for the right reason (the UPI function did not exist), the production code was kept minimal (just enough to pass), and the expansion (Google Pay, PayTM) happened in the refactor step where the test suite guarded every addition.

4.8.4 Test-first versus test-last

Test-first (TDD): you pick the story, you understand the story, you design it. Then you write a single test case and run it — it fails. To make it green, you write production code for that particular test. Then you run all the tests: if the results fail, you rework on your production code; if the tests pass, you see whether your story is complete. If it is complete, you go to the next story; if it is not, you go back and write a single test for another part of the same user story.

Test-last: you pick the story for the first increment, you understand it, and you implement the production code for that story fully. Then you write the test for the story and run the tests: if they fail, you rework; if they pass, you jump to the next story.

Dimension Test-first (TDD) Test-last
Order of work Story → test → production code for that test → next test Story → full production code → test for the story → next story
Feedback on a bad design Arrives after the first failing test, before much code exists Arrives only after the full story is coded
Shape of growth Code grows test by test Code is written wholesale, then checked
Rework cost when the test fails Small — only the latest test's code is involved Large — the whole story's code may need rework

The difference in shape: test-first grows code test by test, while test-last writes all the code first and only then asks whether it works.

4.8.5 Why TDD: the productivity debate

TDD can lead to a more modularized, flexible, and extensible code. You adhere to better clean code practices. There is better code documentation, because you are writing your test scripts first. And it is claimed to be more productive — but this is an ongoing debate: researchers are still debating on white papers whether TDD is productive or not. One finding from a paper: TDD initially impacts the productivity of your team, because the team is busier writing test scripts — you cannot deliver the test script to your client; you have to deliver the software, and to deliver that software you need production code, not test scripts. So initially the team focuses more on the test script, and that impacts productivity. But after a certain amount of time, once the team gets more and more familiar with the approach — say by the second or third sprint — the team starts showing improved productivity. The next advantage claimed is good design: TDD gives you a good design. Although feature-driven development also helps us come across a good design — so a good design is really a common advantage of agile, rather than a TDD-specific one.

The evidence on the table matches the professor's picture. An empirical study of TDD teams found code that was roughly 60–90% better in defect density than non-TDD teams, at the cost of taking about 15–35% longer — precisely the trade the debate is about: fewer defects in exchange for more upfront time. And the upfront time is not constant: as the team gets used to writing the test first, the initial productivity dip shrinks, which is why the professor's rule of thumb is to judge TDD after the second or third cycle, not after the first.

Pitfall 1 — judging TDD by the first cycle. The first cycle is the slowest: the team is learning the rhythm of writing tests first. Organizations that abandon TDD after one sprint mistake the initial dip for a permanent cost.

Pitfall 2 — forgetting what the customer pays for. Test scripts are not the deliverable; working software is. A team that never leaves the red phase is not doing TDD — it is writing tests.

Pitfall 3 — claiming good design as a TDD monopoly. A good design is a common advantage of agile methods (feature-driven development produces it too); TDD produces it in a specific way — through the emergent-design path — but it is not the only method that does.

4.8.6 Student questions and answers

The class raised a cluster of questions about what TDD is and is not. The core correction first, then the applications.

Q: TDD refers to what kind of test — manual test or unit test? A: First understand this: unit test, functional test, system test, integration test, and acceptance test — these are all types of testing. TDD is an approach; it is not a type of testing. The approach is that we are going to write the test script first. Whether it is a unit test, you can write a test script for the same; whether it is a functional test, there could be teams working as behavior-driven development and following TDD — in BDD we write the acceptance test first. TDD does not restrict you to just writing a unit test first; you can write any test that you want. It is the approach of how you follow the method. If you ask me frankly, though, the industry that adheres to the TDD approach is mostly restricted to writing a unit test script: they start with a unit test and then write the production code — that is what 90% of the industry adheres to.

Q: From the user interface perspective, it is not possible to write a functional test. Is that right? A: Yes, that is correct — it depends. TDD is not restricted to only unit tests. But as I said, in practice the industry that adheres to TDD starts with a unit test and then writes the production code; that is the 90% pattern.

The distinction between approach and type of testing is the master correction of this section: the testing types are the what, and TDD is the how (or more precisely, the when — test before code).

Q: Are the tests written as per the code or as per the user story? A: As per the code — but you understand the user story first. Say the user story is to create a login ID page. In the login ID page you will need a user ID, a password button, a login button, and a sign-up button. You just write a simple test script: say, the password should not contain all numerical digits, or the user ID should not have certain characters. There is no code for the same, so the test fails; then you go and start writing your production code.

Q: TDD implementation should satisfy all testing cycles that are identified for the project — correct? A: Yes. TDD is the approach: if you opt for writing a unit test first, the team writes the unit test first and then the production code. But the other testing — capacity testing, integration testing, system testing — will be followed after your implementation code is done.

Q: Unit testing is always done by the development team, right? A: That is correct. When TDD was launched, unit testing had already been introduced, and unit testing used to be done by the development team — and that is where people quickly adopted TDD, by starting to write a unit test first.

The login-page exchange is a full mini-example of the red step: the user story defines the page (user ID, password button, login button, sign-up button), the test script encodes a rule ("the password should not contain all numerical digits"), the rule has no code behind it yet, so the test fails — and only then does production code get written. And the other two exchanges draw the boundary of TDD: it replaces the first, small test in the pipeline; the bigger testing cycles still run after the implementation code is done.

Q: If TDD has to be integrated with functional testing, will the test team also be aware of the functions? A: In that case you need to have that kind of skill in your organization — the skill to start with writing a test script for functional testing. So it depends. But if you thoroughly understand TDD, TDD does not ask or restrict you to write a unit test first: it is the write-test-first approach. Whether you write a unit test or any other test case does not matter — the approach should be writing it first.

Q: What about white box testing — can we write it first? A: First a clarification, because this one trips people: a common mix-up is thinking white box testing means you do not know about the technology. The key correction: white box testing means you know about the technology — you test with knowledge of the internal code. Since it depends on the production code, you cannot write it first: you have to think, you need to have the production code first, and then you will perform that particular type of testing. So writing it first will not be possible.

Q: Is the standard testing process still followed with TDD? A: Yes, absolutely true. And in this course there is no separate developer or tester — there is a DevOps team under which you have roles and responsibilities. The tester will still perform the white box testing, and that depends on the development team giving the input wherever needed — the development team has to collaborate with the tester team to efficiently complete the white box testing.

The white-box exchange is the natural boundary case: white box testing requires the production code as its input, so it is the one testing style that structurally cannot be written first — a reminder that TDD's "write it first" applies to tests that describe intended behavior, not to tests that inspect existing internals.

Exam note: TDD is part of the syllabus. Remember the three one-liners: TDD is an approach, not a type of testing (you write any test first, though 90% of the industry writes a unit test first); the cycle is red, green, refactor; and test-first grows code test by test while test-last writes all the code first. Next: what happens when the project is so large that agile still has to scale — that is feature-driven development.

4.9 Feature-Driven Development

4.9.1 When to use FDD

FDD is feature-driven development — it is feature oriented; you work in features. FDD is best for organizations that would like to adopt agile principles but have a huge project: the project itself is very big and they still want to adhere to agile. The development team is bigger — more than 10, 20, near 40 engineers working on the same project — but they still want to follow agile. In that case the organization can opt for FDD: 40 engineers accommodated in an agile principle, with different members working on different features. Feature-driven development is the way to scale agile to large teams. Exam note: FDD is part of the syllabus.

The problem FDD solves is a scaling problem. Agile was born with small, co-located teams in mind — the classic recommendation is a team small enough to communicate directly. What happens when the project genuinely needs forty engineers? The team is too big to sit in one room, but the organization still wants the agile benefits: iterative delivery, customer involvement, working software over documentation. FDD's answer is to keep the agile principles but reorganize the work around features: forty engineers are accommodated in the agile principle by giving different members different features. Each feature becomes a small, self-contained piece of work that a few people can own completely — the agile rhythm survives at the feature scale, not the project scale.

4.9.2 The primary roles

FDD has many primary roles, precisely to accommodate the larger team size: project manager, chief architect, development manager, team lead, and domain expert — an expert in a particular domain. The class owner is the main role of FDD, a golden role, a star role, and it differs completely from extreme programming: in XP you have pair programming — two people collaborating on one single module — while in FDD the class owner is a single person who is responsible for one class. It is a one person, one module alignment: each class will have an expert available. The class owner has the responsibility to make changes much quicker, anytime it is needed, and it easily lends to the notion of code ownership — the class owner is the owner of that particular class code. It also assists FDD in scaling to larger teams, because you have one person available for the complete ownership of the feature. Then you have chief programmers (like your program manager and release manager, to manage the release cycle), a language guru (an expert in a particular technology), a build engineer (to perform your build process), a toolsmith (to create the tool chain and make configurations), and a system administrator. Real-world: different organizations give these roles different, fancier terminologies and names for their organizational structure — the role names are not standardized across the industry.

The class owner — FDD's star role — is one person responsible for one class of code. Contrast it with XP's pair programming: XP puts two people on one module (one writes, one reviews, in parallel), while FDD puts one person on one module (one owner, complete responsibility). The class owner can make changes much quicker, anytime it is needed, because there is no coordination overhead with a partner — and because the owner answers for that class, the practice maps directly onto code ownership. The role also scales: with one person owning each class, a forty-engineer project stays decomposable — every piece of code has exactly one accountable person. The supporting roles exist to keep the large team running: chief programmers manage the release cycle like a program manager and release manager; the language guru is the expert on the specific technology; the build engineer performs the build process; the toolsmith creates the tool chain and makes the configurations; and the system administrator keeps the environment running. One practical warning: the role names are not standardized — different organizations give these roles different, fancier names for their organizational structure, so always check the naming per organization.

4.9.3 The five FDD processes

FDD follows five processes: develop an overall model, build a feature list, plan by feature, design by feature, and build by feature.

  • Develop an overall model. The project requirement is big; the overall model gets ready first. You then extract the feature list from that model.
  • Build the feature list. Once the overall model is there, you build the feature list.
  • Plan by feature. Here you give the prioritization of a feature, you plan for a feature, and you find out who will be the class owner and what the feature-set owner arrangement is, and how the development plan will look — all of that is plan by feature, for one particular feature.
  • Design by feature. The feature you want to deliver in that increment cycle is now designed in depth — you design that particular feature thoroughly.
  • Build by feature. Once the design is done, you implement and deliver it.

Visualize the five processes as a linear sequence with one loop drawn back: overall model → feature list → plan by feature → design by feature → build by feature, and an arrow from design by feature back to the overall model. The arrow matters: during design by feature you are thoroughly completing the design for one particular feature that is part of your overall model. If there are any changes that have to be accommodated — based on customer feedback, you asked something, you got to know something new has to be added — that should be given back to the overall model and accommodated there. That is why the arrow back exists. So the method is: initial modeling, then model storming — because you are doing in-depth work, adhering to the building, coding, testing, and delivery parts. The loop is what keeps the model alive: the model is not a frozen document from the first step; it absorbs every change discovered while designing individual features.

4.9.4 TDD or FDD: what the project needs

When is TDD approachable? TDD is best suitable in scenarios where your team is aware of the complexity of the project they are going to work on — either they have an expert in understanding the project characteristics, what the project is. If it is a web development project and your team has been collaborating on web development projects for a long time, and they are all aware of the complexity of a web development project, then it is always good to opt for TDD, because you know what you are going to implement. FDD, by contrast, is the choice when the project is big and the team is large but agile is still wanted.

Criterion TDD FDD
What the team needs to know The complexity of the project (type, characteristics, risks) The feature list and the overall model of a big project
Team size it fits Small teams that know their project type well Large teams (10, 20, near 40 engineers)
Why it works You can write tests first only when you know what you are implementing Features decompose the project so many people can own pieces
When to pick it Familiar project territory, small team Big project, big team, agile still wanted

The one-line rule: pick TDD when the team understands the project's complexity, and FDD when the project is so big that agile needs to scale.

4.9.5 Student questions and wrap-up clarifications

Q: Can you give an example of this FDD process? A: I think I will ask this to an industry expert as well, to give you the idea about FDD — I will pass this comment along to the expert and share an example later.

Q: Is pair programming specific to TDD? Is FDD applicable for agile? And what is the difference between a domain expert and a chief programmer? A: Pair programming is specific to extreme programming, not TDD — TDD does not have pair programming. TDD has the approach of writing the test script first: test first, then code. FDD is a method which follows agile principles, so it is definitely applicable for agile; and if you collaborate with the waterfall, it becomes a hybrid agile — you call it a hybrid. A domain expert is an expert in a particular domain — call it a UI expert or a DB expert; a chief programmer has the technology aspect, the programming aspect. As for the exact role names like "principal engineer" — those are fancy terminologies; the industry opts for different terminologies and different names for its organization structures, so the naming should be checked per organization.

Q: Is a technical writer mandatory in FDD? A: Yes — it is mandatory when you talk about FDD. It should be there to write and complete the documentation part.

Pitfall 1 — assigning pair programming to TDD. Pair programming belongs to extreme programming; TDD's mechanism is different — write the test script first, then the code. TDD does not have pair programming.

Pitfall 2 — confusing a domain expert with a chief programmer. The domain expert knows a domain (a UI expert, a DB expert); the chief programmer has the technology aspect, the programming aspect. Fancy titles like "principal engineer" are just organization-specific names for these roles.

Pitfall 3 — skipping the technical writer. The technical writer is mandatory in FDD to write and complete the documentation part — a big project's documentation cannot survive on developer memory alone.

FDD scales agile to large teams: 40 engineers work on different features, each class has a class owner, and five processes — develop an overall model, build a feature list, plan by feature, design by feature, build by feature — run with a feedback arrow back to the model. Exam note: FDD is part of the syllabus. The last of the three syllabus methods, BDD, closes the set.

4.10 Behavior-Driven Development

4.10.1 BDD in brief

BDD is behavior-driven development, and it belongs to the non-flow-based family of agile methods. The one concrete practice already established in the TDD discussion: in behavior-driven development, the team writes the acceptance test first — BDD is where the acceptance test is written before the implementation. Beyond that, this session only introduced BDD; the discussion of BDD (and of Scrum, which is also not part of the syllabus) was deferred to a later session. Exam note: BDD is part of the syllabus, so watch for it in the upcoming sessions.

Behavior-driven development (BDD) — give the idea in one line: BDD is a test-first agile method in which the team writes the acceptance test before the implementation, and the test is written in terms of behavior the customer can see. The name says it: you test what the system does (its behavior) rather than how it is built. That is why BDD was mentioned in the TDD discussion — the teams that practice TDD with functional tests are, in effect, doing BDD: "in BDD we write the acceptance test first." Where TDD's typical starting point is the small unit test, BDD's starting point is the acceptance test — the test that states, in customer language, what the finished feature must do. The acceptance test is written before the implementation, and the implementation is built to make that test pass.

What this session established is an introduction, not the full picture: BDD belongs to the non-flow-based family, it writes the acceptance test first, and the full treatment was deferred to a later session, along with Scrum. The exam-relevant fact to carry now is the position of BDD in the syllabus.

Exam note: BDD is part of the syllabus. The one thing to remember from this session: BDD is behavior-driven development, a non-flow-based agile method in which the acceptance test is written before the implementation. The deeper discussion is scheduled for a later session.

Exam Guidance Summary

  • Exam note: the syllabus requires TDD, BDD, and FDD. TDD, BDD, and FDD are the agile methods to know for this course.
  • Exam note: extreme programming (XP) is not part of the syllabus — it was covered only as an overview, because TDD's idea emerged from XP's pair programming concept.
  • Exam note: Scrum is not part of the syllabus either; the Scrum slide was kept only for discussion.
  • Exam note: a student asked about the transition phase question type for the exam; the question part was deferred to a dedicated discussion of last year's question paper in the seventh or eighth contact session. Expect that session to be the place where exam-style questions are taken up.
  • Study advice: agile methods in depth belong to the agile software process course; resource planning (component versus feature teams) is covered in the product management or software project management course.
  • Study advice: when revising the transition phase, remember the full checklist from the session: alpha and beta testing, canary testing, capacity testing, security testing, infrastructure readiness (hardware, operating system patch level, configurations such as Tomcat or JRE 7), and then the push to production.
  • Study advice: for TDD, be ready to explain the red-green-refactor cycle, the test-first versus test-last difference, and the position that TDD is an approach, not a type of testing.
  • Study advice: for the velocity question, be ready to reproduce the commitment rule — the points of the stories taken in an increment must not exceed the team capacity — and to recompute the capacity from the last increment's actual delivery.

The syllabus map of this session in one line: know TDD, BDD, and FDD well; treat XP and Scrum as context, not examinable methods; and expect the exam-style question discussion in the seventh or eighth contact session.

Key Industry Applications

  • Real-world: Amazon delivers every new change into production in a fraction of a second, while Facebook completes development and delivery of 10 to 20 features in about an hour — cited as the proof that delivery cadence must be organization-specific, not copied.
  • Real-world: TVS makes promotion depend on training a successor who can take over your current responsibility six to seven months before the promotion cycle — an industrial example of breaking silos through forced knowledge sharing.
  • Real-world: Puppet and Ansible are the configuration-management tools named for infrastructure as code and configuration as code on the operations side.
  • Real-world: Tomcat and JRE 7 are cited as real application configurations that must be present in the transition-phase infrastructure.
  • Real-world: Google Pay and PayTM are used as the UPI options added during the refactoring step of the TDD payment-gateway example.
  • Real-world: the full-stack engineering certification program (BITS) is cited as a path to become a generalizing specialist for feature teams.
  • Real-world: Site Reliability Engineers (SREs) mapped dedicated to projects, involved from setup and covering both infrastructure and application logic, form feature teams in some organizations.
  • Real-world: 90% of the industry adheres to TDD by writing a unit test first, even though the approach itself allows any test to be written first.
  • Real-world: Kent Beck's test-first writing is the reference for TDD; the quotes on cohesive, less coupled code are the canonical summary of the idea.

Every concept in this session has a named, working example in the industry: organization-specific release cadence at Amazon and Facebook, forced knowledge sharing at TVS, infrastructure as code through Puppet and Ansible, TDD in action on a UPI payment gateway, and SRE engineers embedded in feature teams.

ITD Lecture 4 notes · DevOps Misconceptions, Anti-Patterns, and Agile Methods

Introduction to Devops· postgraduate· 2026-08-14

Sections Breakdown

14.1 DevOps Misconceptions

Seven common myths about DevOps — team, CI/CD, compliance, automation, pipeline, tools, and release cadence — and the fact behind each: DevOps is a culture and a practice.

24.2 DevOps Anti-Patterns

The warning signs that DevOps is missing: blame culture, silos, blame-oriented failure investigation, and manual-error-prone delivery, each with its replacement practice.

34.3 The Three Dimensions of DevOps

People, process, and tools — the three dimensions whose pairings produce collaboration, automation, and innovation.

44.4 DevOps and the Agile Lifecycle

How DevOps modifies each phase of the agile cycle: operations joins inception, construction runs continuous integration with automated testing, and the development team deploys, monitors, and decides rollback in transition.

54.5 Flow-Based and Non-Flow-Based Agile

The two families of agile methods — flow-based (Kanban, hybrid, distributed) for continuous movement and non-flow-based (XP, Scrum, FDD, BDD, TDD) for fixed cycles — and when to choose which.

64.6 Team Structures: Component Teams and Feature Teams

Component teams of domain experts versus feature teams of generalizing specialists on vertical slices, the productivity trap of premature work, and SRE engineers inside feature teams.

74.7 Extreme Programming and Project Velocity

The XP cycle — planning with story points, CRC cards, prototypes, pair programming, testing, release — and how project velocity calibrates the team's honest commitment.

84.8 Test-Driven Development

TDD as an approach, not a type of testing: the red-green-refactor cycle, test-first versus test-last, the productivity debate, and the white-box testing boundary.

94.9 Feature-Driven Development

How FDD scales agile to large teams: the class owner role, the five FDD processes, and when to pick FDD over TDD.

104.10 Behavior-Driven Development

BDD as a non-flow-based test-first method in which the acceptance test is written before the implementation.

Postgraduate students of software engineering and delivery

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.

DevOps Misconceptions

Must-know: DevOps is a culture and a practice built on three dimensions (people, process, tools); it is not a team, not just CI/CD, not tools-only, and compliance comes from built-in controls, not an ISO-style certificate.

⚠️ Top pitfall: Equating certification with compliance: no governance body certifying DevOps does not mean DevOps cannot be compliant with industry standards.

Self-check: Why does adding a team named DevOps fail to fix communication problems?

Connects to: Section 4.2

DevOps Anti-Patterns

Must-know: The first mandatory step for DevOps adoption is a sharing culture; root cause analysis in DevOps finds the problem and prevents reoccurrence rather than assigning blame.

⚠️ Top pitfall: Using root cause analysis as a blame hunt and stopping at 'human error' — the investigation should keep digging to a process reason that can be fixed.

Self-check: Why does TVS make training a successor a prerequisite for promotion?

Connects to: Section 4.1, Section 4.3

The Three Dimensions of DevOps

Must-know: Each pairing of the three dimensions produces one outcome: people with process give collaboration, process with tools give automation, people with tools give innovation.

⚠️ Top pitfall: Buying tools without a process or process without people: a single pairing alone produces none of the three outcomes.

Self-check: Which pairing produces innovation, and what does that look like for a tester?

Connects to: Section 4.1, Section 4.2

DevOps and the Agile Lifecycle

Must-know: In transition the development team deploys, monitors, and decides whether to roll back; transition includes alpha, beta, canary, capacity, and security testing plus infrastructure readiness (hardware, OS patch level, configurations such as Tomcat or JRE 7).

⚠️ Top pitfall: Reporting only the positive part of delivery (gold plating) and staying the sole knowledge holder (golden member) — both keep dependencies and handoffs alive.

Self-check: What changes does DevOps bring to the inception phase?

Connects to: Section 4.2, Section 4.5

Flow-Based and Non-Flow-Based Agile

Must-know: Non-flow-based methods (XP, Scrum, FDD, BDD, TDD) work in fixed cycles; flow-based methods (Kanban, hybrid agile, distributed agile) pull work continuously. Manufacturing and large distributed projects prefer flow-based; small co-located IT teams prefer non-flow-based.

⚠️ Top pitfall: Mixing the families without a reason: the choice must follow the project and business need, not habit or fashion.

Self-check: Which agile methods belong to the non-flow-based family?

Connects to: Section 4.6, Section 4.7

Team Structures: Component Teams and Feature Teams

Must-know: Component teams: experts per domain, low defect density, people dependent (premature work causes rework). Feature teams: multi-discipline individuals on vertical slices, long-lived, co-located, seven plus or minus two people in Scrum, built from generalizing specialists. SRE = development plus automated operations.

⚠️ Top pitfall: Keeping a component team busy with premature work before a dependency (like the UI design) is ready — the work must be redone, wasting the time spent.

Self-check: Why is a feature team long-lived, and why must it be co-located?

Connects to: Section 4.4, Section 4.7

Extreme Programming and Project Velocity

Must-know: Velocity is the capacity of the team for an iteration, recalculated after every increment: the committed stories must total no more than the team capacity, and the capacity is re-estimated from the last increment's actual delivery.

⚠️ Top pitfall: Taking fewer stories than the team's real capacity and then under-committing forever — velocity must be recalculated from actual delivery, not assumed.

Self-check: Why is the component team preferred under the waterfall approach?

Connects to: Section 4.6, Section 4.8

Test-Driven Development

Must-know: TDD is an approach, not a type of testing: write the test first (red), write the simplest code to make it pass (green), refactor; white box testing cannot be written first because it needs the production code; 90% of the industry writes a unit test first.

⚠️ Top pitfall: Mistaking TDD for a type of testing, or thinking white box testing means you do not know the technology (it means you know the internal code, so it cannot be written first).

Self-check: Why does the red step matter in the TDD cycle?

Connects to: Section 4.7, Section 4.9

Feature-Driven Development

Must-know: FDD is for large projects and large teams (near 40 engineers) that still want agile: one class owner per class, five processes (overall model, feature list, plan by feature, design by feature, build by feature), and a feedback arrow from design back to the overall model.

⚠️ Top pitfall: Pair programming is specific to XP, not TDD; a domain expert knows a domain while a chief programmer handles the technology aspect.

Self-check: Why does FDD suit large teams better than small-team agile methods?

Connects to: Section 4.8, Section 4.10

Behavior-Driven Development

Must-know: BDD is behavior-driven development, belongs to the non-flow-based family, and writes the acceptance test before the implementation; it is part of the syllabus.

⚠️ Top pitfall: Confusing BDD's acceptance-test-first practice with TDD's unit-test-first habit — the test types differ, though both are write-test-first approaches.

Self-check: In which agile method is the acceptance test written before the implementation?

Connects to: Section 4.8

Exam Guidance Summary

Must-know: Examinable agile methods: TDD, BDD, FDD. Non-examinable: XP and Scrum. Transition-phase checklist: alpha, beta, canary, capacity, security testing, infrastructure readiness, push to production.

Self-check: Which agile methods are part of the syllabus?

Connects to: Section 4.8, Section 4.9, Section 4.10

Key Industry Applications

Must-know: Delivery cadence is organization-specific (Amazon: every second; Facebook: 10-20 features per hour); TVS ties promotion to training a successor; Puppet and Ansible are the classic configuration-management tools.

Self-check: Which tools are named for infrastructure as code on the operations side?

Connects to: Section 4.1, Section 4.2, Section 4.6, Section 4.8

Was this lecture useful?

Loading comments…
🤖

BitsNotes AI Assistant

Subject Notes Assistant

Configure AI Chat

Choose how to access the chatbot
Have your own API key?

Switch to "Bring Your Own Key" tab above for unlimited access with any OpenAI-compatible provider.

🔑 Enter API key above to fetch live models from provider, or enter model name manually.
OpenAI-Compatible API Support

Choose any provider preset (Gemini, DeepSeek, Kimi, GLM, MiniMax, Qwen, OpenAI, Groq, Ollama, etc.) or enter a custom endpoint URL.

Security & Privacy First

Your API key is sent directly from your browser to your specified provider. BitsNotes servers never store or see your key.