As developers we try out a lot of things. New libraries and frameworks, the latest language features and so on. What’s the best way to do so? Yes, you’re right: write a simple application that has as many different features as possible to cover as many aspects as possible. So imagine you’re new to, let’s say Angular. What are you building first (of course after the awesome heroes application)? A todo list. Then you maybe want to try out React. What are you building? Another todo list. And so on. After a few frameworks it’s getting more and more boring – it’s time to think of alternatives.
Why are todo lists so interesting for us?
One of the most famous framework comparisons is TodoMVC. This project provides you sample implementations of a todo list in around 70 different frameworks and libraries. The goal of this project is to give you an overview of how to solve a certain problem with different tools in order to pick the right tool. By solving the same problem with different frameworks you make them comparable. But only a litte. The more often you implement a solution the more you’re getting used to the obstacles. You don’t need to implement the same solution in different ways but to solve the same category of problems. That’s what leads me to the question: What else can we implement instead of a simple todo list. The answer is simple: it depends… It depends on what you want to implement. You need to know the key features of your application.
The key features of a todo list
The core of a todo list are CRUD-Operations which involve client/server communication.
- Create: It’s possible to create a new entry
- Read: You have a list of items
- Update: Existing entries can be modified
- Delete: If you don’t need a certain entry anymore, you can remove it from the list
That’s rather simple. To spice up things a little bit, you could add some more features to your todo application such as:
- Make your list sortable
- Add a search field to filter your list
- Implement pagination to reduce the amount to display
- Reorder your todos by dragging them to another place in the list
- Open the edit/new form in an overlay rather than on a new page
- Ask the user before deleting an entry if he’s really sure
- Make your list available to multiple users by adding a login form
- Enable your list for real-time notifications so all the lists are synchronised over different clients by websockets
- Use web storage to make the list available in case your user is offline
As you see, you can even make a simple and boring thing as a todo list a bit more interesting. But that’s not the end.
A todo list is something you can use every day to organise yourself. But there are more helpful things such as calendars, recipe books, address lists, movie ratings and so on. Basically they’re all the same. You create information, display it, modify it and in the end delete it. But it doesn’t have always to be the same topic. Imagine a recipe book with your favourite meals and a image upload feature so you can see the (of course delicious looking) end product. Or a database where you can manage all the movies you’ve seen recently with a rating from crappy (don’t watch it a second time) to awesome (watch it in an endless loop). The more personally involved you are in a certain topic the more fun the application is to build.
Lists and organizers are practical, rather static and a bit boring. To make things even more interesting, you could have a look on a different category of software projects: games. Everyone loves games. They’re like cats. You have to love them. Especially when it comes to older and more simple games such as Snake, Tetris, PacMan and so on. Games are colourful, there’s a lot of movement and they’re simply fun to develop and play.
Because I’m getting bored of todo lists since I’ve implemented some. I’m collecting ideas for applications that help you to get to know new technologies and are fun to build. I’ve started a new project on GitHub that lists my application ideas: app-ideas. I’m looking forward to your application ideas and will be glad to add them to the list.