Kanban Board Application

From UBC Wiki

Authors: Jonathan Adithya, Logan Wu

What is the problem?

Imagine yourself buried in a mass of sticky notes, each representing a different task you need to complete. Some are urgent, some important, and others can wait. You try to switch between them, constantly shifting your focus, feeling overwhelmed and unsure what to prioritize.

This chaotic environment leads to:

  • Jumping between tasks frequently, resulting in lost productivity and increased time to complete each one.
  • Difficulty keeping track of task details, dependencies, and progress, leading to confusion and errors.
  • Unidentified work in progress piling up, slowing down the entire workflow and delaying delivery.

This chaotic and inefficient workflow represents the problems that Kanban aims to solve.

Given a simple Notion Kanban, tasks are represented as cards that can be moved across different columns (or "statuses") on the board. Each column represents a stage in the workflow, such as "To Do," "In Progress," and "Completed." This visual system helps teams and individuals track the progress of tasks through different stages of a project or workflow, promoting transparency and efficiency.

What is the something extra?

Notion Kanban can include many features such as:

  • Customization: Users can customize columns (statuses), and the status/group of tasks can be freely switch.
  • Active Data Modification: Based on user's input, dynamically updating the database as users interact with the application.
  • Processing and hierarchical relationships between data: Adjustments based on user modifications to different types of data, according to their hierarchical levels. For instance, changes made to a task will only affect the task itself, but modifications to a group could significantly alter the data of tasks associated with that group.

What did we learn from doing this?

Initially, our intention was to create a simple Notion Kanban through Haskell programming that allows user interaction, such as enabling users to drag tasks between different groups to achieve the effect of changing groups. However, as we began coding the project, we realized the imperative nature of this user interaction and the DOM operations required for front-end development were very difficult to implement using Haskell's pure functional style.


However, as the project transitioned to the backend, we discovered Haskell's advantages, particularly its comprehensive backend database library ecosystem. Haskell boasts numerous libraries for data storage and processing, such as Persistent, HDBC (which we used), SQLite-simple, Esqueleto, etc. In languages like C or Java, establishing relationships between data can be quite cumbersome, but through HDBC—with its excellent database interaction capabilities with SQL—Haskell can create multiple tables in the backend based on user input and establish a hierarchical system among the data in each table. In our project, each group created by the user acts as a root, and tasks are like branches. A group can have countless tasks, but a task can only belong to one group, though it can freely switch between groups. When a user deletes a group, all related tasks are also removed. Additionally, Haskell's "lazy evaluation" feature plays a crucial role by postponing computations until they are actually needed, thus optimizing data processing and query execution. This not only enhances performance but also enables more efficient resource management, making it easier for us to dynamically build and adjust database operations (like deleting a task or group) as the project evolves.


Although the Notion Kanban has been completed, due to time constraints, we were unable to incorporate the originally planned features such as custom priority settings, reminder functions, and time tag features. We believe that given more time, adding these features should not pose a problem.

In summary, our journey of developing a Notion Kanban with Haskell was filled with both challenges and successes. Initially, we faced obstacles in implementing user-driven frontend interactions within Haskell's pure functional paradigm, as the language's limitations on imperative DOM operations presented significant difficulties. However, we also discovered Haskell's formidable capabilities in backend development, where its rich database library ecosystem provided strong support for backend development. By utilizing HDBC for SQL interactions, we were able to effectively manage complex data relationships and implement a dynamic task and group management system, greatly benefiting from Haskell's lazy evaluation feature to optimize performance and resource allocation. Although we were unable to integrate all the anticipated features within the set timeframe, the foundation laid provides a hopeful path forward. This experience not only showcased Haskell's strengths in functional programming and backend data processing but also highlighted the importance of flexibility and adaptability when facing unforeseen technical challenges

Work division

How was the workload divided? Who did what? (This can be in a private communication to the TA if you do not want it to be public).

Links to code etc.

https://github.com/jo-adithya/kanban-project