1. Relational vs Hierarchical Thinking
2. Collaboration
2.1. Sufficient communication
2.2. Frequent
3. Persistent
4. Self Improvement
4.1. intentional practice
4.1.1. book discussions
4.1.2. online communities
4.1.3. Reading
4.1.4. Code Kata
4.1.5. local user groups
4.1.6. open source projects
4.1.7. conferences
4.2. retroflection
4.2.1. Daily self reflection
4.2.2. Self Management
4.2.3. Common Pitfalls
4.2.4. Self Awareness
4.3. balance
4.3.1. Keeping Motivated
4.3.1.1. autonomy
4.3.1.2. mastery
4.3.1.3. purpose
4.3.2. work/ health/ friends
4.3.3. social captial (networking)
4.3.4. slack
5. Product
5.1. vision
5.1.1. clear problem domain
5.1.1.1. Visualization and Presentation Techniques
5.1.1.2. Wireframe/Paper Prototyping
5.1.1.3. working directly with whole team
5.1.2. explicit goals
5.1.2.1. managed scope
5.1.3. measured progress
5.1.3.1. success metrics
5.1.3.2. split testing
5.2. solves real/valuable problems
6. easy to use/learn
6.1. simple
6.2. functional completeness
6.3. overall coherence
6.3.1. Evolutionary Design
7. Confidence
7.1. Definition of Done
7.1.1. working software
7.1.2. validated learning
7.1.3. High Quality
7.1.3.1. Zero Bugs
7.2. Visibility
7.2.1. Storyboard
7.2.2. Informative Build
7.2.3. Burn-up/down charts
7.2.4. transparency
7.2.4.1. open decision making
7.2.4.2. continuous improvement
7.2.4.2.1. Plan Do Check Act
7.2.5. Reliable Cadence
7.2.6. Using Version Control
7.2.6.1. Distributed
7.2.6.2. Optimistic vs Pessimistic Locking
7.2.6.3. branching
7.2.7. Continuous Integration (CI)
7.2.7.1. CI Tools
7.2.7.2. automated deployment
7.2.7.3. automated build
7.2.7.3.1. ten-minute build
7.2.7.4. automated deployment
7.2.7.5. frequent check-in
8. Code Smells
8.1. Don't Repeat Yourself
8.2. Law of Demeter (Tell Don't Ask)
8.3. Metrics
8.3.1. Test Coverage
8.3.2. Lines of Code (sphags)
8.3.3. Static Code Analysis Tools
8.3.3.1. Find Bugs Report
8.3.3.2. Cyclomatic Complexity
9. Performance / Response Time
10. Non-functional requirements
10.1. Load / Capacity
10.2. Robustness / Long Duration
11. Technical Excellence
11.1. Simple Design
11.1.1. KISS - Keep it simple, stupid!
11.1.1.1. Architecture--simplest thing that could possibly work
11.1.1.2. One level of abstraction
11.1.2. Design Patterns
11.1.2.1. Evolutionary Iterative Development
11.1.2.2. Emergent Design
11.1.2.2.1. Refactoring to Framework
11.1.2.2.2. Avoid Speculative Generality
11.1.2.3. MVP / MVC Patterns
11.1.2.4. Separation of Concerns
11.1.2.5. FCoI - Favour Composition over Inheritance
11.1.2.6. Modeling
11.1.2.6.1. CRC (class responsibility collaborator) cards
11.1.2.6.2. UML diagrams
11.1.2.6.3. whiteboard discussions
11.1.3. Craftsmanship
11.1.3.1. Coding by Intention
11.1.3.2. Clean Code
11.1.3.3. Boy Scout Rule
11.1.3.4. Source Code Conventions
11.2. Refactoring
11.2.1. SOLID
11.2.1.1. Single Responsibility Principle
11.2.1.2. Open Closed Principle
11.2.1.3. Liskov Substitution Principle
11.2.1.4. Interface Segregation Principle
11.2.1.5. Dependency Inversion Principle
11.2.2. Common Refactorings
11.2.2.1. Compose Method
11.2.2.2. Extract Method
11.2.2.3. Inline Method
11.2.2.4. Rename
11.2.3. Database Refactoring
11.2.3.1. testing databases
11.2.3.2. abstracting away from dbms
11.2.4. Test Refactoring
11.2.5. Modular Design
11.3. Testing
11.3.1. developer tests
11.3.1.1. Unit Testing
11.3.1.1.1. xUnit
11.3.1.2. Design-for-Testability
11.3.2. test-first
11.3.2.1. Test-Driven Development
11.3.2.1.1. TDD Cycle - Red, Green, Refactor
11.3.2.1.2. Which test next?
11.3.2.1.3. TDD with GUIs
11.3.2.2. Tests Used for Design
11.3.2.3. Behavior-Driven Development
11.3.2.3.1. StoryTest-Driven Development
11.3.3. customer tests
11.3.3.1. Acceptance Testing
11.3.3.2. Exploratory Testing
11.3.3.3. Testing Quadrants
11.3.3.3.1. Supporting Programming
11.3.3.3.2. Robustness / Fault Tolerance
11.3.3.3.3. Technology Facing
11.3.3.3.4. Business Facing
11.3.4. Test Automation
11.3.4.1. Test Automation Patterns
11.3.4.1.1. Test Doubles
11.3.4.1.2. 3A Pattern: Arrange, Act, Assert
12. Business Value
12.1. validating
12.1.1. Release Management
12.1.1.1. Flow
12.1.1.2. Stories
12.1.1.2.1. Story Estimation
12.1.1.2.2. Story Splitting
12.1.1.2.3. Story Writing
12.1.1.3. Delivering In Small Slices
12.1.1.3.1. Incremental
12.1.1.3.2. Iterative
12.1.1.4. Product Backlog
12.1.1.4.1. Sprint Backlog
12.1.1.5. frequent delivery
12.1.1.6. Basic Throughput Accounting
12.1.1.6.1. Cadence
12.1.1.6.2. Limiting Work in Progress
12.1.1.6.3. Optimize the whole
12.1.1.6.4. Value Stream Mapping
12.1.1.7. Kanban
12.1.2. Time management
12.1.2.1. Pomodoro
12.1.2.2. Getting Things Done
12.1.2.3. Timeboxes
12.1.3. customer satisfaction
12.1.3.1. split testing
12.2. avoiding waste (muda)
12.2.1. Extra features
12.2.2. Heavy specs
12.2.3. Handoffs
12.2.4. Waiting
12.2.5. Multi-step analyze-dev-test-verify...
12.2.6. Re-creating knowledge
13. JDUF-just enough design up front
14. Bugs
15. Critiquing the Product
15.1. Test Harness for Legacy Code
15.1.1. test seams
15.1.2. dependency breaking
15.1.3. sprouts and strangling
16. Supportive Culture
16.1. Conflict management
16.1.1. diagnosis
16.1.1.1. dissapointment
16.1.1.2. friction
16.1.1.3. disconnect
16.1.1.4. disagreement
16.1.2. productive discussion
16.1.2.1. Consent-based decision making
16.1.2.2. Knowledge vs Information
16.1.2.3. Facilitation
16.2. respect
16.2.1. Craftsmanship Manifesto
16.2.2. Declaration of Interdependence
16.2.3. Agile Manifesto
16.2.4. growing trust
16.2.5. individuals and interactions over processes and tools
16.2.6. give teams what they need & trust them to get the job done
16.3. commitment
16.3.1. Nudging for Improvement
16.3.1.1. Jiggling (Change Agent)
16.3.2. Patrick Lencioni’s Five Dysfunctions of a team
16.3.2.1. Absence of Trust
16.3.2.2. Fear of Conflict
16.3.2.3. Lack of Commitment
16.3.2.4. Avoidance of Accountability
16.3.2.5. Inattention to Results
16.3.3. help
16.3.3.1. Knowing when you're blocked
16.3.3.2. Ask first, conclude later
16.3.3.3. Active Listening
16.3.3.4. Mentoring
16.3.3.5. Helping
16.3.4. whole team attitude
16.3.4.1. Cross-functional teams
16.3.4.2. generalizing specialists
16.3.4.3. product focus
16.3.4.4. responsibility
16.3.4.5. autonomy
16.3.5. permanent team attitude
16.3.5.1. improves productivity
16.3.5.2. enhances commitment
16.3.5.3. shared history
16.4. Space to learn
16.4.1. slack
16.4.2. accepting failure
16.4.3. sustainable pace
16.4.4. risk taking