Já bych řekl, že chybou je snaha nejdříve napsat "relativně univerzální engine".
Jako veliký zastánce
YAGNI si myslím, že bys měl klidně začít jednou hrou (treba bombermanem) a pak z toho ten engine vyextrahovat/zobecnit, ale jen ty části, které opravdu na tu druhou hru potřebuješ.
Pomůže ti to naučit se psát refaktorovatelný kód, a také se vyhneš tomu, že strávíš spoustu času psaním featury enginu, kterou ve výsledku vůbec nebudeš potřebovat (nebo ji budeš potřebovat jinak).
Samozřejmě,
DRY bys měl dodržovat také, ale z mé zkušenosti velká část programátorů zapomíná na YAGNI/KISS, protože si myslí, že čím obecnější framework, tím lepší programátor. Já si naopak myslím, že je větší umění napsat jednoduché (funkční) řešení problému, než napsat milión první framework na framework (na řešení něčeho, co sice teď nikdo nepotřebuje, ale co kdyby možná někdy mohl...).