Is there an ideal personal task scheduler? Modular Scheduler Development
Some time ago, as an active user of personal task planners, I discovered one significant drawback - despite their countless numbers, it is impossible to find the “one” that would satisfy you on all counts.
No, in itself this is absolutely normal, since the program was developed by one or several developers who eventually came to their understanding of “how the user will feel better.” And besides, it is impossible to fit in one program everything that theoretically a spherical user might want in a vacuum. Or maybe?
Why 2 functions in 1 application is better than 1 function in 1 application
Let's put aside all restrictions for a second and imagine that an ideal scheduler exists: it fully meets your expectations in terms of interface, provides all the functions you need and works on all your devices. What does this give us? A key feature of such an application will be the ability to use the same data to ensure the operation of all the functions of the application.
We will simulate the situation - there are two users who cannot live without compiling a list of tasks and using Pomdoro equipment . Both have the same needs - the only difference is which applications they use to satisfy them:
- User # 1 uses 2 popular apps: Todoist (to-do list) and Productivity Challenge Timer (Pomodoro)
- User # 2 uses our hypothetical “perfect” application
A few words about how the user interacts with the program in both cases:
- User # 1: populates the task list in Todoist, populates the list of projects in the Productivity Challenge Timer
- User # 2: fills the list of tasks inside his program
Based on the above illustration, you can identify some unpleasant moments that user # 1 will have to face, unlike user # 2:
- The need to manually synchronize the list of projects in both applications
- Inability to start Pomodoro loops for subtasks included in the project
- Lack of consolidated statistics on task performance - it is stored in different applications
If this does not bother you, and you think that several applications can be dispensed with, then imagine what will happen if you need to provide the user with not two, but ten functions?
Well, one application in which there are all the necessary functions is better than several applications. But you cannot develop a separate program for all combinations of functions! This is how it turns out, if you don’t use it ...
and why am I breaking the comedy, in the title it was written ... a modular approach!
The main secret of the “ideal” application is that you don’t have to try to “predict” what the user wants there, but let him build his own “personal” application, which will fully meet his desires and needs. The process of assembling such an application will consist in selecting the desired application functions and user interface aspects that will be represented by the corresponding modules.
In addition, it is obvious that if you correctly organize the development process of such an application, the overall complexity will be significantly reduced, since the implemented functions do not disappear anywhere - they are only "packed" into modules convenient for use by other developers.
This is not only a theory.
So that this article does not look like the nonsense of a developer who is crazy on his theory, I would like to show how this all works on the example of my project. I will not describe it in the framework of this article for now - now I will only describe the idea itself. In general, there is a certain application X - at the moment, it is possible to connect new modules to the system, where each module can significantly change the interface and expand the available functions of the application.
Here is the situation as in the example above, when the to-do list module is expanded by the Pomodoro module:
At the moment, the application is under development, and is not ready to provide access to users. There is still much to be realized, but something already exists - here, for example, is a list of the application's working functions:
- Task list - tasks have the following properties: name, date, completed by Pomodoro, sketch
- Pomodoro Technique - Run Pomodoro loops for tasks from the task list
- Custom Sketches - create sketches for saving in a separate gallery or binding to tasks from the task list
Each of the described functions is represented by a group of modules, each of which can be removed without affecting the operability of the entire system - deleting a module will only exclude the corresponding function from the system for which it was responsible.
At the end of the article, I would like to share with you my concepts on the further development and use of this project.
Description : The application on the smartphone has data that can be used to improve the functioning of the “smart home”, namely: knowing the schedule of the day, you can adjust the illumination, turn music on and off at a certain time, start home appliances (when you wake up, returned home). At the same time, the user does not have to manually configure the behavior of this system, since it uses the same data as it does (as in the example with Pomodoro).
Already implemented modules : task list, interaction with the database
is necessary to implement the modules: Internet interaction or Bluetooth, a module for communicating with a smart home system, a module with logic for analyzing the schedule of the day for a smart home
Description : With prolonged use of the application, a large array of data accumulates, which can be used as input for machine learning algorithms. Thus, it will be possible with some probability to predict when the user will perform tasks depending on their urgency, importance or attitude to any area of life. Using the prediction, it will be possible, for example, at the beginning of the day to generate options for how he could spend today. In this case, all the deadlines for current projects would be taken into account and an optimal schedule would be drawn up for their delivery on time.
Already implemented modules : task list, interaction with DBMS
It is necessary to implement modules : a machine learning module on sequences, a module for generating “predictions”
Description : The user decides to go in for sports (run in the morning, do exercises). On a smartphone and PC, the user selects applications and sites to which access will be reduced. In case of failure to perform sporting activities, the user for some time gets reduced access to the selected resources. Control over the implementation of sports activities is monitored according to data obtained from the bracelet.
Already implemented modules : the interaction with the database
is necessary to implement the modules: Internet interaction or Bluetooth, module for interacting with a fitness bracelet, module for restricting access to resources, module for controlling habits
In this article, I did not consider the features of the implementation, so as not to overload the text with details. I will definitely cover the development process itself, but in the next article. If anyone is interested, then you can familiarize yourself with already implemented modules:
- MainMenuModel - stores links to currently connected plugins
- MainMenuView - provides the UI of the main menu
- TaskListModel - provides access to custom tasks
- TaskListView - displays custom tasks in a tree view
- PomodoroModel - Provides access to executed Pomodoro
- PomodoroView - provides a UI for running Pomodoro loops and viewing them
- TaskSketchModel - provides access to user sketches
- TaskSketchView - provides a UI for creating sketches
- AndroidNotificationsModel - Provides access to Android platform-specific features
- ExtendableDataBaseManager - provides access to abstract data structures that are independent of the source
- CipherDataBaseSource - provides methods for interacting with the encryption plugin for SQLight DBMS
The source code can be found here .
Thanks for attention.