1What is the main focus of this chapter?
Collaboration and ownership as the foundation of successful software engineering, beyond technical tools.
2Why do most software projects fail?
Because of failures in collaboration and ownership rather than purely technical issues.
3What is the difference between cooperation and collaboration?
Cooperation divides tasks among individuals, while collaboration shares responsibility for the overall outcome.
4Why can a cooperative team still deliver a broken system?
Because each person can finish their assigned task while the overall system fails due to lack of shared responsibility.
5What do professional teams prioritize over finishing individual tickets?
Whether the system works, is maintainable, and whether problems are surfaced early.
6What does ownership mean in software engineering?
Responsibility for outcomes.
7What does ownership not mean?
Control, blame, or working in isolation.
8What responsibilities come with owning a piece of code?
Correctness, integration, production behavior, long-term consequences, and handling bugs or regressions.
9Does ownership end after initial implementation?
No, ownership persists throughout the lifecycle of the code.
10What is diffusion of responsibility?
When unclear ownership causes everyone to assume someone else is responsible, leading to inaction.
11Is diffusion of responsibility a character flaw?
No, it is a predictable result of unclear ownership.
12What are collaboration artifacts?
Commit history, pull requests, reviews, issue discussions, and design notes.
13Why is Git more than just a version control tool?
It acts as an accountability mechanism that records who changed what, when, and why.
14What do pull requests represent beyond merging code?
Conversations, decision records, and learning opportunities.
15What does clean Git history and thoughtful reviews usually indicate?
A well-functioning team.
16What does silence in a repository often signal?
Accumulating risk and lack of visible collaboration.
17What is the primary purpose of code reviews?
To improve code quality, spread knowledge, surface assumptions, and share ownership.
18What happens when reviews are rushed or avoided?
Risk is shifted to the future version of the team.
19Is conflict harmful to collaboration?
No, disagreement is normal and necessary in software engineering.
20Why is avoiding conflict a mistake?
Because it hides unresolved differences instead of addressing them.
21What does disagree and commit mean?
Speak up during decisions, then support the final decision once it is made.
22What behavior reflects a failure of ownership in decision-making?
Remaining silent during discussion and complaining afterward.
23Does ownership end when code is written?
No, ownership spans testing, documentation, and maintenance.
24Why is testing considered an ownership activity?
Because untested features breaking reflects a failure of responsibility.
25Why is documentation an ownership activity?
Because unclear components indicate failure to own clarity.
26How do high-performing teams respond to failure?
They ask who owns the issue now and what needs to happen next, not who is to blame.
27Does AI remove responsibility from engineers?
No, engineers still own the outcomes of AI-generated code.
28Why can AI increase the importance of ownership?
Because AI can generate code but cannot take responsibility for its consequences.
29What expectations remain constant despite changing tools?
Engineers are responsible for reviews, decisions, and outcomes.
30Why does this course emphasize collaboration and ownership early?
To build professional habits before technical complexity becomes an excuse.
31What visible behaviors will the course require from students?
Working in teams, making decisions with incomplete information, and leaving collaboration artifacts.
32What is the core thesis of the chapter?
If you misunderstand collaboration, no amount of tooling will save you.
33Why do most software projects fail?
Because people work from different understandings of what the software is supposed to do.
34What is the purpose of requirements?
To translate vague ideas into precise, executable intent.
35Why are ideas considered cheap compared to code?
Ideas can be revised or abandoned easily, while code is precise, rigid, and expensive to change once embedded.
36What role do requirements play between ideas and code?
They act as a translation layer that reduces risk and enables smooth execution.
37How should the software development lifecycle be understood in practice?
As a loop where intent leads to execution, execution produces feedback, and feedback corrects gaps in intent.
38Why is early feedback important in the SDLC?
Because gaps exposed earlier are cheaper to fix than those discovered late.
39What is a common mistake about requirements?
Treating them as static documentation written once and then ignored.
40What do requirements actually express?
Expected behavior, acceptable outcomes, and responsibility.
41What does it mean that requirements encode executable intent?
They are precise enough to guide action, be validated, be tested, and even be acted on by AI.
42What happens when requirements are vague?
They produce divergent outcomes and propagate ambiguity downstream.
43Why can two developers build different things from the same vague requirement?
Because ambiguity forces them to invent their own assumptions.
44What is an example of an ambiguous requirement?
A statement like a page should load quickly without defining measurable constraints.
45Why is ambiguity especially problematic with AI systems?
Because AI does not reliably ask clarifying questions and proceeds confidently using assumptions.
46What is meant by ambiguity acting as a failure multiplier?
It scales incorrect assumptions rapidly and convincingly.
47Why must requirements be structured rather than abstract?
To expose gaps instead of hiding them.
48What is the role of the backlog?
To structure intent into inspectable, implementable, and verifiable units.
49Why do smaller backlog items surface assumptions earlier?
Because they reduce hidden uncertainty and make gaps visible.
50How does Jira function in this course?
As a formal language for expressing intent through epics, stories, tasks, and acceptance criteria.
51What do epics describe?
Goals.
52What do stories describe?
Behavior.
53What do tasks describe?
Implementation steps.
54What do acceptance criteria define?
The boundaries of what must be true for work to be considered complete.
55Why is backlog quality a leading indicator of project health?
Because well-formed stories enable parallel work and reduce costly ambiguity.
56What happens without acceptance criteria?
Completion becomes subjective and interpretations of done vary.
57What qualities define good acceptance criteria?
Observable, testable, unambiguous, and focused on outcomes.
58What qualities define poor acceptance criteria?
Subjective, implied, or open to interpretation.
59Why are requirements compared to contracts?
Because they specify inputs, outputs, and constraints like an API contract.
60What happens when a requirement contract is vague?
Trust erodes and independent work becomes risky.
61How does precision enable scale?
It allows independent teams or systems to work reliably without constant clarification.
62How do AI systems treat requirements?
As truth, without reliably inferring missing intent.
63What shapes AI output more than clever prompting?
Clear constraints and well-defined acceptance criteria.
64What is the purpose of writing vague and precise versions of the same requirement in the lab?
To observe how ambiguity changes AI-generated outcomes.
65What should students pay attention to when comparing AI outputs?
Not just correctness, but the confidence of incorrect results.
66What habit is this chapter trying to build?
Making intent explicit.
67What is the relationship between clarity and execution?
Clear requirements reduce ambiguity, which leads to predictable execution.
68Why are requirements not considered busywork?
Because they provide control over outcomes.
69What confusion do new developers often face about architecture?
They understand architecture matters but do not know what shape their system should take when starting.
70What is the key practical question architecture must answer?
What shape should this system take when I start building it?
71How is architecture defined in this course?
The choice of a system shape that makes certain behaviors easy, others hard, and some impossible.
72What is architecture not?
It is not the code, the framework, or a diagram drawn after the fact.
73What does architecture consist of?
Structural decisions that constrain what the system can become over time.
74Why does architecture continue to matter after original designers leave?
Because later developers experience its constraints as reality, not design choices.
75Why is abstraction alone insufficient for learning architecture?
Because vocabulary without concrete examples does not create practical capability.
76What is a modular monolith?
A single deployable system with internal modules and intentional boundaries.
77Why do teams choose a modular monolith?
To move quickly, minimize operational complexity, and maintain consistency in evolving domains.
78What enforces boundaries in a modular monolith?
Mostly social contracts, conventions, folder structure, and discipline.
79What is the common failure mode of a modular monolith?
Developers bypass boundaries “just once,” leading to gradual structural erosion.
80What is layered architecture?
A system organized into horizontal layers like UI, application services, domain logic, and data access with one-way dependencies.
81What is the key contract in layered architecture?
Dependencies must flow in one direction, from higher layers to lower layers.
82What is a common failure mode of layered architecture?
Everything becomes thin services, and domain logic loses substance.
83What is hexagonal architecture?
A design where the domain sits at the center and infrastructure adapts to interfaces defined by the domain.
84What is the key contract in hexagonal architecture?
The domain does not depend on infrastructure; infrastructure depends on the domain.
85What is the main benefit of hexagonal architecture?
Protecting slow-changing core logic from fast-changing infrastructure.
86What is the main risk of hexagonal architecture?
Overengineering with unnecessary abstractions.
87What defines service-oriented or microservices architecture?
Multiple independently deployed services communicating over the network.
88What are the key contracts in microservices architecture?
API schemas, versioning, backward compatibility, and failure semantics.
89What is a distributed monolith?
A system with multiple services that remain tightly coupled and require coordinated changes.
90What characterizes event-driven architecture?
Components communicate by emitting events rather than making direct requests.
91What are critical contracts in event-driven systems?
Stable event schemas, clear delivery guarantees, idempotent consumers, and explicit ordering assumptions.
92What is a common failure mode of event-driven architecture?
Loss of clarity and difficult debugging due to opaque causality.
93What do all architectural shapes have in common?
They are defined by contracts governing dependencies, data flow, failures, and change boundaries.
94What does choosing an architecture really mean?
Choosing which contracts you want to make unavoidable.
95Why are architectural decisions difficult?
Because they are made with the least information and last the longest.
96What makes architecture good under uncertainty?
Making assumptions explicit and survivable rather than assuming certainty.
97What is expected when choosing architecture in the course project?
To articulate the system shape, its contracts, and the tradeoffs intentionally accepted.
98Why is architecture without intent dangerous?
Because it becomes accidental structure rather than deliberate design.
99What is the core idea about architecture and scale?
Architecture is not about designing for hypothetical scale but for inevitable change.
100How should system shape relate to reality?
Its contracts should match the real constraints and changes the system will face.