Não vou abordar o problema de design - apenas a questão de fazer as coisas "corretamente" em uma API não pública.
it's just for me, so it's kind of like I'm protecting my own code from myself
Esse é exatamente o ponto. Talvez haja programadores por aí que lembrem as nuances de todas as classes e métodos que já escreveram e nunca os chamem erroneamente com o contrato errado. Eu não sou um deles. Muitas vezes esqueço como o código que escrevi deve funcionar poucas horas depois de escrevê-lo. Depois que você achar que acertou uma vez, sua mente tenderá a mudar as marchas para o problema em que você está trabalhando agora .
Você tem ferramentas para combater isso. Essas ferramentas incluem convenções (sem nenhuma ordem específica), testes de unidade e outros testes automatizados, verificação de pré-condição e documentação. Eu mesmo achei os testes de unidade inestimáveis porque eles forçaram você a pensar em como seu contrato será usado e fornecer documentação mais tarde sobre como a interface foi projetada.