Software engineers often stick close to successful designs used in our past. We have favorite tools and techniques that we reach for without deliberation, and the more specialized our knowledge, the more this tendency dominates approaches to software design. How do we know the difference between the best solution and the one that we're most comfortable with? In a word, the answer is experience.
The second system effect postulates that the second system a designer creates will tend to be over-complex for the problem it solves, but eventually experience will help the designer to distinguish between core technique and chance detail. Many online commentaries focus on the way features accumulate as systems mature. There is merit in this view, but I think the key observation is rather that acquired experience is what allows software designers to create more elegant solutions.
Different software design projects build experience in differing amounts. Imagine solving very similar problems repeatedly - each successive solution brings less and less insight, because the core techniques are quickly mastered. Moreover, narrow exposure to problems creates a way of thinking which blinds us of other possibility. I have to leave my comfort zone: for me this is to work with problems long enough to understand them, long enough to distinguish between technique and detail within that space. But not too long.
From the designer's perspective, the second system imparts the most information about the problem domain. Every system beyond that provides diminishing returns. I would pay the price of the second system over and over again.
The second system effect postulates that the second system a designer creates will tend to be over-complex for the problem it solves, but eventually experience will help the designer to distinguish between core technique and chance detail. Many online commentaries focus on the way features accumulate as systems mature. There is merit in this view, but I think the key observation is rather that acquired experience is what allows software designers to create more elegant solutions.
Different software design projects build experience in differing amounts. Imagine solving very similar problems repeatedly - each successive solution brings less and less insight, because the core techniques are quickly mastered. Moreover, narrow exposure to problems creates a way of thinking which blinds us of other possibility. I have to leave my comfort zone: for me this is to work with problems long enough to understand them, long enough to distinguish between technique and detail within that space. But not too long.
From the designer's perspective, the second system imparts the most information about the problem domain. Every system beyond that provides diminishing returns. I would pay the price of the second system over and over again.
Comments
Post a Comment