Kaamkar
Effortlessly identify what needs to get done, organize tasks, and get a clearer picture of the project timeline.
Created on 15th January 2023
•
Kaamkar
Effortlessly identify what needs to get done, organize tasks, and get a clearer picture of the project timeline.
The problem Kaamkar solves
I've recently been using to-do lists to record my progress for side projects. So, I thought it'd be cool to ship a side-project that lets me do just that (very meta I know XD)! This application is great for solo projects, doing household chores, or even just keeping track of your groceries.
Challenges I ran into
💡Conception
Recently, I've been reading up on Test Driven Development practices and how it acts as a thinking tool that helps you with:
- managing your stress levels during programming
- thinking about the design of your programs
- managing the scope of your projects
So, I've been trying to apply the principles I learned to my own software and game-dev side projects.
Another handy trick I picked up while learning about TDD was to always maintain a to-do-list of the specs you know that you have to write and implement so that you can pay attention to the work that you're doing in a programming session instead of succumbing to your stress because of the ton of work remaining.
Then, it struck me. Since I've been using to-do lists a lot, wouldn't it be cool if I build an application that I can use to make to-do lists for my side-projects, while applying these concepts!
✍️Development
Before I wrote the first line of code, I defined the domain by pondering the following questions:
- What should I be able to do with the finished version of the project?
- What is the domain, what are the concepts that exist within it, and how do they interact with one another?
- What are the behaviors that these concepts should display?
Once the domain abstractions were modeled, I set up a Model View Controller (MVC) architecture such that:
- The domain layer deals only with domain types
- The view, which handles user inputs and outputs, only accepts primitive types
- The controller orchestrates the flow of data from the domain and views layers with the help of a Parser and Renderer.
Primitive Type → Parser → Domain Type Domain Type → Renderer → Primitive Type
I've also created Components for reusable UI elements so that rendering the necessary information and setting up event listeners is easier.
Technologies used