**Agile-sagtewareontwikkeling** is 'n manier vir IT-ontwikkelingsspanne om kode te ontwikkel deur in kort, iteratiewe siklusse te werk. Tydens hierdie siklusse word produkte ontwikkel wat makliker aangepas kan word, indien die vereistes van die klant sou verander. Die gevolg is dat IT produkte, soos mobiele toepassings en rekenaarsagteware, meer reaktief op gebruikerstendense geproduseer word, en vinniger op die mark geplaas kan word.

Ontstaan van Agile-sagtewareontwikkeling
----------------------------------------

Die Agile-model het ontstaan omdat sagtewareontwikkelaars 'n manier gesoek het om die uitgerekte ontwikkelingsfases wat geheers het in sagtewareontwikkelingsprojekte te verkort. Teen die einde van so 'n projek sou die uiteindelike produk dikwels nie meer gelykstaande wees aan vereistes van die klant of die mark nie omdat daardie vereistes in die tussentyd al verander het. Met die tydsverloop tussen die opstel van die vereistes en die vrystelling van die gelewerde produk, kon die sagteware dikwels nie aangepas word sonder grootskaalse inboet van tyd en onkoste nie.

In 2001 kom 'n groep van sewentien sagtewareontwikkelaars bymekaar en stel die Agile Manifes saam, wat tot vandag voorgehou word as die basisbeginsels van Agile-sagtewareontwikkeling.

### Agile Manifes

Die Agile Manifes bestaan uit vier beginsels:
*Ons ontdek voortdurend beter maniere om sagteware te ontwikkel*
deur dit self te doen en deur ander te help om dit te doen.
Daardeur het ons die volgende waardes ontdek:

* **Indiwidue en interaksies** eerder as prosesse en gereedskap
* **Werkende sagteware** eerder as omvattende dokumentasie
* **Kliëntesamewerking** eerder as kontrakonderhandeling
* **Reaksie op verandering** eerder as die volg van 'n plan

Dit wil sê, al is die items aan die regterkant ook van waarde,
heg ons meer waarde aan die items aan die linkerkant.

Die manifes het ontstaan weens die begeerte van ontwikkelaars om alternatiewe te vind vir dokumentgedrewe, swaarlywige sagtewareontwikkeling, en te beweeg na ontwikkeling waar die die vereiste van die klant as belangrikste opweeg, en waar die span kan inspeel op veranderende vereistes, sonder dat grootskaalse dokumentêre veranderinge aangebring hoef te word.

Oorsig
------

In die praktyk bestaan daar verskeie Agile-ontwikkelingsmetodes wat samewerking en dinamiese aanpasbaarheid gedurende die lewensiklus van produkontwikkeling aanmoedig.

Iteratief, inkrementeel en evolusionêr
--------------------------------------

Die meerderheid Agile sagtewareontwikkelingsmetodes doen afskeid van grootskaalse voorafbeplanning- en ontwerp en vervang dit met produkontwikkelingsiklusse wat 'n vaste, kort tyd duur. Dit staan ook bekend as ingebokste tyd.

Gedurende so 'n siklus (word ook verwys na 'n iterasie of 'n "sprint") sal 'n multi-funksionele span saamwerk aan beplanning, analise, ontwerp, kodering, en eenheidstoetsing, en akseptasietoetsing. Teen die einde van die iterasie word die produk (of deelfunksionaliteit van die produk) gedemonstreer aan belanghebbendes. Die kern reël is dat dit wat gedemonstreer word, moet konformeer aan 'n voorafbepaalde definisie van wat as "voltooid" beskou word deur die span, anders is die produk nie reg om gedemonstreer te word nie. In die praktyk word 'n produk as "voltooid" beskou wanneer die kode gereed is om in gebruik geneem te word. In sagtewareterme word dit ook "inproduksiename" genoem.

'n Tweede punt is dat die ingebokste tyd of lengte van die siklus, konstant bly om sodoende 'n ritme te handhaaf waarby die span hulle hou. Dit is in teenstelling met vorige (waterval) tegnieke waar tydslyne aangeskuif is om die produk se voltooiing te akkomodeer. 

Die voordele daaraan om roetinematig aan belanghebbendes te demonstreer, is die vermindering van risiko dat die verwagtinge van die produk se finansierders teen die einde van 'n lang projek nie behaal sal word nie omdat hulle voortdurend blootgestel was aan die vordering van die produk, en ook, die verbeterde aanpasbaarheid op veranderende behoeftes van die mark, selfs terwyl ontwikkeling plaasvind.

Indien 'n produk nie voltooi is aan die einde van 'n siklus nie, word dit in die volgende siklus voltooi, of slegs die voltooide produkte en deelprodukte word in produksie gestel, as die ingebokste projektyd verlope is.

Die maatstaf van vordering van die span, en dus vir die finansierder van so 'n projek, is die lewering van "werkende sagteware".

Effektiewe, persoonlike kommunikasie
------------------------------------

Persoonlike gesprekke word verkies bo geskrewe kommunikasie. Daar word ook gebruik gemaak van visuele middels soos 'n "muur" waarop die beplanning en voortgang van die projekspan aangetoon word. Verder is die klant altyd verteenwoordig in die span deur 'n "Produkeienaar" wat die stem van die klant is, en besluite namens die klant neem, en dit deur middel van gesprekke, soos in die staan-vergaderings, deel.

Kort siklusse van terugvoering- en aanpassing
---------------------------------------------

Tipiese metode om kommunikasie effektief te voer is deur middel van staan-vergaderings. Tydens so 'n vergadering staan die span in 'n kring en praat met mekaar. Tydens die gesprek word die daaglikse doelwitte, en blokkers kort en bondig met mekaar bespreek. Die leier probeer blokkers uit die weg te ruim sodat spanlede effektief kan werk.

Fokus op kwaliteit
------------------

Verskeie tegnieke is word gebruik om kwaliteit van die produk te verbeter tydens Agile-sagtewareontwikkeling, soos byvoorbeeld aaneenlopende integrasie, eenheidstoetsing, paar-programmering, toetsgedrewe ontwikkeling, ontwerpspatrone, domeingedrewe ontwikkeling en herfaktoriëring van kode. Hierdie tegnieke verbeter ook die vermoeë van die span om meer aanpaspaar (agile) tydens die ontwikkelingsproses te wees.

Agile in uitvoering
-------------------

Die ondertekenaars van die Agile Manifes was verteenwoordigers van ontwikkelingsstyle wat reeds verandering teweeg gebring het, weg van waterval-sagtewareontwikkeling na meer aanpasbare metodes, naamlik *Extreme Programming, SCRUM, DSDM, Adaptive Software development, Crystal, Feature Driven development en Pragmatic Programming*.

Die toepassing van Agile word dikwels met Scrum gedoen. Scrum is 'n werkswyse, of raamwerk waarvolgens spanne hulle take kan uitvoer volgens die beginsels van Agile.