- 有计划的开发:通过结合使用优先级"故事"和技术估算,确定下一版本的功能
- 小版本:以小的增量版本经常向客户发布软件
- 隐喻:隐喻是一个简单、共享的"故事"或描述,说明系统如何工作
- 简单设计:通过保持代码简单从而保证设计简单。不断的在代码中寻找复杂点并且立刻进行移除
- 测试驱动开发:用户编写测试内容以对"故事"进行测试。程序员编写测试内容来发现代码中的任何问题。在编写代码前先编写测试内容
- 重构:这是一项简化技术,用来移除代码中的重复内容和复杂之处
- 结对编程:团队中的两个成员使用同一台计算机开发所有的代码。一个人编写代码或者驱动,另一个人同时审查代码的正确性和可理解性
- 集体代码所有权:任何人都拥有所有的代码。这就意味这每个人都可以在任何时候变更任何代码
- 持续集成:每天多次创建和集成系统,只要任何实现任务完成就要进行
- 每周 40 个小时:程序员在疲劳时无法保证最高效率。连续两周加班是绝对不允许的
- 现场客户:一名真实的客户全时工作于开发环境中,帮助定义系统、编写测试内容并回答问题
- 编码标准:程序员采用一致的编码标准证