In modelling real business practices I noticed a very similar set of activities. Someone filled out a section on a form and then passed the form onto someone else, they added more info to another section and passed it on, until it got to where it needed to go and it was filed. Information might be recorded on another form, a schedule might be updated, other information tallied up.
This got me thinking that instead of modelling just the act of the business that I could take a step back and model the act of modelling a business.
What I am thinking we need to do is to create a method of creating forms, creating the work flow around those forms, create points at which the form data is written to other forms and applications, and report on the information in forms. Version the entire process.
For instance. Someone needs to schedule vacation time.
They log into the system which identifies them.
They select the form for vacation time.
The form limits the dates that can be entered based on things like, only x number of people in the team or over the whole company can be on vacation at the same time.
They enter the time frame they would like vacation for.
They click submit.
The form is then added to the work queue of their supervisor.
The person that enters a form can track the form progress at any time.
The supervisor will have an email like interface for these forms.
They can read a request and either approve or deny the request. If they deny the request they must also give a reason.
If they deny the request it goes back into the work queue of the person who submitted the request.
If approved the form will have this fact added and move onto human resources inbox.
This will also deduct the time from the tentative number of days they will have at the time of the vacation.
When a new person shows up, the personnel department puts them into the system.
Once the person is in the system they are assigned a manager.
The person also enters their own password that is check to ensure it is strong enough and not a common dictionary word.
The manager sits down and assigns what department they work in and they put in the persons work hours.
Once their role is assigned they will be granted network permissions and assigned a workstation and network permissions will also be assigned to allow them to access various servers. The person can visit a single page to review the services available to them on the corporate network.
Additional permissions can be assigned to a person on an as needed basis. If the basic group permissions are changed this will update everyone who is a member of that group, removing or adding the new permissions.
Other resources are meeting rooms and projectors.
These are entered into the database one at a time.
Other is a default and requires the name and address to be enterred for that meeting.
Projects are entered into the database and people are assigned to the project in certain roles.
You can also copy the structure and people assigned to a project to a new project that is blank.
Another thing you can do is branch a project from another project duplicating everything.
A bug report is a form that is filled out that.
Vacation request will be filled out by the individual.
Vacation request will be approved by the manager.
Sick leave is similar to the vacation request.
New forms can be created at any time and a work flow set up for them. These forms can be assigned at any level of the heirarchy.
When you want to schedule a meeting you select the room, the equipment you need and the people you want to attend.
You can select a specific time and if higher ranked than the person who approved a previous meeting you will be given the option to reschedule other meetings.
Or you can select the first available time from a specific date and time.
If you want you can mark certain people as optional and if they conflict with other meetings then they will just be dropped from your meeting.
Before the meeting you must attach an agenda for the meeting.
You can attach documents to the meeting as well and are encouraged to attach at least a typed copy of the meeting notes.
Everything must be attached to things. These things accumulate time and the time is accumulated into the thing.
A task is something that you must take action on.
Tasks can be assigned to people. The task might be to correct a bug and the bug report attached to the
The action may be as simple as assigning a bug to someone else.
You task list is sorted highest priority first, in order that the tasks were assigned to you.
So, you create forms.
Then you create workflow around forms.
You can set it up so that when someone is on vacation that their tasks goto another person while they are away.
Workflow is by role, not by person, so that you can put different people into and out of a role at any one time.
The front end should be able to browse the tree by any start point, so you could look at a person and see their tasks and what projects they are assigned to.
A generic task based workflow for forms.
Define a flow of the forms through roles.
Assign people to roles.
Fill out forms.
Test work flow.