Top 10 elements of good software design
Mr Ed of Hacknot comes up trumps again with this succinct list of good design pointers.
For example, how often is this point forgotten or ignored? (not that I'm referring to anyone in particular ;) (emphasis mine):
10. [An element of good design] Considers the Sophistication of the Team that Will Implement It
Does it seem odd to consider the builder when deciding how to build? We would not challenge the notion that a developers' skill and experience has a profound effect on their work products, so why would we fail to consider their experience with the particular technologies and concepts our design exploits? Given fixed implementation resources, a good design doesn’t place unfamiliar or unproven technologies in critical roles, where they become a likely point of failure.
[Update] As Steven has just pointed out, this is not always a hard and fast rule. There are situations where the risk associated with using a new technology is offset by the potential increase in functionality that the technology provides. In other words, each situation should be analysed, thus giving the most desirable outcome.
Full essay: http://www.hacknot.info/hacknot/action/showEntry?eid=54