I'm starting to add Invoicing capabilities to Soniq. While designing the schema for an invoice, I needed to consider how to model the billing details. After talking with Esther, Sam and Jamie it is clear that they all handle invoicing clients in very different ways. Sometimes and invoice can be sent directly to the student, and other times it should be sent to a parent or carer contact. After wrestling with how to allow for this flexibility, I realised two things.
- This isn't the first time I have struggled having a separation between Students and Contacts. There are a few places where there is no distinction between a student and their main contact, and other places where the distinction is gray.
- A Student and a Contact have a lot in common, they both act as a record of a Soniq user's interactions with people who are not necessarily users themselves. It has become clear that a Student is an extension of a contact rather than a completely separate entity.
I am surprised that I didn't see this from the beginning. When I look at it now, it seems obvious, but this shows that it takes time to fully understand what is being built. There are many parallel threads and possibilities at the start of a project. Sometimes it even feels like it takes on a life of it's own.