Learning Through Building  “By bringing real-life context and technology to the curriculum through a project-based learning approach, students are encour- aged to become independent workers, critical thinkers, and lifelong learners.” Edutopia.org Projects are critical to your coding journey because they are the visible proof of what you have learned. Every project you build will go into your portfolio and can be talked about on your blog and social media (more detail about this can be found in later chapters). The first few projects are for ramping up your learning and gaining practical skills. As you build more advanced applications, you should be spending increasing amounts of time polishing the details because those are the ones that will remain in your portfolio when you are looking for a job. This chapter contains advice on for planning, building, and finishing projects.  Project Planning It is tempting to start building and start building projects in the code right away. While this is fine for your first small project, it is not sustainable. Every project should start with a goal and user stories, then a list of requirements and simple mockups, and finally have a list of actionable tasks. This will help you get used to a systematic approach that you will be using as a professional. It is a good idea to keep all of these planning documents and mockups from your projects to show off on your blog or, potentially, when you apply for jobs. As you are planning, keep a minimum viable product (MVP) mindset. In other words, figure out the minimum number of fea- tures you can include in the initial build of the app. You should write down each piece of the app that you have to build and keep it in a task management system. I recommend using Trello for this step because it is easy to use, works well, and is free, but you can use paper or another medium to organize your process. To start, separate tasks into three columns: ‘”to-do”, ”in progress”, and ”done”. At first, your tasks can be a simple description detailing what needs done. As your projects become more complex, you can use colors, tags, or more columns to separate your tasks into front-end, back-end, and other categories. Throughout your career, you will probably see many different styles of project management, from Kanban to Agile to Scrum. Every company does things a little differ- ently, and it’s important to not be too pedantic about the specifics and use whatever system is simple yet robust enough for the project at hand. Any features not included in the MVP should go on a bucket list for future versions of the app. For example, when you finish the MVP, you can go on to version 2, then 3, and so on. If you want to keep lists of tasks that will go into future versions, you can add columns like ”Version 2” or “Bucket List” or “Ideas”, so long as they are separate from your MVP items. Project Planning Steps:  1.Write down the ideas and goals for the application. 2.Create user stories. User stories are extremely useful for building apps that achieve your desired outcomes. A user story is a statement like ”as a [user], I want [some ability] in order to [do something].” The statement answers who, what, and why in an easy to understand way without any implementation details. For example, ”As a teacher, I want to be able to digitally manage my students’ attendance records, in order to become more efficient.” You should create at least a few of these statements for each type of user of your application. Larger or more complex applications will have more. 3.Write down the list of requirements needed for the desired outcomes from the user stories, every piece of the app you need to build. These requirements should answer the question of ”how” you will implement features. Go over that list and boil it down to make sure it is the minimum number of features actually required to build a working app. Remem- ber your aim is an MVP. 4.Draw mockups for each of your screens— create schemas and diagrams for any database relationships; and map out your API (application programming interface – for back-end development) if you have one. Mockups can be as simple as using paper or a greaseboard to outline a rectangle with details inside for each screen; or using a software appli- cation made for this purpose (my favorite one that I’ve been using for many years is Balsamiq). You can use the same tools to diagram your schemas and database relationships, or you could use a specialized tool like dbdiagram.io which has a free tier for personal projects. 5.Based on your requirements, decide which features need built first and break that process down into steps, then create tasks based on those steps. Use a tool like Trello to enter all of your tasks and keep track of what you are working on and what you need to do next. Having a process like the one I detail above will really help you with not only building better applications (without missing important steps), but also with impressing employers with your organizational skills and attention to detail. Virtually every company is going to have a process with steps like these, and you’ll be able to contribute to the team more effectively if you’re familiar with this process or one like it. I highly recommend watching the Intro to Agile Crash Course video on my YouTube channel, Faraday Academy, to learn more about software project management. TIP: Tasks Should be Actionable In the book Getting Things Done by David Allen, he recommends beginning all your tasks with an action word, like “walk the dog” or “wash the car.”. This helps turn your vague statements into workable tasks and propels you to action as you are looking through your list. It’s a best practice when creating your “to-do” list that you also make your tasks specific and measurable, even if you know beforehand that the end result will take a significant amount of time. Break down your larger goals and items into smaller tasks until they can be completed within a few hours, ideally. Keeping your tasks organized and actionable will come in handy in your first role, especially when you’re working with a team. There are many other pieces of great advice contained in the book Getting Things Done and I recommend you read it for yourself. Finishing the Projects that you Start “Forcing yourself to just focus on one project at a time and not abandon it and switch to another one, that’s the real important [part] of being able to finish projects.” Jared Wilcurt, interviewed on my podcast, Faraday Tech Cafe Building projects can be fun, but also stressful. You will inevitably run into many hiccups during the process and feel frustrated when it gets difficult. Undoubtedly, the next shiny technology or language will come along and you’ll want to build something new, putting off (sometimes forever) the current project you are working on. This road only leads to project graveyards and not having anything great to show for your work. What is the solution? Make a list of all the projects you want to build and just work on one, or maybe two, at a time. Only start working on a new one when you have built a working MVP and are satisfied with the outcome, which can vary depending on the type of project. Senior Software Engineer and prolific project creator, Jared Wilcurt, says that there are three types of projects you can build: 1.Academic projects where you are just trying to learn something new and do not care about the final result. This type of project is for educational purpose and can be thrown away after you finish learning what you need to. Most of your early projects will fit in this category. 2.Portfolio projects where you want to impress an employer. These are the projects where you use the technologies you are best at and really polish the end product. They should be well documented and adhere to best practices as much as possible. 3.Passion projects where you want something to exist so you build it yourself. This is the most difficult type of project and will likely take a long time to complete. You will probably have to put it aside to work on other things off and on so it does not consume all of your time. When you decide what type of project you are working on, it becomes clearer what your end goal is and when to move on to the next project. You should build projects from end to end to get an idea for how the whole process works, and what difficulties or is- sues arise at various steps along the way. See more tips for building projects on my podcast episode where I interview Jared: faradaytechcafe.podbean.com/ e/episode-14-how-to-finish-projects-craft-resumes-with-the-jared-wilcurt  Project Advice After you complete a project, you should host it somewhere on the internet. This not only helps you get used to hosting your code in a live environment (what programmers call ”pushing your code to production”) but it also lets you share your project and get feed- back from others. There are many good options for free and easy hosting when you are starting out: Github Pages, Heroku, Digital Ocean, and others. Challenge yourself to optimize the websites and applications you build. Ask yourself, “How can I make this better? Is there any- thing I can clean up in the code? Are there lines of code that are not being used anymore and need to be removed? What types of optimization would I be able to implement in a reasonable amount of time?” Asking yourself these questions is a great way to im- prove your skills. This also helps you prepare for interview questions about optimization. As you are learning, do not forget that the foundational concepts in programming are immensely important. Many people make the mistake of learning tools and coding libraries without understanding the basic concepts first. This can be detrimental in the long run, making it harder to score well in technical interviews or to understand and fix bugs in your programs. While building appli- cations, it is important to stay curious and always ask why something works the way it does. Sometimes you will not understand the answer right away – which is normal! Eventually, however, doing this will help you gain a deeper understanding of how the under- lying technologies work. You might also feel like you aren’t progressing fast enough. Or maybe you cannot make the connection between what you are learning and practical use cases. This is also completely normal. There are a lot of pieces of information that you will need reviewed repeatedly, even after you get a job.  Conclusion Take the learning plan from the previous chapter and start working your way through this curriculum. If you get stuck, just keep pushing through and reach out for help from the community when you need it. I’ve included a list of places to seek help in the the recommended resources for this book. The rest of this book will be a guide to help you land your first job as a programmer. Do not wait to finish reading it to start on the curriculum. Action Steps:  1.Research job listings related to your goals and take notes on the keywords you find. 2.Look over some online curriculums and choose whether to use one of them or create your own. 3.Start studying and working on your first project within the first week if you can. Do not forget to plan appropriately be- fore beginning to build an application. 4.Challenge yourself to optimize after every project. 5.Host projects online and ask other people to provide feedback.