When architecting a system, it is inevitable to make certain high-level design decisions.
Some of these decisions, if they’re wrong, can lead to the re-architecturing and re-writing of the whole system some months later, so there is an incentive to keep things rather generic. On the other hand, trying to make system too generic is just another recipe to disaster (usually expressed in terms of missed deadlines and unmanageable code).
IT Hares try to describe certain not-so-obvious architectural decisions, and some considerations which should be kept in mind while making them.