Progettare per il domani o l'altro ieri?

Complice del passare degli anni, inizio a sviluppare una certa irritazione per alcune soluzioni architetturali chiaramente inutili. Scrivo quindi queste brevi righe a beneficio di qualsiasi giovane sviluppatore Java (o Python o JavaScript o....) affinché prima di "inventarsi" una nuova classe/framework/interfaccia inutile si faccia la triplice Domanda del Destino e cioé:

A cosa serve veramente quello che sto facendo? Quanto tempo mi fa risparmiare? I miei colleghi la capiranno?

Intendiamoci, di errori ne commettiamo tutti, per fortuna. Ma alcuni perseverano più di altri.

Ultimamente mi sono imbattuto in un codice che oltre a sviluppare usando un motore di regole, anziché scrivere quattro if in croce si era intestardito nel usare un linguaggio interpretato (poco importa quale fosse, vi dico solo che non era né groovy né drools ma qualcosa di ancora più oscuro).

Conclusione: il codice era infarcito di stringhe che venivano interpretate poi dal linguaggio suddetto. Stringhe che venivano aggiunte così

private List<String> buildRules() {
  List<String> rules = new LinkedList<>();
  rules.add("boolean foo = (obj1.id == 'COSTANT1');");
  rules.add("boolean bar = (obj2.id == 'COSTANT2');");
  rules.add("if (!foo && !bar) return 'YEAH';");
}

Perccato che:

  1. non veniva attuato il minimo riuso di tale codice
  2. il linguaggio suddetto si limitava a fare if e impostare stringhe (nessun cambio di paradigma)
  3. un errore di battitura in tali stringhe poteva essere identificato solo a runtime, perdendosi tutti i vantaggi di un compilatore
  4. l'autore non aveva scritto nessun commento per giustificarsi (né frasi sagaci)
La triplice domanda può anche essere declinata in modo più utilitaristico del tipo:

A cosa serve veramente quello che sto facendo? Quanta giovinezza sto buttando? Mi aiuterà a cuccare se lo racconto?