Working on vs in your Software Architecture
I'm making a startup (www.qamine.com)
I have been doing it for the past few months.
And when you're in a hurry to get stuff done, you are tempted to make some assumptions
"I just need to make this working for now.. Won't bother generalizing"
"I won't really bother thinking about how other people would run/see/understand this code"
"Should I really think about putting it to run instead of making it look fancy"
This is also popularized by quotes by famous people such as Mark Zuckerberg and Donald Knuth.
And I kind of agree with that..
..except with architectural decisions.
When I'm deciding my architecture, I think of the inevitable trade of regarding time won by not having to deal with stuff right now vs the potential for that time to be wasted in the future.
I also think that working on your software architecture (i.e. from the point view of your business) instead of working in it (i.e. making it work) can be important.
Namely because at some point the system must be up and running alone, the system should be installed somewhere and you should be able to explain and teach it to other developers.
A small example.
The web interface of Qamine was made to be DB agnostic.
It's running in production with a Postgres DB in heroku. But it isn't really coupled to that specific db.
Now.. it would have been much easier to put SQL in Strings in my code and just make it Postgres dependent.
However, I abstracted the whole database using a library for that purpose.
Even though I could not predict all the problems that may arise from being so vendor dependent, I did not want to do it since it would be hard to change in the future.
Furthermore, SQL in Strings makes me cringe :).
This added some boiler plate code in code since this generalization must be programmed.
A couple of days ago, a brilliant engineer joined Qamine.
While describing the technology, we concluded that he could not run postgres in his current computer set up.
It toke me 2 minutes to set up SQLite for his development set up.
And so.. My architecture helped me to put people to work.
Right now I would be pulling my hair out thinking that I now have to refactor all those SQL strings.
And so..
I have been working on my software architecture instead of in it.
Today it payed up.