Overall Design
before you start coding, develop an overall design for your shell
this can be a sketch of building blocks, some pseudocode,
or a more formal design document such as a UML diagram or specification
the components identified above are probably a good starting point