Descriptive Error Messages

Descriptive Error Messages

When something unexpected or exceptional happens in a software application, usually an error message is displayed to the user and/or logged somewhere for a developer to investigate. If the error is something temporary, such as a lack of a network … Continued
Collective Code Ownership

Collective Code Ownership

Collective code ownership breaks down fiefdoms within an application’s codebase. Nobody “owns” a particular part of the code. Everyone on the team is responsible for all of the code. ¬†This enables pair programming and refactoring by the whole team. It … Continued
Common Architectural Vision

Common Architectural Vision

Well-designed software must have a single, well-defined architecture. Virtually all software, regardless of how well-designed one might find it, starts out with a single architecture. Unfortunately, many applications evolve over time, sometimes going through a partial re-architecting process that never … Continued
Rubber Duck Debugging

Rubber Duck Debugging

Sometimes the process of describing a problem, even to an inanimate object, can reveal the solution. Rubber duck debugging refers to the practice of using a small toy, like a rubber duck, as your first assistant when you are faced … Continued
Small Releases

Small Releases

Frequent, small releases help ensure constant communication and tight feedback loops.
Technical Debt

Technical Debt

Technical debt is a metaphor for all of the shortcuts, hacks, and poor design choices made for a given software system that compromised its quality, usually in an attempt to meet a deadline. It can be an appropriate business decision … Continued
Continuous Integration

Continuous Integration

Continuous Integration is an XP practice that ensures problems with the full system are detected as soon after they are introduced as possible. It refers to automatically building and testing the full system (integrating the system with all of its … Continued