How we did it:
For any feedback, any questions, any notes or just for chat - feel free to follow us on social networks
Michael C. Feathers
The average book on Agile software development describes a fairyland of greenfield projects, with wall-to-wall tests that run after every few edits, and clean & simple source code.
The average software project, in our industry, was written under some aspect of code-and-fix, and without automated unit tests. And we can't just throw this code away; it represents a significant effort debugging and maintaining. It contains many latent requirements decisions. Just as Agile processes are incremental, Agile adoption must be incremental too. No more throwing away code just because it looked at us funny.
Mike begins his book with a very diplomatic definition of "Legacy". I'l skip ahead to the undiplomatic version: Legacy code is code without unit tests.
Before cleaning that code up, and before adding new features and removing bugs, such code must be de-legacified. It needs unit tests.
To add unit tests, you must change the code. To change the code, you need unit tests to show how safe your change was.
The core of the book is a cookbook of recipes to conduct various careful attacks. Each presents a particular problem, and a relatively safe way to migrate the code towards tests.
Code undergoing this migration will begin to experience the benefits of unit tests, and these benefits will incrementally make new tests easier to write. These efforts will make aspects of a legacy codebase easy to change.
It's an unfortunate commentary on the state of our programming industry how much we need this book.
"Offers a requirements process that saves time, eliminates rework, and leads directly to better software. A great way to build software that meets users' needs is to begin with 'user stories': simple, clear, brief descriptions of functionality that will be valuable to real users. ... [the author] provides you with a front-to-back blueprint for writing these user stories and weaving them into your development lifecycle. You'll learn what makes a great user story, and what makes a bad one. You'll discover practical ways to gather user stories, even when you can't speak with your users. Then, once you've compiled your user stories, [the author] shows how to organize them, prioritize them, and use them for planning, management, and testing"--Back cover.
Ken Schwaber, Mike Beedle
Arguably the most important book about managing technology and systems development efforts, this book describes building systems using the deceptively simple process, Scrum. Readers will come to understand a new approach to systems development projects that cuts through the complexity and ambiguity of complex, emergent requirements and unstable technology to iteratively and quickly produce quality software. BENEFITS Learn how to immediately start producing software incrementally regardless of existing engineering practices or methodologies Learn how to simplify the implementation of Agile processes Learn how to simplify XP implementation through a Scrum wrapper Learn why Agile processes work and how to manage them Understand the theoretical underpinnings of Agile processes
Beck wants to encourage readers to re-examine their preconceptions of how software development ought to occur. He does just that in this overview of Extreme Programming, a controversial approach to software development which challenges the notion that the cost of changing a piece of software must rise dramatically over the course of time.
David J. Anderson
"Kanban is becoming a popular way to visualize and limit work-in-progress in software development and information technology work. Teams around the world are adding Kanban around their existing processes to catalyze cultural change and deliver better business agility. David J. Anderson pioneered the Kanban Method. Hear how this happened and what you can do to succeed using Kanban."--Publisher's website.
Laurie Williams, Robert R. Kessler
Written as instruction for pair programming newbies, with practical improvement tips for those experienced with the concept, this guide explores the operational aspects and unique fundamentals of pair programming; information such as furniture set-up, pair rotation, and weeding out bad pairs.
James L. Adams
An updated edition of the best-selling guide to overcoming creative blocks identifies the perceptual, environmental, emotional, and intellectual blocks that obstruct people from correctly perceiving problems and conceiving their solutions and provides games and exercises that limber up mental "muscles." Original. 15,000 first printing.
Proven techniques for software engineering success This in-depth volume examines software engineering topics that are not covered elsewhere: the question of why software engineering has developed more than 2,500 programming languages; problems with traditional definitions of software quality; and problems with common metrics, "lines of code," and "cost per defect" that violate standard economic assumptions. The book notes that a majority of "new" projects are actually replacements for legacy applications, illustrating that data mining for lost requirements should be a standard practice. Difficult social engineering issues are also covered, such as how to minimize harm from layoffs and downsizing. Software Engineering Best Practices explains how to effectively plan, size, schedule, and manage software projects of all types, using solid engineering procedures. It details proven methods, from initial requirements through 20 years of maintenance. Portions of the book have been extensively reviewed by key engineers from top companies, including IBM, Microsoft, Unisys, and Sony. Manage Agile, hierarchical, matrix, and virtual software development teams Optimize software quality using JAD, OFD, TSP, static analysis, inspections, and other methods with proven success records Use high-speed functional metrics to assess productivity and quality levels Plan optimal organization, from small teams through more than 1,000 personnel
Walker Royce, Kurt Bittner, Mike Perrow
Build software to interact with customers and help deliver goods and services in new and innovative ways • • Industry observers see this synergy of business concerns and IT projects as the fastest growing topic of interest to both groups • A compact and easily-digestible book that explains the key terms behind software success and failure from a business perspective • Borrows from real-world case studies and helps team leaders and managers understand why software costs what it does. Through the years, software has come less and less of an IT concern, and -- for better or worse -- more closely tied To The fortunes of an entire business organization. Yet still, even in this day and age, educated business people are often at a loss when it comes to making an informed decision about software initiatives. They truly don't Understand The widespread ramifications of their technology decisions. This book will dispel common myths about software costs, and help organizations Understand The challenges so that they may devise projects that will show measurable return on their significant technology investment. Based on years of field experience, The authors explain how software impacts the entire business infrastructure, and how it can be either a barrier to, or facilitator of success. This book outlines the essential principles of software economics so that decision makers throughout the organization can better Understand The challenges and opportunities that software presents them. The book turns the traditional view of software development as an 'engineering' discipline on its head, and offers alternative concepts of economics, iterative process, and valuebased management as the basis for repeatable, predictable success within any business organization.