Skip to content

Instantly share code, notes, and snippets.

@it-is-michal
Last active March 23, 2021 16:30
Show Gist options
  • Save it-is-michal/f9dd5664bc6dfe319b35 to your computer and use it in GitHub Desktop.
Save it-is-michal/f9dd5664bc6dfe319b35 to your computer and use it in GitHub Desktop.
TODO List App Kata

TODO List App Kata - README

This Kata is divided into two parts. First do the base feature part without even looking at the additional features. Once the foundation is ready then move forward to the list of features.

Focus on developing one thing at a time.

Note that some features may be missing, some may not match others right away. This is intentional. Feel free to refine that list as you are coding.

TODO List App Kata - base feature

TODO list applications are quite popular these days. They help you get organized. Today you will write your own one.

The objective is to write a piece of code that will be capable of:

  1. returning the list of tasks;
  2. creating a new task;
  3. deleting an existing task.

To be clear at this point neither persisting between subsequent program runs nor UI is required. Just the working engine.

TODO List App Kata - additional features

Once you have base feature described in tests and properly coded you can add more features. Below you will find some exaples.

  1. Make it possible to edit tasks.
  2. Add 'DONE' state.
  3. Make it possible to have multiple task lists.
  4. Add #hashtags + ability to search by them.
  5. Add due dates + sorting by them.
  6. Add 'Agenda for today' feature.
  7. Add 'Agenda for specified day' feature.
  8. Add priorities to tasks (eg. from 1 to 4).
  9. Add 'collaborators' feature.
  10. Make it the list of tasks persistent between subsequent runs. For the first iteration use a file.
  11. Replace file storage from point 1. with something more robust. What are the options?
  12. Add 'subtask' feature.
  13. Build a simple command line UI.

As noted in README: After implementing a few features you may find that there are also ones that are missing for that product to be usable. That is intentional. Feel free to add them when needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment