Creen que ser capaz de adaptarse a los cambios de requisitos en cualquier punto de la vida del proyecto es una aproximación mejor y más realista que intentar definir todos los requisitos al comienzo del proyecto e invertir esfuerzos después en controlar los cambios en los requisitos.
Aprovechó esta oportunidad para proponer e implementar algunos cambios en las prácticas de desarrollo, basándose en su trabajo con su colaborador habitual, Ward Cunningham.
A partir de entonces, Jeffries actuó como entrenador para inculcar las prácticas como hábitos en el equipo C3.
Beck editó una serie de libros sobre XP, comenzando con su propio Extreme Programming Explained (1999, ISBN 0-201-61641-6), difundiendo sus ideas a una audiencia mucho más amplia.
Los valores originales de la programación extrema son: simplicidad, comunicación, retroalimentación (feedback) y coraje.
Un quinto valor, respeto, fue añadido en la segunda edición de Extreme Programming Explained.
Los cinco valores se detallan a continuación: La simplicidad es la base de la programación extrema.
Para ello se deben elegir adecuadamente los nombres de las variables, métodos y clases.
Aplicando la simplicidad junto con la autoría colectiva del código y la programación por parejas se asegura que cuanto más grande se haga el proyecto, todo el equipo conocerá más y mejor el sistema completo.
El cliente decide qué características tienen prioridad y siempre debe estar disponible para solucionar dudas.
Ejecutar las pruebas unitarias frecuentemente permite descubrir fallos debidos a cambios recientes en el código.
La valentía le permite a los desarrolladores que se sientan cómodos con reconstruir su código cuando sea necesario.
Esto significa revisar el sistema existente y modificarlo si con ello los cambios futuros se implementarán más fácilmente.
Los miembros respetan su trabajo porque siempre están luchando por la alta calidad en el producto y buscando el diseño óptimo o más eficiente para la solución a través de la refactorización del código.
Cuanto más simple es el sistema, menos tendrá que comunicar sobre este, lo que lleva a una comunicación más completa, especialmente si se puede reducir el equipo de programadores.
Interpreta el pedido del cliente y ayuda al equipo de desarrollo a escribir las pruebas funcionales.