I want to apologize for my extended absence from Airtable Community; let me assure you it was neither intentional nor enjoyed on my part.¹ I hope what I bring as a peace offering helps make up for all the unanswered questions and messages.
Here is version 1.0 of my scheduling/calendaring framework for Airtable. It offers a template-driven solution to scheduling recurring processes, allowing process types to be defined as a set of interrelated events. Later, instances of these processes are created in a separate table, in turn spawning and scheduling component tasks and subtasks.
The framework also allows for differentiation between tasks that can fall on any day of the week and those that must be scheduled only on workdays; workday-only tasks can be specified as falling on the nearest preceding or nearest following workday, as desired. Stand-alone templates — that is, a single event with no subtask — can also be created, allowing certain classes of events to be defined as workday-only.²
In addition, the framework supports the scheduling of ad hoc events — events for which no process template is defined. This allows for one-off tasks — doctor’s appointments, jury duty, and the like — to be incorporated within the same calendar as templated tasks.
Once scheduled events are created, they can be adjusted from an Airtable Calendar view. Workday-only events are shifted appropriately in real-time, and even Multi-Day events with a calculated end date can be moved via drag-and-drop. Schedules can be adjusted further through the use of overrides: Every variable of both templated and ad hoc events can be overridden if needs be. Once a schedule is finalized, a separate Calendar view displays the final schedule, with ‘working’ dates — for instance, unshifted workday-only events, or Day 2 and beyond of Multi-Day tasks — suppressed. This finalized calendar can be used to generate iCalendar-compliant exports for integration with other scheduling and time-management packages.
Color- and emoji-coding is used to flag records for errors and alerts. (‘Alerts’ are conditions that indicate an incomplete record, which may be an erroneous condition or may merely indicate a record in the process of being created.) Separate ‘Errors and Alerts’ views and Page Designer Blocks provide full-text explanation for any records throwing an alarm.
Finally, for users on Pro and Enterprise plans, Airtable Organization Chart Blocks are defined that provide graphical representation of template and task hierarchies.
There is a 22-page Users Guide included as an attachment in the
[Documentation] table of the demonstration base that explains in detail how to set up and use the framework.
The framework has been designed and optimized for Zapier-based automation; however, it can also be used without Zapier, relying instead on a minimum of manual processes.
The following animated GIF — so, unfortunately, unnarrated — gives a quick overview of views and processes involved. It shows, in sequence
I’ve also uploaded a few screenshots of various views and Blocks, including a few highlighting features not demonstrated in the GIF.
The demonstration base containing the routines and Users Guide can be found here.
As the base, as published, uses emojicons for the name of some calculated fields, I’ve provided an emoji-less alternative version here, for users with browsers or OSes that do not support emojis.
Both links are read-only shares with copying enabled. Duplicate the base into your own workspace for full access to field configurations and formulas.
As always, questions and comments are greatly welcomed (and, I hope, will be answered much more promptly in the future than they have been these past few months). You can reach me here by PM or via email to firstname.lastname@example.org .
Even at the best of times, I have teeth of a sort rarely seen outside of a museum of natural history, thanks to a combination of genetics and inadvertent or ill-conceived exposure to enamel-damaging prescription medications as an adult, a child, and a fetus. Prior to my recent move, I managed to catch a falling box with my face, which evidently cracked several of my balsa-wood teeth. They remained largely asymptomatic until exposed to the change in air pressure during a cross-country flight.
After a couple of weeks of headaches and insomnia (which I initially wrote off as culture shock-induced PTSD), I awoke one morning to find the [non-laughing] face of Hotei staring back at me from the bathroom mirror. Six weeks of antibiotics and pain meds and three visits to the oral surgeon later, I’m finally back on a [largely] solid food diet and pain-free for most of most days. I still have two (or maybe three) procedures to go, but over the past week or so I’ve come back up to, say, 75% efficiency. Assuming this continues — knock wood — I should be online daily once again before long… and dealing with the backlog of emails and messages.
For instance, in the demonstration base provided, there is a template called ‘Employee Birthday’ configured to fall on the workday on or before the specified date. This allows a block of employee birthdays to be copy-and-pasted into the scheduling table, with those that happen to fall on a weekend or holiday that year shifted automatically.
(And many thanks for all the kind words in this, which I just discovered yesterday — I was floored!)
I figure I had about a week’s worth of solid work-worthy time during the 6+ weeks it took to develop the scheduling framework. (For some reason, analgesics give me insomnia, and I can attest that with one’s bloodstream bubbling with Tramadol and Norco and 10 hours’ of sleep during the previous 10 days is not optimal for writing code.) Fortunately, I seem to be hitting on all cylinders again, even when I don’t want it to — yesterday I roughed out a meds-tracking base in 45 minutes… while neck-deep in the Atlantic — so maybe I’ll have a few other things to publish soon.
Hi!! I’m new to the community and don’t really know who you are, but reading of your recent medical experience made me feel pain on your behalf, hope it’s all fully resolved for you.
This Scheduling frame work looks awesome, 1 question though, based you your gifs- if I were to start work on the June and July newsletters before the May one is finished, how does that affect the scheduling of the tasks as they would be from the same template- or what if I’m working on 2 or 3 conferences at once with the same task lists??
I’m sorry to have taken so long to respond, but somehow this slipped past me when you posted.
If you haven’t experimented with the framework by now and found out (and for anyone reading over your shoulder here on the forum), there’s no conflict between instances of processes that use the same template – at least, there isn’t as long as you make sure each instance has a unique name, so I recommend calling your instances “June 2019 newsletter” and “July 2019 newsletter” so that next year you don’t suddenly receive a lot of anomalous results.
Essentially, when you create a new process instance, you are generating a new collection of named tasks based on the template. The framework concatenates instance and task names to give each task a unique name. That way, the ‘edit copy’ task for May is a different record than that for June.
The only potential place where you might find conflict is if you change a process definition with an instance of that process already active. I’m pretty sure if you add a task to a process template, any existing process instances based on that template are flagged to show a missing task; that seemed logical, especially during template definition, where you don’t want to have to start over every time to refine your process flow. I think I decided to have tasks retain the configuration specified in the template at the time of their creation – that is, for such things as duration, dependencies, and the like – with any modifications to templates reflected in subsequent instances. That way you don’t run the risk of having deadlines shift underneath works in progress should it be decided, for instance, to increase lead times. The only problem is I can’t think of how I could possibly have made that work :winking_face: , so I’m going to have to take a look at the code and get back to you.