Trabalhando em vs em sua arquitetura de software

Estou criando uma startup ( www.qamine.com )
que tenho feito nos últimos meses.

E quando você está com pressa para fazer as coisas, fica tentado a fazer algumas suposições

“Eu só preciso fazer isso funcionar por agora .. Não vou me preocupar em generalizar”
“Eu realmente não vou me incomodar em pensar em como outras pessoas executariam / veriam / entenderiam este código”
“Devo realmente pensar em colocá-lo para ser executado em vez disso de fazer parecer chique “

Isso também é popularizado por citações de pessoas famosas, como Mark Zuckerberg e Donald Knuth.
E eu meio que concordo com isso ..

.. exceto com decisões de arquitetura.

Quando estou decidindo minha arquitetura, penso na troca inevitável de considerar o tempo ganho por não ter que lidar com as coisas agora versus o potencial para que esse tempo seja desperdiçado no futuro.

Também acho que trabalhar em sua arquitetura de software (ou seja, do ponto de vista de seu negócio) em vez de trabalhar nela (ou seja, fazer funcionar) pode ser importante.
Ou seja, porque em algum ponto o sistema deve estar instalado e funcionando sozinho, o sistema deve ser instalado em algum lugar e você deve ser capaz de explicar e ensinar a outros desenvolvedores.

Um pequeno exemplo.
A interface da web do Qamine foi feita para ser agnóstica no banco de dados.
Está sendo executado em produção com um banco de dados Postgres no heroku. Mas não está realmente acoplado a esse banco de dados específico.

Agora … teria sido muito mais fácil colocar SQL em Strings no meu código e apenas torná-lo dependente do Postgres.
No entanto, abstraiai todo o banco de dados usando uma biblioteca para esse fim.
Mesmo que eu não pudesse prever todos os problemas que podem surgir por ser tão dependente do fornecedor, eu não queria fazer isso, pois seria difícil mudar no futuro.
Além disso, SQL em Strings me faz estremecer :).

Isso adicionou algum código padrão no código, uma vez que essa generalização deve ser programada.

Alguns dias atrás, um engenheiro brilhante se juntou a Qamine.
Ao descrever a tecnologia, concluímos que ele não poderia executar o postgres em sua configuração de computador atual.

Demorei 2 minutos para configurar o SQLite para sua configuração de desenvolvimento.

E então .. Minha arquitetura me ajudou a colocar as pessoas para trabalhar.
No momento, eu estaria puxando meu cabelo pensando que agora tenho que refatorar todas aquelas strings SQL.

E entao..

Tenho trabalhado em minha arquitetura de software, em vez de nela.
Hoje pagou.