The Art of Agile Development
Rate it:
Open Preview
Read between July 8 - July 24, 2022
50%
Flag icon
If your team can’t make progress, but no impediments seem to stand in your way, rely on Willem Larsen’s TRIPE: Tools, Resources, Interactions, Processes, and Environment. [Larsen2021] Add each category to the questions in the preceding list: What Tools slow us down? What Resources slow us down? What Interactions slow us down? And so forth.
51%
Flag icon
The team’s code is production-grade and the latest work is deployed to a production-equivalent environment at least daily.
51%
Flag icon
The team’s business representative may release the team’s latest work at will.
51%
Flag icon
Deploying and releasing is automated and takes no more than 10 minutes of manual effort.
51%
Flag icon
No manual testing is required prior to deployment.
51%
Flag icon
Most teams, even Agile teams, use a phase-based approach to development. They may work in iterations, but within each iteration, they follow a phase-based approach of requirements analysis, designing, coding, testing, and deploying,
51%
Flag icon
Agile is inherently iterative and incremental. Each story is only a day or two of work. That’s not enough time for high-quality phases. In practice, design and testing get shortchanged. Code quality degrades over time, teams have trouble figuring out how to schedule necessary infrastructure and design work, and they run out of time for testing and bug fixing.
52%
Flag icon
It’s the right and responsibility to make improvements to any aspect of your team’s code at any time.
52%
Flag icon
When you discuss how to break down tasks, talk about your design. Write tasks in terms of how your design will change: “Add endpoint to UserReportController.” “Update ContactRecord.” “Add columns to GdprConsent database table.”
52%
Flag icon
your team will swarm each story: everyone will choose tasks for the same story and focus on getting the story “done done” before moving on to the next. This minimizes work in progress
53%
Flag icon
I recommend pairing on all production code.
53%
Flag icon
A good rule of thumb is to pair on anything that you need to maintain, which includes tests and automation.
53%
Flag icon
A good developer works quickly and well, but the best developers help everyone do so.
54%
Flag icon
there are many ways for a programmer flying solo to be productive without touching production code. They can research new technologies or learn more about a technology the team is using. They can pair with a customer or tester to review recent changes, polish the application, or do exploratory testing. They can take care of administrative tasks for the team, such as responding to team emails.
57%
Flag icon
Use a real programming language for your scripts.
57%
Flag icon
Treat your scripts with the same respect as real production code.
57%
Flag icon
The ultimate goal of continuous integration is to make releasing a business decision, not a technical decision. When on-site customers are ready to release, you push a button and release.
59%
Flag icon
If you’re using feature flags and practicing test-driven development, you can integrate any time your tests are passing, which should be every few minutes. You shouldn’t ever be in a position where you can’t integrate. If you’ve gotten stuck, it might be a good idea to delete the unfinished code. If you’ve been integrating frequently, there won’t be much. You’ll do a better job with a fresh start in the morning.
63%
Flag icon
Although broad tests seem like a good way to get test coverage, they’re a trap. Broad tests are slow and unreliable.
63%
Flag icon
Conceptually, narrow integration tests are just like unit tests. In practice, because they involve the outside world, narrow integration tests tend to involve a lot of complicated setup and teardown. They’re much slower than unit tests: unit tests can run at a rate of hundreds or thousands per second, but narrow integration tests typically run at a rate of dozens per second.
64%
Flag icon
the core six safe refactorings you need are Rename, Inline, Extract Method/Function, Introduce Local Variable, Introduce Parameter, and Introduce Field.
68%
Flag icon
A spike solution, or spike, is a technical investigation. It’s a small experiment, in code, to research the answer to a problem. It usually takes less than a day. When you have the answer, the spike is discarded.
70%
Flag icon
Balance technical excellence with delivering value. Neither can take precedence over the other.
70%
Flag icon
Simplicity is hard, and you’ll have to iterate your design to get there.
76%
Flag icon
When you use keystones and feature flags well: Your team can deploy software that includes incomplete code. Releasing is a business decision, not a technical decision.
77%
Flag icon
Deploying the reverted code should proceed without incident because you’re deploying the same code that’s already running. It’s important to do so anyway, because it ensures your next deploy starts from a known-good state.
77%
Flag icon
Deploy code that understands both the new and old schema. Deploy the data migration code at the same time. After the deploy is successful, run the data migration code. It can be started manually, or automatically as part of your deploy script. When the migration is complete, manually remove the code that understands old schema, then deploy again.
79%
Flag icon
A bug is anything your team considers “done” that later needs correction.
79%
Flag icon
“Building quality in” means keeping internal quality as high as possible while keeping external quality at the level needed to satisfy your stakeholders.
79%
Flag icon
Bugs that aren’t important enough to fix should be discarded. If you can’t do that, the bug needs to be fixed. The “fix,” though, can be a matter of documenting a workaround, or making a record that you decided not to fix the bug. An issue tracker might be the right way to do this.
79%
Flag icon
some testers are business-oriented: they’re very interested in getting business requirements right. They work with on-site customers to uncover all the nit-picky details the customers would otherwise miss. They’ll often prompt people to think about edge cases during requirements discussions.
79%
Flag icon
Other testers are more technically-oriented. They’re interested in test automation and nonfunctional requirements. These testers act as technical investigators for the team. They create the testbeds that look at issues such as scalability, reliability, and performance. They review logs to understand how the software system works in production. Through these efforts, they help the team understand the behavior of its software and decide when to devote more effort to operations, security, and nonfunctional stories.
80%
Flag icon
“Bugs are for other people.”
80%
Flag icon
Bugs aren’t something to be tolerated; they’re a sign of underlying problems to be solved.
80%
Flag icon
so many teams think of their job as building the product they were told to build. They act as obedient order-takers: a software factory designed to ingest stories in one end and plop software out the other.
80%
Flag icon
Don’t just assume that your team should build what it’s told to build. Instead, assume the opposite: nobody really knows what you should build, not even the people asking for it. Your team’s job is to take those ideas, test them, and learn what you should really build.
80%
Flag icon
The data can be subjective, but the measurement should be objective. For example, “70% of our customers say they like us” is an objective measurement of subjective data.
81%
Flag icon
building repeatable test plans that comprehensively validate the system. Although this may seem more reliable, those test plans have blind spots of their own. Most of the tests end up being redundant to the tests programmers create with test-driven development. At best, they tend to find the same sorts of issues that exploratory testing does, at much higher cost, and they rarely expose problems that the other techniques reveal.
81%
Flag icon
Incident Analysis
Attila Bertók
This is a rather important chapter; consider the whole chapter highlighted
81%
Flag icon
If failure is inevitable, then the important thing is to detect failure as soon as possible; to fail early, while there’s still time to recover; to contain failure, so the consequences are minimal; and to learn from failure, not place blame.
83%
Flag icon
Everybody knows Agile teams are supposed to be autonomous, but organizations with Optimizing teams really mean it. For them, autonomy is more than just enabling teams to work independently. They give their teams full responsibility for their finances and product plans, too.
84%
Flag icon
To meet these deadlines, Optimizing teams will often build a “safety” increment before embarking on a more ambitious idea. The “safety” increment fulfills the demands of the deadline, in a minimal way, leaving the team free to work on its more ambitious ideas without worry. If those ideas doesn’t pan out, or can’t be completed in time, the team releases the “safety” increment instead.
1 2 4 Next »