Don't start off a project by spending 4 months writing classes, libraries, or other abstract stuff. Doing so is an insidious form of procrastination.
Write the interfaces first. Human or otherwise. Mess with them. Get trusted opinions. Some of the time you'll discover that your approach was wrong. Better to discover that sooner than later.
Optimize and abstract later. Premature optimization is the root of all evil.