Det smartaste jag byggt är egentligen gränserna mellan systemen.
När jag tittar på hela resan från 2020 är det lätt att fastna i enskilda funktioner. Men den största utvecklingen är hur ansvaret delats upp.
- Jag låter inte språkmodellen välja musik när kod kan göra det bättre.
- Jag låter inte röstmotorn bestämma showlogik.
- Jag låter inte webben tolka intern queue.
- Jag låter inte varje timer avgöra själv om den får prata.
- Jag låter inte ett restartbart RAM-minne vara enda sanningen för viktigt state.
- Jag låter inte en publik klient känna till interna tjänsteadresser.
Det är den typen av gränser som gjort att projektet klarat alla ombyggnader. Flera installationsgenerationer har kommit och gått, men idéerna som visat sig bra har kunnat flytta med.
Jag började med frågan “hur får jag en MP3-stream att gå?”. Nu ställer jag oftare frågan “vilken modul ska äga den här sanningen?”. Det säger ganska mycket om hur långt projektet har gått.
Arkitekturen idag är resultatet av många borttagna idéer
Det är lätt att se moduldiagrammet som något jag ritade först och implementerade sedan. I verkligheten är det nästan tvärtom. Gränserna har vuxit fram där jag fått problem.
Picker finns separat för att modellbaserat musikval var dyrt och otydligt. Memory finns för att processminne inte överlever restart. Talk Scheduler finns för att timers började kollidera. Gateway finns för att publik routing blev för komplex för att ligga utspridd.
Modulnamnen är därför nästan en karta över gamla problem.