Heterogeniczność to inaczej niejednorodność lub zróżnicowanie. Odnosząc się do programowania możemy powiedzieć, że nasza aplikacja jest heterogeniczna jeśli jej moduły różnią się od siebie np. są napisane w innym języku, wykorzystują inny framework, są napisane w innym stylu architektonicznym. Heterogeniczność nie odnosi się tylko do architektury, ale również do takich aspektów jak nazewnictwo, formatowanie kodu, konwencje itp. Dążenie do 100% heterogeniczności nie zawsze powinno być naszym celem i zawsze należy do tego podejść pragmatycznie zachowując równowagę pomiędzy heterogenicznością, a jej przeciwieństwem – homogenicznością
Zalety heterogeniczności
Największą zaletą heterogeniczności systemu jest to, że możemy dostosować rozwiązanie pod konkretny problem. Różne problemy wymagają różnych rozwiązań. Dzięki temu, że nie dążymy do tego aby nasz system był homogeniczny możemy dobrać odpowiednią architekturę, język programowania lub framework do rozwiązania naszego problemu. Mamy wtedy pewność, że problem jest rozwiązany we właściwy i najlepszy z możliwych sposobów.
Wady heterogeniczności
Heterogeniczność ma również wiele wad. Niewątpliwie największa wadą jest to, że przez mnogość technologii przerzucanie członków zespołu pomiędzy modułami jest bardzo ciężkie, a czasami niemożliwe. Również szukając nowych członków do naszego zespołu napotykamy problem, ponieważ wymagamy aby posiadali oni szeroki wachlarz umiejętności potrzebnych do rozwijania oraz utrzymywania naszej aplikacji. Jeśli decydujemy się na architekturę rozproszoną to przez heterogeniczność systemu znacząco ograniczamy sobie możliwość ponownego wykorzystania komponentów takich jak procesy CI/CD, czy konfiguracje środowisk.
Co więcej jeśli nie staramy się utrzymać naszego systemu w stanie homogeniczności to możemy wpaść w pułapkę doboru technologii pod wpływem emocji i trendu. Inaczej mówiąc wybieramy poszczególne technologie lub style architektoniczne tylko dlatego, że są modne lub chcemy się nimi pobawić. Taki stan negatywnie wpływa na utrzymanie oraz rozwój naszej aplikacji. Należy więc pamiętać, aby znaleźć punkt równowagi pomiędzy heterogenicznością, a homogenicznością. Dzięki temu będziemy mogli dobierać odpowiednie rozwiązanie do konkretnego problemu, a jednocześnie nie sprawimy, że nasza aplikacja będzie cięższa w utrzymaniu i rozwoju.