I've found that the successful design of large, complicated systems requires extensive use of intuition and abstraction, which can only be gained through lots of experience. (Continually reflecting on how new knowledge impacts on on relates to your existing knowledge is a good way to embed it at an instinctive level.)
Unfortunately, not everyone seems to be equal when it comes to the ability to use intuition and abstraction, or even the motivation to think about the work they do. This tends to lead to people who can only write code if they're given a detailed specification. (Hopefully they've got analytical smarts, because otherwise even that may not be enough for them to contribute at a high level.)
Unfortunately, not everyone seems to be equal when it comes to the ability to use intuition and abstraction, or even the motivation to think about the work they do. This tends to lead to people who can only write code if they're given a detailed specification. (Hopefully they've got analytical smarts, because otherwise even that may not be enough for them to contribute at a high level.)