Application Development Part 2: Preliminary requirements
In Part 1 of this series I explained my need for better time and goal management software, and my rationale for creating that app rather than using one or more off-the-shelf products. Time flies - I need this app yesterday!
Now it's time to start sketching out a few requirements:
Enter goals
Enter tasks
Assign tasks to goals (tasks to goals is a many to many relationship)
Easily track time allocated to tasks
Pop up a reminder when the computer has been idle, asking what to do with apparently unallocated time
When switching to a new task, immediately stop tracking time on any previous task
Allow for categorization of tasks
Add tasks without allocating them to a category or a goal - a way to jot down notes and figure out what to do with them later
Pre-allocate blocks of time in a day for certain tasks/categories and have the app remind me when it's time to switch
Report on a day or week or any arbitrary block of time and see
How much time was spent per category
How much time was spent per goal
How much time was spent per task
How much of the budgeted time was used, and whether it was used for its intended purpose
Have templates for pre-allocated blocks so I don't have to enter them each time
Add appointments/events to a calendar
When appointments/events come up, have the option to defer or reschedule
Mark appointments/events as completed
Show a running tally of time used compared to time as planned
When creating a new task, look for older tasks that may be a match just in case I've already been there and have forgotten
Be able to assign values for importance and urgency (a long time ago I wrote a "four quadrant" todo list manager based on Stephen Covey's technique, and I still have a fondness for that approach)
I'm always amazed at how simple requirements grow into complex requirements. I really didn't think I was contemplating anywhere near that many features until I wrote them down. And I'm sure others will come to mind as I go along.
I still have lots of questions. I'm a little fuzzy on how I want to handle categorizing of tasks. OfficeTime uses projects and categories, neither of which is dependent on the other. That's okay, but I've found it a bit clunky as changing tasks usually involves changing projects and changing categories. I almost think I want to be more task-centric - when I set up a task I assign whatever categories I need to assign, and then I switch between tasks (somehow) with a single click.
But I'm probably ready to start putting my ideas together into something approaching the very beginning of a design.
Where to start?
There are a million different ways to arrive at a software design; what I'm describing here is a fairly simple example, and you don't have to follow my approach slavishly.
I have a fondness for entity-relationship diagrams; they not only help me visualize the relationships between groups of data, they often get me thinking about how I want to structure the code that will manipulate that data.
Here's the first cut of my ERD:
Years ago, when I got to this stage, I'd dive into the data dictionary. Or maybe I'd be in the dictionary from the very first thought about the app. Clarion devs always start with the dictionary, don't they?
Well here' s my first and most important principle for software development:
DON'T START WITH THE DICTIONARY!!!!
Yes, I'm shouting. Data dictionaries are massively useful things in Clarion development, but too often they come into the picture way too early.
But if the dictionary isn't the first step, what is?
You'll have to wait for the next installment to find out. In fact you'll have to wait a little longer, because in order to take the next step (here's your clue) there's a certain freely available library that I need to update for Clarion 9 (and which I need to bring back into the ClarionMag sphere).