Tizli Blog
What is delegation?
Assigning responsibilities or resources to another agent, while retaining accountability for the outcomes. An agent, in this case, is someone or something capable of resolving a situation to a known state or providing a necessary resource by request.
What are the best ways to handle delegation?
The first way is using a personal relationship approach to delegating a task or responsibility. This is what most people think of when you say "delegate that task". The second way is to use a technical approach to mitigate risk and track progress until resolved. The third way is no delegation, do it yourself... the hardest way. Each of these has pros and cons.
The personal approach.
This comes into play when the task being delegated has significant consequences. You are trusting this person or agent to affect a good outcome or to return the assignment in a timely manner, hopefully with an explanation. Finding the right agents to trust isn't easy for everyone but some people are good at it. If you're not very good at it you should hire someone to do it for you. Unfortunately as you may realize, it's a chicken <==> egg problem.
The technical approach.
When you don't have a trusted person available or can't find one with the needed skills or resources you can lower your risk by using a contract of some sort, often adding a stake of money or other assets as collateral security. Contracts which started as a handshake and a peer pressure social obligation, have evolved over time into the current form as digital software that tracks assignment, ensures criteria are met for assignment (or attempts to) and tracks resolution of the assigned task.
DIY
yeah, it's just DIY.
Tools of the trade.
Standard contracts are still pretty ubiquitous. Written agreements or digitally signed agreements are used in 90% of cases for consequential delegation. The main contract is a service contract or a retainer, though they are often so short term that we just call them invoices and receipts. An employment contract is probably the next most popular whether it's a W2 or a 1099. These of course are a formal delegation of an entire role in an organization.
Automation
The next kind of delegation that has become fairly common is automation via software. This is when a contract is signed for service by a machine of some kind, typically with some service level agreement in place that is backed by a support agreement, in the case the service does not meet expectations. Many of these new contracts have no upfront stake but include a term of service where the provider off-takes some product they value; content they use to attract more users or attention they sell to companies looking for that attention via advertising. There are also some new methods such as blockchain programmable "smart" contracts e.g. Ethereum, Cardano, Solana, etc but these are as yet unproven, unfamiliar or simply unavailable to most people. Other new tools such as AI assistants are on the horizon but not yet ready for general use.
Delegation as a service
I know these don't sound like what we think of as delegation but they are exactly that. What is required for such delegation is a unique identifier to represent the assigner, one to represent the assignee, an agreement as to the terms of resolution and a token to represent the status of the agreement, as defined in the agreement, a master service agreement such as a terms of service agreement. Often the service being delegated is something like "publish and maintain meta data about content I create on your platform" though of course it can also be "provide me access to your software features for a monthly fee" or even "give me searchable access to your vast catalog of music".
Wrap up
If you can delegate without the technical mitigation of contracts and tooling, you are either incredibly lucky or incredibly wealthy. This is where family and friendship along with a great reputation and attitude can come into play, adding to your luck or wealth. On the other hand, knowing how to use contracts and tools to mitigate risk can improve your outcomes even if you have a trusted delegate who handles these kinds of things for you. You know your needs and preferences better than anyone else so having a hand in many tasks will be more fulfilling than completely delegating them.
So delegation covers a very large domain of activities, personal and professional, mass market and individually provisioned. There are a lot of tools available to help with this process but many are very niche or the overhead is too high. They also don't integrate into our daily lives and often require learning a new process. We are always looking for new ways to delegate though, so it's certain we will continue to get new tools in this area of life. Hopefully some of these new tools, like smart contracts and AI assistants, will be closer to a one-size-fits-all solution rather than forcing us to manage yet another tool.
Hope springs eternal.
Recurring events and task management
When you add an event to a calendar and customize its schedule to be repeating, you’ve created an RRule or recurrence rule. I know it’s called this because 99/100 scheduling apps use the iCal RRule format specified in IETF RFC 5545.
GPT tells me
GPT tells me the RRule format follows a specific syntax to define the recurrence pattern of events. It typically consists of several components, including:
- FREQ (Frequency): This component specifies the frequency of the recurring event, such as daily, weekly, monthly, or yearly.
- INTERVAL: Specifies the interval at which the event repeats. For example, if set to 2, the event occurs every two weeks.
- COUNT: Specifies the total number of occurrences of the recurring event.
- UNTIL: Specifies the end date or time for the recurring event. It indicates when the recurrence pattern should stop.
- BYDAY: Used to specify the days of the week for weekly recurring events. For example, “BYDAY=MO,WE,FR” means the event occurs on Mondays, Wednesdays, and Fridays.
- BYMONTHDAY: Used to specify specific days of the month for monthly recurring events.
- BYMONTH: Used to specify specific months for yearly recurring events.
- BYSETPOS: Used in combination with other components to specify the nth occurrence within the recurrence pattern. For example, “BYDAY=2MO” means the second Monday of the month.
The RRule format
The RRule format allows for complex and flexible recurrence patterns. Often we don’t think about this for mundane tasks or we just add a reminder for it in our calendar and add the rule there because it’s easier to think about visually. Even then we’re not adding any intention to our routines. There’s no opportunities included for reflecting on them. It’s just the same basic skills we learned as kids, teens or possibly adults for things like personal finance routines.
For instance
For instance, laundry and clothing care. Unless you’re a fashion aficionado or an obsessive professional, you probably haven’t spent that much time thinking about your laundry routines. I know we all run across some TikTok videos about folding clothes or how to get a stain out. We don’t know what we don’t know but leaving this stuff to chance isn’t the best plan.
There are books and articles and videos about anything you can think of. Books are often organized but they’re hard to consume. Articles are hit or miss and require bookmarking or something. Videos, same as articles TBH plus it’s harder to scan them for quality. You can try ratings or comments for filtering out the worst content.
The challenge here is that we don’t want to spend a lot of time on routines. They’re not very exciting, typically, so the idea of leveling up our skill level at these mundane tasks never makes our priority list. If we do think about it, we run into a learning curve that might not be as shallow as we have time for.
Skill Trees
Today I write about skill trees.
Most people who’ve heard a term like this, skill tree, tech tree, evolutionary tree think of it as a technical term or gamer stuff or maybe academic culture. They would be correct about all three.
These are all examples of data organized as trees in an evolutionary way, where choices made at one level impact the progression at subsequent levels. This kind of organization is reflective of a learning context. People involved with evolutionary trees are learning things all the time to advance their knowledge and understanding of various subjects.
I've been thinking
I’ve been thinking about how best to apply this to my own life and for my family to foster that learning context. Khan Academy is a great skill tree based educational site for math and stem subjects. Courseware and Udemy have something that’s at least superficially like a skill tree. Courses are often grouped and tagged at difficulty levels so you can create a curriculum based on level progression through skills or knowledge.
What I don’t like is the management aspect of skill trees. I never liked it in games and I don’t like it in life. Some people love this stuff. They make spreadsheets for everything or log it all in Notes or Notion or similar apps. I’m currently using a mix of a note taking app and a task management app. Calendar events stay there because reminders and conflicts and repeating events.
It's a lot
It’s a lot to manage if you want to track your progress or just keep working through a skill one lesson or activity at a time. If you’re not busy it’s not too bad, just use one app or site per day and use their built in tools. If you are busy there are tools out there to help but I’m not aware of anything really addressing this way of thinking.
So skill trees are good but hard to manage with all of life’s ups and downs. The worst is that when you need it the most you’re the least likely to be using it. The second worst is that you need the info in your sheet or app or whatever before it’s useful. It’s often not useful info when you first enter it. It only becomes useful as you get busy with other pressing matters. When you can see easy wins and ways to use small windows of time productively, you’re more likely to make the effort. When just finding out if you have time to do anything takes up your time and focus…
That’s enough about skill trees.
Keyboard shortcuts
We're ramping up our accessibility features and enhancing the user experience by adding keyboard shortcuts, beginning with the simple yet crucial 'Escape' key function to close modals. More keyboard shortcuts are in the pipeline, such as ones for creating a new task, opening settings, navigating through the task list, and opening selected tasks. This feature doesn't only boost accessibility but is also tailored for those desktop users who prefer keeping their fingers on the keyboard, sparing the use of mouse or trackpad.
In parallel to these user interface enhancements, we're also developing a Command Line Interface (CLI) tool for our API. This tool will include a series of keyboard shortcuts to help users create, edit, search, and organize tasks, task lists, templates, and more. Specifically targeted towards terminal users, the CLI tool will offer a speedy and efficient way to manage tasks. Not only does this tool provide practical benefits, it also showcases the versatility of our API. Personally, it's an exciting project as it's the first time I'm delving into the creation of a comprehensive CLI tool.
Svelte Derived Stores
Harnessing the capabilities of Svelte derived stores has proved to be a powerful strategy for grouping and filtering tasks. We upload all tasks and utilize a derived store to assemble them into groups, incorporate placeholders, and arrange them accordingly. A separate derived store is employed to filter the items according to the search terms, all before the grouping process takes place. This streamlined operation happens within the store itself, and the UI effortlessly adapts to these changes. For optimized performance and rapid loading, all task items are saved in local storage.
Some filtering still takes place within the database, but we're considering phasing it out. Naturally, security and permission filtering will remain at the database level. Presently, we retrieve all items for a user based on permissions and status. The search function is client-side, operating via a derived store. We are contemplating moving status filtering to the client-side as well. The remaining database-level filtering that seems viable might be a date range covering the last and next 12 months. To access items from more than 12 months ago, an archive view could be introduced. The exact future range is undecided, as the number of future-scheduled items is uncertain. Therefore, the approach might focus on limiting the past items delivered to the client for standard planning.
Even a 12-month limit on past items could present performance challenges if the volume of items is substantial. An alternative could be reducing this timeframe to 6 or even 3 months. This concern mainly applies to completed or canceled items that can accumulate over time. In addition, repeating items need to be manufactured in our derived store, and if these are daily repeats, a shorter 3-month span might be more manageable.
A temporary solution might involve adding month-based groupings. This would mean that after the 'last month', users would see groupings named by months going back as far as needed.
Ultimately, derived stores have proven to be a valuable asset. We aim to extend their use across a broader range of filtering and sorting applications, such as status filtering, intra-group priority setting, implementing ranking strategies (which will eventually replace date ranges), and adding more search term sources.
Date grouped list items
Here's what we've been up to: we thought it'd be a good idea to sort tasks by date. So, we've set up categories like Future, Next Month, Next Week, Tomorrow, Today, Yesterday, Last Week, Last Month, and Past. This way, it's easier for users to handle their tasks and it doesn't get too detailed. To keep things clear, each group has a sticky header that hangs out at the top of the list as you scroll, until the next group comes along.
Now, pairing up these date groupings with sticky headers wasn't exactly a walk in the park, given that we're using a virtual list. But we decided to make peace with some inefficiencies when a date group has a whole bunch of items, rather than overhauling the virtual list control.
One key move was placing the sticky headers inside a specific element. This reduced the workload for the browser and eliminated any lag, especially on mobile devices. With the header inside a relative container, it moves smoothly up to its sticky position, then scrolls up and off the screen with its related items, and we don't even have to mess with scroll events.
We've also added a placeholder for the 'Today' group. It's always there, even if there are no tasks. We thought it would be good to let users know when they don't have any tasks for today, but without messing with the overall look of the groups.
And just a heads up: we're about to add an 'Add task' button on the headings. Click it, and you can add a task with the date preset to the closest date in that range. Also, if you click on a heading, it and its tasks jump to the top of the list, no matter where they were before.
Columns
Working with SvelteKit is a pretty sweet deal, especially thanks to its simplicity in handling reactivity. All you need is a $: statement, and you're good to roll. One of the recent upgrades in Tizli is adding two columns for the desktop view in the planning section, which really helps us utilize the screen space better. It determines the layout by measuring if the device or screen width is larger than a typical mobile device with its menu tucked away. If it is, you get a single column; if it's smaller, it switches to a two-column layout.
The decision about whether to hide or display the left navigation menu is also based on the screen width, using the same responsive targets as when deciding on the column layout. Even though there might be a few different iterations of this approach, once you get your hands on it, everything falls into place and it just feels intuitive and easy to use.
Building in the open is all the rage
In honor of this I'll just state the obvious, Tizli is a todo list app. There I said it. It's a tutorial gone way too far. Just kidding, that's what it is now but of course there's a lot more to it and a lot more to come.
First things first, access. A great user experience is the key to any kind of service application. Getting access is the first part of any service experience. It has been called onboarding for a while now. I think that comes from the airline industry but maybe originally from trains or ships? An interesting question but not one I'm looking to answer today. The main idea is that you want people to have a good experience as the join. Tizli isn't as the stage of bells and whistles yet, we're just focused on error free registration and guest account creation (more about that later).
Today you can register to join our waitlist. You'll be told you need to verify your email address and you'll get an email with a verification link. Clicking that link will verify your email address and you'll be redirected to the login page. You can then login and you'll be redirected to a waitlist notice page. That's it. That's all you can do right now. But it's a start.
As soon as we open up access you'll be able to start working with tasks, tasklists and access tokens.
You can read more about our current plans in the investor deck