Lesson Description
The "Todo App Functional Requirements" Lesson is part of the full, Backend System Design course featured in this preview video. Here's what you'd learn in this lesson:
Jem guides students through CRUD apps, explaining create, read, update, and delete operations. Using a to-do app example, he covers functional requirements like viewing, creating, editing, deleting, and other features such as sorting and filtering.
Transcript from the "Todo App Functional Requirements" Lesson
[00:00:00]
>> Jem Young: There is one basic pattern, or there's a few basic patterns, but we wrote a CRUD app. CRUD is create, read, update, delete. You've probably heard that phrase if you work in front-end a lot. And a CRUD app is always going to have the same kind of basic structure. You're going to have some sort of web server, a client and a database, and you start from there every time, easy. Then you focus in on like, what is most important here?
[00:00:23]
Is it a read-heavy application? Is it a write-heavy? For a, I don't know, a to-do app. Is that, what do you think that is? Is that more read heavy or is that more write heavy? More write, you're constantly adding and taking things away from the app, like the different to-dos as you check them off or add them or they fall off on it. Mm. That was, that would be my initial guess too. And it was for a while because when I was thinking of this problem, I was like, what does a CRUD app do?
[00:00:56]
Or what does a to-do app do? And then I thought a little deeper, as I like to do when I'm relaxing. And I said, yeah, I think even originally I said it earlier in the lecture, it was like, hey, they're evenly balanced, reads and writes. But then I thought, what is the user doing most of the time? If I have a to-do app, what's happening? Looking at your list, figuring out the next item.
[00:01:25]
Yeah. So, you might write, yeah, initially you're going to write, it's going to be bursty and maybe you do one a day, but you're still fetching all of those other tasks every single time you open that list. So it's going to be more read heavy. And it, yeah, it's not, it's intuitive when you think about it, when you stop and think about it, but your initial instinct can sometimes throw you, and it did for me too.
[00:01:46]
I also thought it's a write heavy so I thought more like, what is actually happening. It's tricky. But at the core, it's still a CRUD app, and you'll have many different types of CRUD apps, and they all kind of do the same thing, but it's the nuances here that define like what's the important part here. Are people editing frequently, and that's the sort of CRUD app we designed differently for that, and it's a lot of reads, very little writes.
[00:02:18]
Guess what? More functional requirements. Yeah. But this one should be a little more straightforward, right? This one is not a trick. I promise I'm not tricking you anymore. This one's more straightforward. Oh, come on, that hurts. That hurts. OK. This one I didn't, I put in the functional, the nonfunctional requirements for now because, you know, we're designing it ourselves, so we're going to say what it is.
[00:02:48]
But functional requirements. Let's talk this one out instead of handing it to you and making you come back to it. OK. Easy. We already said, we'll say we already said four of these. To-do app. Users should be able to see their to-dos, read their to-dos. Read their to-dos. Create new to-dos. Create new to-dos. It's going to, rest free. To-do. Edit existing to-do. Edit to-do. Mark to-do as complete.
[00:03:46]
Mark a, we'll say update the status. Delete that to-do. Yeah. Easy to forget. Things don't live in perpetuity, or maybe they do, maybe you can't delete anything. A banking app, you can't delete anything. Everything you do is logged permanently. Good question. Delete a to-do. Reorder or reprioritize. What archive be? So it's not a delete, soft delete, like a, yeah, like a historical list of previous to-dos like an archive.
[00:04:22]
Say archive, yeah, OK, I'll throw you one. Again, let's think about what the app is doing. What if I wanted, well, how do we organize the to-dos or tasks? I call them tasks, but we can call them. It might be date-based. But what would that look like? A list. That's how we would organize. These don't just exist in isolation, they're part of something. So we'll say create a list. Should be able to add the name or like at least add a name, update the name of the list.
[00:05:02]
Say edit a list. We'll include naming that. Should be able to filter or sort. Delete a list. Yeah. Can't forget that one. If there is a hard deadline, maybe having a date on it might be useful. Hm. I don't know one of the apps I use, if you throw a date on there, it'll actually like auto order it for you and tell you it's coming up. Like a due date. Hm. I like it. We'll leave it out for now.
[00:05:31]
I'd say that's beyond the scope of what we're trying to accomplish. But it's a, that's a valid one too. This is the thing we're building, so it's not some theoretical exercise. So it's like, what do we want to build? Let's keep it simple for ourselves. Maybe sharing a list with someone. Hm. Put that for now. Share a list. Have reminders for to-dos that are past due. Or notifications, alerts in some way.
[00:06:05]
Yeah, once you open up dates, there's a lot of that. Yeah, we'll leave that, leave that off. What about confetti animation when you completed? Oh, rewards. That's MVP for sure. The dopamine. That's a good one, but it's not functional. It's, that's a UI. But I like where you're going. I think I'm going to take this one off too, mainly for our purpose, it adds more complexity, it adds a lot more complexity, because then you get into user permissions and things like that, we won't go into, but leave it in for posterity.
[00:06:59]
So there's one more main one that we did not capture. I'll give you a hint, it's something to do with this. Oh, being able to log in. Yeah. You have to create an account if you're authenticated. We'll say creating accounts. Some from my online are like grouping or sorting into folders, tagging, categorizing. Kind of like organization of to-dos basically, and then also text formatting like markdown and that kind of thing.
[00:07:38]
Mm. Good ideas, we'll leave them off for now. We're keeping it simple, but good functional requirements. I know I'm cheating, I'm totally cheating, but hey, it's my exercise. We'll make it easy on ourselves. But also we don't want to spend our whole day building, actually we're going to spend a lot of day building this, but we don't want to spend too much time getting too big. OK, pretty good.
[00:00:00]
Interesting that even a to-do list, still like the most basic application you can write, pretty much still has all these different requirements.
Learn Straight from the Experts Who Shape the Modern Web
- 250+In-depth Courses
- Industry Leading Experts
- 24Learning Paths
- Live Interactive Workshops