"A system that is hard to understand is hard to change. The effect of a change is hard to forsee." #readingToday
A system that is hard to understand is hard to change. The effect of a change is hard to forsee . A developer who wanders outside his or her own area of familiarity gets lost. (This is particularly true when bringing new people into a team, but even an established member of the team will struggle unless code is very expressive and organized.) This forces people to specialize. When developers confine their work to specific modules, it further reduces knowledge transfer. With the compartmentalization of work, smooth integration of the system suffers, and flexibility in assigning work is lost. Duplication crops up when a developer does not realize that a behavior already exists elsewhere, and so the system becomes even more complex.
Domain-Driven Design, Eric Evans