CCBK supports multiple classes of citizens, create a Population ScriptableObject for each one. Different populations may be able to fill different job openings or pay different tax rates.
plebs, scholars, aristocrats, …
Housing components provide space for a specified number of a defined population. Migrations control how fast new citizens arrive or leave based on their sentiment value.
One migration script per population is needed which allows different rates of immi-/emigration per population as well as different entry points on the map.
Directly sustained by the population is the employment system.
Individual Buildings either always have full access to the employment pool or they send out an EmploymentWalker that checks if any buildings housing the needed population are nearby.
Employment is mostly used to drive building efficiency.
It is possible to define different groups of employment to specify which buildings get employees first.
essentials like water should not cease operation because ore mining is using up its employees
CCBK comes with a dialog that allows the user to change employment priorities at runtime.
The worker system is not directly liked to populations but will most likely be effected by building employment/efficiency.
Some buildings need trained workers to function effectively which creates a slightly different kind of production chain.
farms, monuments, …