b'\n_START_ARTICLE_\nProgramowanie ekstremalne\n_START_SECTION_\nIteracyjno\xc5\x9b\xc4\x87\n_START_PARAGRAPH_\nProgram tworzy si\xc4\x99 w iteracjach (kr\xc3\xb3tkie, przyrostowe kroki programistyczne) \xe2\x80\x93 i co wa\xc5\xbcniejsze \xe2\x80\x93 planuje tylko nast\xc4\x99pn\xc4\x85 iteracj\xc4\x99. Efektem ka\xc5\xbcdej iteracji (kilka tygodni) powinna by\xc4\x87 wersja programu spe\xc5\x82niaj\xc4\x85c\xc4\x85 za\xc5\x82o\xc5\xbcenia dla danej iteracji. Nast\xc4\x99pnie planuje si\xc4\x99 co zrobi\xc4\x87 dalej._NEWLINE_Odpowiada to zasadzie Open Source: \xe2\x80\x9erelease early, release often\xe2\x80\x9d (wczesne i cz\xc4\x99ste wydania).\n_START_SECTION_\nNie projektowa\xc4\x87 z g\xc3\xb3ry\n_START_PARAGRAPH_\nNie mo\xc5\xbcna z g\xc3\xb3ry przewidzie\xc4\x87, jaka architektura b\xc4\x99dzie najlepsza dla danego problemu. Dlatego nale\xc5\xbcy j\xc4\x85 tworzy\xc4\x87 w miar\xc4\x99 rozszerzania programu.\n_START_SECTION_\nTesty jednostkowe\n_START_PARAGRAPH_\nTesty jednostkowe pisze si\xc4\x99 zanim w og\xc3\xb3le zacznie si\xc4\x99 pisa\xc4\x87 kod \xe2\x80\x93 najlepiej na pocz\xc4\x85tku iteracji. Potem pisze si\xc4\x99 kod, kt\xc3\xb3ry potrafi je wszystkie przej\xc5\x9b\xc4\x87. Takie testy daj\xc4\x85 zapewnienie (o ile testy s\xc4\x85 dobrze napisane), \xc5\xbce to, co wa\xc5\xbcne, zostanie zaprojektowane, na to za\xc5\x9b, co nie jest wa\xc5\xbcne, programi\xc5\x9bci nie b\xc4\x99d\xc4\x85 traci\xc4\x87 czasu.\n_START_SECTION_\nCi\xc4\x85g\xc5\x82e modyfikacje architektury\n_START_PARAGRAPH_\nArchitektura nie jest czym\xc5\x9b, czego nie wolno rusza\xc4\x87. Je\xc5\x9bli modyfikacja architektury u\xc5\x82atwi przej\xc5\x9bcie danej iteracji i nie zepsuje wynik\xc3\xb3w test\xc3\xb3w uzyskanych na poprzednich, nale\xc5\xbcy j\xc4\x85 wykona\xc4\x87. Pod t\xc4\x99 zasad\xc4\x99 podlega tak\xc5\xbce usuwanie wszystkich znanych b\xc5\x82\xc4\x99d\xc3\xb3w przed rozszerzeniem funkcjonalno\xc5\x9bci.\n_START_SECTION_\nProgramowanie parami\n_START_PARAGRAPH_\nProgrami\xc5\x9bci pisz\xc4\x85 w parach: jedna osoba pracuje przy klawiaturze i jest g\xc5\x82\xc3\xb3wnym koderem, druga obserwuje pierwsz\xc4\x85, zg\xc5\x82asza poprawki, zadaje pytania wyja\xc5\x9bniaj\xc4\x85ce. Programi\xc5\x9bci programuj\xc4\x85cy w parze zamieniaj\xc4\x85 si\xc4\x99 rolami co kilkadziesi\xc4\x85t minut. Ta technika umo\xc5\xbcliwia wy\xc5\x82apanie wielu b\xc5\x82\xc4\x99d\xc3\xb3w oraz wzajemn\xc4\x85 nauk\xc4\x99. Kod, kt\xc3\xb3rym zajmuje si\xc4\x99 tylko jedna osoba, ma tendencje do stawania si\xc4\x99 ca\xc5\x82kowicie niezrozumia\xc5\x82ym dla kogokolwiek innego ni\xc5\xbc autor, wi\xc4\x99c dodatkowy programista zwi\xc4\x99ksza jako\xc5\x9b\xc4\x87 kodu._NEWLINE_Nie jest jasne, czy sumarycznie \xc5\x82\xc4\x85czna wydajno\xc5\x9b\xc4\x87 pracy przy takiej metodzie jest wy\xc5\xbcsza, taka sama, czy ni\xc5\xbcsza ni\xc5\xbc w tradycyjnym programowaniu indywidualnym.\n_START_SECTION_\nSta\xc5\x82y kontakt z klientem\n_START_PARAGRAPH_\nSpecyfikacje s\xc4\x85 prawie zawsze wieloznaczne, dziurawe i sprzeczne ze sob\xc4\x85. Tak wi\xc4\x99c nale\xc5\xbcy mie\xc4\x87 sta\xc5\x82y kontakt z tym, dla kogo to oprogramowanie jest tworzone (klient zamawiaj\xc4\x85cy program, czy te\xc5\xbc u\xc5\xbcytkownicy ko\xc5\x84cowi). Je\xc5\x9bli kontakt jest dobry, mo\xc5\xbcna si\xc4\x99 nawet oby\xc4\x87 bez specyfikacji.'