When I first started coding I liked just diving in and programming. There is still that urge to just jump in and start slapping functions together to make something that works but I want you to imagine for a moment if other professions worked that way. Let’s say a construction company was creating a high rise without any sort of blueprint. They have some sort of vision of how they want it to look and work but they never sat down to create a way forward. They just started slapping beams together as they went and then built walls, added doors and windows, electrical outlets, elevators, and whatever else goes into a skyscraper as they went. Would you want to work in that building?
There is a reason architects design the buildings beforehand and a lot of work goes into making the blueprints. They know everything will work as intended. If you have no intentions going in then nothing will really work as intended.
There are many different ways this can be done. We won’t really get too deep into the different software methodologies so I encourage you to look these up and learn more about them for yourself. The main software methodologies are Waterfall, Spiral, and Agile. Waterfall is a lot of documentation up front. You have your requirements documents, use cases, class diagrams, and a whole lot of other things planned up front. As you can imagine this process can take a long time before working software is delivered. Typically between 6 and 18 months. This would be like the architect who has everything planned up front before any construction takes place. A drawback of this approach is changes are usually quite expensive because now everything needs to be planned again.
Spiral is like waterfall where you still have a lot of documentation and planning but releases occur much more frequently. We are talking several months to a couple years. Changes are not as expensive because the system is not being completed in one big chunk but several smaller ones.
Agile prefers working code over documentation so there is little documentation. It wants more interaction with customers. It says to deliver working code early and often. This is what we are going to use while building our app. There are many different flavors of Agile I encourage you to study on your own and many of them work concurrently. A lot of times you’ll hear about Scrum and Kanban or XP. They all have different methodologies that work well together. Again I will not focus on any specific discipline but leave that up to you to discover. You should also choose which methodology, Waterfall, Spiral, or Agile, to use based on which is the best tool for the job.
So rather than write a lengthy requirements document we are going to start our first Sprint with some user stories. A Sprint comes from Scrum and it is just a period time to get some amount of work done. A sprint can be one week to a couple months so you would work on user stories for the entire sprint and nothing more. If you don’t finish you hand over what you have anyway and save it for the next sprint. Your team’s speed, or velocity, is measured in how many story points you complete per sprint. You really can’t compare your velocity with another teams’ because it is completely dependent on how many story points your team attributes to stories and should only be used as estimates for how many user stories can be completed per sprint. We are not going to worry about this with our app and our first and only sprint will be however long it takes us to finish.
After that long explanation of what we are doing, let’s get started! Whether you are working for yourself or a customer, you have some form of stakeholder. If you are working with the customer, you want to build what they want. If for yourself, you build what you want. Simple as that.
Since we are working for ourselves, let’s start coming up with some user stories for a web app idea. For our idea (well really my idea), we want to build a grocery list web app that we can add, remove, and modify grocery items and put a check mark next to them to show completion. We will obviously need to have some form of login and a way for users to save their grocery lists. It would also be nice if you could share lists with friends or allow spouses to use the same list. For this sprint, we really don’t care if the list is archived or not once it is completed but this is something you could easily do on your own for practice. You could create a list of lists, if you will, or just have them automatically deleted to let the user make a new list. For now we will just allow the user to remove checked items and be able to add new items all using the same list.
Now that we have what we are trying to do, let’s make the user stories we are going to work on for this sprint. The format of a user story is very simple as it is designed to be created by any stakeholder but it captures what is wanted without going into a lot of detail. The format I like best goes like this:
I want to add a grocery item to a list
So that I can remember it while I’m shopping
I want to add a grocery item to a list
So that I can remember it while I’m shopping
I want to remove a grocery item from a list
So that I can get rid of an item I no longer need
I want to be able to place a check mark next to an item
So that I can see progress of what I’ve already got
I want to be able to login to the application
So that my list will be remembered
Even though we discussed a few more ideas, these should be a perfect starting point for our first release. Remember we release working code early and often so this will get our app functional and then in our next sprint, we will add some of the other features to make it better.
Up next: UI/UX Design (coming soon)