You cannot hold the details of a large system in your head, even if you wrote every line of code. It’s too big. The successful way to deal with this is to partition the system into components that communicate with each other. Then you can consider the component architecture and the details of a component individually.
Also, I think that successful developers keep extensive notes and comment their code. I have a fanatic devotion to Atlassian’s Confluence Wiki, but there are other ways to do this.
By keeping extensive notes you can return months later to refresh your memory about your thinking at them time. And to discover that you never keep enough notes. But notes are better than no notes.
nderground is a social network built for privacy. nderground was built using the Grails framework which supports both the Model-View-Controller design and service components that provide the server side support for code that does not directly interact with web components.