Midnight Hour is an application to look after parts of my business. It will keep a list of my clients and contacts, invoices, work done, project design, and a bug tracker. The following is my first draft of the UML (Unified Modelling Language) Package diagram for the application.

First off, UML purists may not like my diagrams, but I know what they mean, and I use them to assist me. But this one is pretty obvious.
There are a few things to notice. I have separated each of the subsystems and I will build these separately. This makes it easier to build, because, while there will be a lot of interaction between each of the subsystems, they are each, more or less, complete systems in themselves.
I think this approach also makes for better encapsulation. I need to look after the interfaces between each subsystem, but hopefully I can keep the implementation in each system fairly well hidden.
The database will be built incrementally, and that means that the database mapper will need to be updated whenever there is a database change, but that is no big deal, it takes less than a minute to do. And by only changing the database and the mapper to what I need at the time I avoid building stuff I don’t want – the YAGNI (You ain’t gunna need it!) principle.
I have put the printing as a subsystem, but at this stage I am not sure about that. Certainly I will add some printing classes that will service each subsystem. These are standard printing routines that I use in many projects. But whether I need some printing stuff in each of the other main subsystems or not, I’m not sure yet. I think I might, but that is something to look at down the track.
The final decision I had to make at this stage relates to the Contacts subsystem. Should I have a Clients system, for existing clients, and a separate Contacts system? Or should I do some sub-classing – a client is a contact with the additional property of having work done, and some extra methods? At this stage I am thinking that there is no difference between a client and a contact. When I have finished some work for a client they are just a contact – I still have to get more work from them for them to be termed a current client. Or so my thinking is at this stage. But I will see when I analyse the contacts system more fully.