Vaihdettavien komponenttien olemassaolo edellyttää, että ohjelma / tehtävä on jaettu niin hyvin erilaisiin osiin, että jollekin näistä osista voi olla useampia toteutuksia. Jos loput ohjelmasta toimii näiden vaihtoehtoisten komponenttien kanssa, se on yleensä osoitus siitä, että osiin jako on tehty oikeaoppisesti ja selkeästi, ja että eri toiminteiden vastuut on delegoitu softassa järkevästi.
Esimerkkitapauksena haluaisin mainita PostgreSQL:n ja MySQL:n. Postgres on designattu paremmin suunnilleen jokaisessa mahdollisessa kuviteltavassa mielessä, paitsi sisäiseltä rakenteeltaan. Postgres käyttää hyvin yleisiä mekanismeja ja on laajennettavissa miltei joka suuntaan. Se on suunniteltu alusta pitäen suuret mielessä ja alkaa vasta nyt toteuttaa suuria lupauksiaan, postgresiä ei ole yritettykään kehittää iteratiivisesti.
MySQL on pienempi ja puutteellisempi. Se on kehitetty mitä ilmeisimmin vähän kerrallaan, sitä mukaa kun lisää toiminnallisuutta on tarvittu, ja kaikki osaset testattu aina erikseen tarkasti. Se ei ole postgresin tapaan musta laatikko, kun jokin ei toimi. Tietokantojen, taulujen ja indeksien mappaus tiedostojärjestelmään on hyvin yksinkertainen ja taulujen formaatti on standardimpi kuin MySQL:n käyttämä kieli (!). Lisäksi MySQL ei käytä mitään merkillisiä omia cachetuksia, vaan tiedostojärjestelmän omaa cachea. Seuraus: taulu, jota ei kirjoiteta, on luettavissa suoraan tiedostojärjestelmästä backupia varten. Ja journalingiin voi käyttää filesystem journalia.
Ja ennen kaikkea: MySQL tukee kiljoonaa taulutyyppiä ja osaa käyttää niitä sekaisin keskenään. Ja tämä on merkki siitä, että taulunkäsittelykoodi on ihan tosissaan hyvin eriytetty kyselyntulkintakoodista.