Task management has become a passion of mine; for the last two years or so I’ve been trying to build something close to what you’re describing. I think it’s cool that you’re giving this a shot. Here are some of my thoughts:
Start small. Building good task management software is a hard challenge, potentially several orders of magnitude harder than you’re expecting. I continually underestimated how much effort it would take to build my task management software.
If you want to work on this full-time, consider joining an existing team. Companies such as Asana are already in the task management space, and they have teams of software engineers and data scientists working on cool things. Joining an existing team allows you to specialize on a part of the software, whereas you might spread yourself too thin if you are responsible for all components of the project. Joining an existing team is basically what I’m trying to do now, after I decided pursuing my startup further was suboptimal. (Potential employers reading this: please contact me!)
Focus on the fundamental algorithms and APIs before considering presentation. Target the command line; in the browser, it’s easy to get distracted by user experience issues and end up prematurely optimizing for them. Unless your software actually does the awesome things you want it to do on the technical side, it won’t matter how nice its interface is. Developing for the command line forces you to focus on the actual algorithms and APIs.
Don’t reinvent things and don’t allow feature creep. If you feel like you’re doing something new, do more research. Very little in the way of new algorithms, math, data structures, etc. is necessary in this area; most of the work to be done is in picking which things to use that have already been invented. Keep your code base and features small so you don’t get overwhelmed by technical debt.
Take free online classes in algorithms, data structures, software development, machine learning, statistics, information theory, logic, AI, and planning. There’s so much cool stuff out there that you might not know about, which could be useful for this sort of endeavor. For example, something I learned from Tim Roughgarden’s algorithms class on Coursera is that a set of tasks with precedence constraints (e.g. constraints of the form “task X must be completed before task Y”) can be represented by a directed graph. If the graph is acyclic, a topological sort can, in linear time, can give a sequence of tasks that respects all precedence constraints (if the graph is cyclic, no such sequence exists.)
One avenue to explore with this kind of software is data entry optimization. What optimal subset of data should be collected from the user? Data entry consumes users’ time; it’s suboptimal for a user with thousands of tasks to routinely update each task’s parameters. I think by looking at tasks’ parameters as random variables, we can use information theory and machine learning to decide when users should be asked to update various data. I wrote a paper exploring this.
One thing you have going for you is that your project is open source. That allows for a lot of little contributions from people who are interested in the work, but already have their own sources of income. That might allow the project to survive where my startup failed. I still care deeply about task management, so it’s possible our work will intersect in the future. I’m now following the GitHub repository you made for this project.
Task management has become a passion of mine; for the last two years or so I’ve been trying to build something close to what you’re describing. I think it’s cool that you’re giving this a shot. Here are some of my thoughts:
Start small. Building good task management software is a hard challenge, potentially several orders of magnitude harder than you’re expecting. I continually underestimated how much effort it would take to build my task management software.
If you want to work on this full-time, consider joining an existing team. Companies such as Asana are already in the task management space, and they have teams of software engineers and data scientists working on cool things. Joining an existing team allows you to specialize on a part of the software, whereas you might spread yourself too thin if you are responsible for all components of the project. Joining an existing team is basically what I’m trying to do now, after I decided pursuing my startup further was suboptimal. (Potential employers reading this: please contact me!)
Focus on the fundamental algorithms and APIs before considering presentation. Target the command line; in the browser, it’s easy to get distracted by user experience issues and end up prematurely optimizing for them. Unless your software actually does the awesome things you want it to do on the technical side, it won’t matter how nice its interface is. Developing for the command line forces you to focus on the actual algorithms and APIs.
Don’t reinvent things and don’t allow feature creep. If you feel like you’re doing something new, do more research. Very little in the way of new algorithms, math, data structures, etc. is necessary in this area; most of the work to be done is in picking which things to use that have already been invented. Keep your code base and features small so you don’t get overwhelmed by technical debt.
Take free online classes in algorithms, data structures, software development, machine learning, statistics, information theory, logic, AI, and planning. There’s so much cool stuff out there that you might not know about, which could be useful for this sort of endeavor. For example, something I learned from Tim Roughgarden’s algorithms class on Coursera is that a set of tasks with precedence constraints (e.g. constraints of the form “task X must be completed before task Y”) can be represented by a directed graph. If the graph is acyclic, a topological sort can, in linear time, can give a sequence of tasks that respects all precedence constraints (if the graph is cyclic, no such sequence exists.)
One avenue to explore with this kind of software is data entry optimization. What optimal subset of data should be collected from the user? Data entry consumes users’ time; it’s suboptimal for a user with thousands of tasks to routinely update each task’s parameters. I think by looking at tasks’ parameters as random variables, we can use information theory and machine learning to decide when users should be asked to update various data. I wrote a paper exploring this.
One thing you have going for you is that your project is open source. That allows for a lot of little contributions from people who are interested in the work, but already have their own sources of income. That might allow the project to survive where my startup failed. I still care deeply about task management, so it’s possible our work will intersect in the future. I’m now following the GitHub repository you made for this project.