You might not like this, but the short answer is, “No.” (With the caveat that this answer is directed to practitioners,
not theoreticians.)
Mature software designers evaluate situations based on business criteria (time, money and risk) in addition to technical
criteria like whether something is or is not “good OO” or “good class design.” This is a lot harder since it involves
business issues (schedule, skill of the people, finding out where the company wants to go so we know where to design
flexibility into the software, willingness to factor in the likelihood of future changes - changes that are likely
rather than merely theoretically possible, etc.) in addition to technical issues. However it results in decisions that
are a lot more likely to bring good business results.
As a developer, you have a fiduciary responsibility to your employer to invest only in ways that have a reasonable
expectation for a return on that investment. If you don’t ask the business questions in addition to the technical
questions, you will make decisions that have random and unpredictable business consequences.
Like it or not, what that means in practice is that you’re probably better off leaving terms like “good class design”
and “good OO” undefined. In fact I believe precise, pure-technical definitions of those terms can be dangerous and can
cost companies money, ultimately perhaps even costing people their jobs. That sounds bizarre, but there’s a really good
reason: if these terms are defined in precise, pure-technical terms, well-meaning developers tend to ignore business
considerations in their desire to fulfill these pure-technical definitions of “good.”
Any purely technical definition of “good,” such as “good OO” or “good design” or anything else that can be evaluated
without regard to schedule, business objectives (so we know where to invest), expected future changes, corporate culture
with respect to a willingness to invest in the future, skill levels of the team that will be doing the maintenance,
etc., is dangerous. It is dangerous because it deceives programmers into thinking they are making “right” decisions when
in reality they might be making decisions that have terrible consequences. Or those decisions might not have
terrible business consequences, but that’s the point: when you ignore business considerations while making decisions,
the business consequences will be random and somewhat unpredicatable. That’s bad.
It is a simple fact that business issues dominate technical issues, and any definition of “good” that fails to
acknowledge that fact is bad.
No comments:
Post a Comment