Bottom-up ontwerp is een aanpak om software te bouwen waarbij je begint met de kleinste werkende onderdelen, die degelijk maakt, en ze daarna samenvoegt tot grotere componenten tot het hele systeem staat. In plaats van eerst het geheel te schetsen en later de details in te vullen, stel je het systeem samen uit stukken waarvan je al hebt bewezen dat ze werken.
Denk aan bouwen met Lego. Je snijdt geen afgewerkt kasteel uit één blok plastic. Je klikt kleine steentjes samen tot een muur, een toren en een poort, en die betrouwbare deelstukken worden het kasteel. De truc is dat elk steentje op zichzelf bruikbaar is en elders herbruikt kan worden. Dit staat tegenover top-down design, dat begint met het hele kasteel in gedachten en naar beneden werkt, en het leunt sterk op goede abstractie zodat elk onderdeel zijn binnenwerk verbergt achter een net aansluitpunt.
Bottom-up levert vaak vroeg werkende code op, wat handig is voor een proof of concept. Het risico is dat de delen zonder leidend beeld uit elkaar gaan lopen en niet netjes aansluiten, dus de meeste teams combineren het met een licht algemeen plan.
Deze aanpak komt het best tot zijn recht als je de uiteindelijke vorm echt nog niet kent. Een startup die een nieuw idee test, heeft baat bij het bouwen van één degelijke functie, die voor gebruikers zetten en van daaruit uitgroeien naar wat werkt, in plaats van zich vast te leggen op een groots ontwerp dat de markt misschien afwijst. Hetzelfde geldt als een team een onbekende technologie verkent en eerst de lastige delen wil bewijzen. De herbruikbare bouwstenen zijn een bonus die zich blijft terugbetalen. Een goed gemaakte betaalmodule of notificatiecomponent die je één keer bouwt, kan de volgende drie projecten dienen. De vraag is dus zelden bottom-up tegenover top-down in het abstracte. Het is welke past bij hoeveel je al weet over waar je naartoe gaat.
Bij TopDevs mengen we bottom-up en top-down afhankelijk van hoe helder het einddoel is, zodat klanten snel werkende stukken zien zonder het geheel uit het oog te verliezen.