Essential Guide to the 100 Days of Code Challenge
Tags: 100daysofcode, productivity
Published: 2020-02-26 23:26:10

## About This Guide

The 100 Days of Code is a challenge created by Alexander Kallaway in 2016 to help him achieve his goals as a software developer. Kallaway outlined a set of rules and guidelines to build strong coding habits and motivate him to tackle new coding projects. 

Since then, tens of thousands of developers have undertaken his challenge. 

Not everyone succeeds in completing the challenge. It takes determination, perseverance, and grit. Thoughtful planning plays a role, too.

We think we can help.

We've compiled a list of best practices and essential tips based on our research to help you get the most out of your experience. In this guide, we'll walk you through the challenge rules, reasons to join, and our 12 essential tips for success. At the end of this guide, you can view a list of helpful resources and tools from both the community and Software.

At Software, we're dedicated to helping developers improve their craft. We hope you find this guide helpful and we wish you luck in your coding journey!

## What is the 100 Days of Code Challenge?

![What is the 100 Days of Code Challenge](https://thepracticaldev.s3.amazonaws.com/i/4hnnzy6q20kcekhyqjp3.jpg)

The 100 Days of Code challenge is a self-directed commitment by developers to build strong and consistent coding habits. The challenge uses social accountability, transparency, and deep reflection to form healthy developer habits. 

The challenge follows one simple rule: 

* Code for a minimum of one hour each day for the next 100 days.

Many participants in the challenge also follow a second rule, although not required, to help build camaraderie and community: 

* Each day, reach out to at least two people who are also doing the challenge.

Through this guide, we will share the five most important reasons to start the challenge today and the twelve essential best practices to help you make the most of your coding journey. 

## Why you should join the challenge

![Why you should join the 100 Days of Code Challenge](https://thepracticaldev.s3.amazonaws.com/i/zvqk2k2tt9o8dlsxpmmq.png)

The ultimate goal of the 100 Days of Code challenge is to become a better developer and to build coding as a habit.

If you hope to become a more versatile, disciplined, and skilled developer, you should consider joining the challenge. 

Five skills you will learn on your way to becoming a better developer: 

**You will learn, and learn how to learn**.

The 100 Days of Code challenge is a great opportunity to experiment with and learn new technologies. For developers, who can grow accustomed to the languages and tools that they use on a daily basis, 100 Days of Code is a helpful way to expand your skill set and explore new languages, frameworks, and libraries. 

As you progress through the 100 Days of Code challenge, you will also strengthen your ability to learn new technologies as you repeatedly improve your learning efficiency and speed. Learning how to learn can make you a more adaptable and versatile developer. 

**You will improve your discipline and become a self-starter**.

Stop procrastinating and set yourself up for success. If you want to learn to code or learn a new technology, making a commitment to the 100 Days of Code challenge can increase the likelihood that you will stick to your learning plans and achieve your goals. As many developers know, starting new projects and maintaining motivation can be difficult; 100 Days of Code includes important incentives to keep you coding each day. 

First, when you timebox your learning objectives with the 100-day limit, you are more likely to achieve your objectives without becoming discouraged. Second, a structured and exciting challenge will help you get over your fear of starting new coding projects and encourage you to take risks to experiment with new development ideas.

**You will build powerful coding habits**.

By committing to coding for 100 consecutive days, you can incorporate strong habits into your daily life and become a more consistent developer. Every day that you code, you build momentum and interday flow. As a developer, flow is as much minute by minute as it is day by day. 

You will also build a habit of constantly learning new things. If you are comfortable learning new skills and train yourself to be a habitual learner, you will become a more resourceful developer. In the future, you will be able to continually update your developer skill set. 

**You will create a strong portfolio**.

During the challenge, you will likely be able to complete a few projects and, if you complete the challenge several times, you will build a compelling portfolio of projects. Working on daily projects will also add visible activity to your GitHub profile, providing a positive signal for potential employers. 

A portfolio demonstrates the different technologies that you are comfortable using and the depth of your developer skill set. Most importantly, however, a portfolio also demonstrates your curiosity and willingness to learn new technologies—a valuable soft skill for many teams that value resourceful and fast-learning developers.

**You will join a vibrant community**.

While the 100 Days of Code challenge is an individual endeavor, you will be joined by thousands of other developers to support you in your journey. By joining forums and discussions on Twitter, Slack, and other platforms, you can make new friends and meet like-minded people. 

Every developer, of any skill level, can participate in the 100 Days of Code challenge. You do not need any experience to participate; you only need curiosity, discipline, and a goal to improve yourself as a developer. 

## 12 Tips to Help You Survive (and Thrive)

![Tips for the 100 Days of Code Challenge](https://thepracticaldev.s3.amazonaws.com/i/y1ju3thn18x93okq2lzq.png)

The 100 Days of Code challenge only has one simple rule to follow, but a few extra guidelines can help you achieve more over the course of the challenge. 

As you plan your 100 days of code, you should think deeply about transparency, community, and the projects you hope to tackle. Below is a detailed list of actionable best practices to follow if you hope to be successful in the 100 Days of Code challenge. 

### 1. Make a public commitment

In any challenging undertaking, accountability is an important motivator. To add accountability to your challenge, your 100 Days of Code should begin with a public commitment to code a minimum of one hour every day for 100 days. 

Many developers choose to share their commitment on Twitter using the hashtag #100daysofcode, but you can also publicly declare your commitment to the challenge on any other platform where your post will be visible to others (GitHub, Facebook, WhatsApp, etc.). You can also share your commitment with a small group of coworkers and friends if you are less comfortable posting on social media.

When you commit to the challenge, you should also share a link to a code repository or personal blog where you plan to document your journey (see the section Essential Tools for a journal template that you can easily fork). Knowing that other developers expect to follow your progress on these platforms adds an extra element of accountability to keep you focused on achieving your goals.

### 2. Plan your challenge

You will be more effective in improving as a developer if you create a clear and focused plan prior to taking on the 100 Days of Code challenge. 

Before you begin coding, decide:

* What technologies you want to learn
* What projects you want to complete

Laying out a plan beforehand also helps you focus on coding during the challenge, rather than stressing about picking new projects. Your plan does not need to be overly rigorous and can change at any point during the challenge, but it should clearly state your objectives and a handful of projects that you plan to complete. 

For example, your plan could be:

* Learn how to use GatsbyJS and become more proficient with React
* Build a personal blog with GatsbyJS and React

Your objective should indicate that you have completed a bit of research into your area of focus (e.g. ‘I want to learn how to build websites with GatsbyJS’ is better than ‘I want to learn how to build websites’). The 100 Days of Code challenge is about coding, so the more planning and research you complete before, the more fulfilling and productive your challenge will be. 

For example, if you are building a blog with GatsbyJS, you should read through a few tutorials about React and static site generators before starting the challenge. You should research enough beforehand so that you feel comfortable jumping right into your code editor on the first day of the challenge. 

### 3. Pick the right projects

Writing real code on real projects should be your goal throughout the challenge. 

Time spent on tutorials, online courses, or other similar resources, generally do not count toward fulfilling the requirements of the 100 Days of Code. Tutorials are too passive; try to move from being a consumer to a creator. Learn as you code. 

Work-related coding should also not count toward your hour of code each day. For many full-time developers, finding time to code outside of work can be difficult, but the 100 Days of Code challenge is an opportunity to expand beyond your typical work projects. If you are interested in learning a new technology and have not previously felt that you had the time or motivation to try new things, you should view 100 Days of Code as a way to push yourself outside your comfort zone.

100 Days of Code is a license to experiment as a developer. 

Ideally, you should complete three to five projects during the challenge, depending on how many hours you code per day. Rotating through a few projects can tap into the novelty effect, making you more productive and engaged simply by preventing your mind from stagnating on a single project.

You will need to find a handful of Goldilocks projects: challenging enough that you will stay engaged and create something meaningful to you, yet not so challenging that you quickly descend into a demoralizing state of coding paralysis. 

What these projects look like will vary from developer to developer, but a few key points to remember: 

* Implementing more technologies and frameworks will generally be more complex and challenging. 
* Unfamiliar technologies often have a hidden cost that you should account for when creating a timeline. Do not underestimate the likelihood of unforeseen issues and complexity. 
* More popular frameworks and tools will have better documentation and more example projects for you to explore. Tapping into a strong developer community will save you time and energy.

If you are unsure of how to estimate the time you need to complete a project, try building something similar to an existing project. You can glance at the source code, or related tutorials, to get a better idea of its complexity. The 100 Days of Code does not require you to work on original projects. 

The projects that you choose to tackle should be somewhat related and within the same general domain. For example, if you are focusing on frontend development during your 100 Days of Code challenge, you might choose to build four different React applications. 

The 100 Days of Code challenge is a project-based exercise, so taking the time you find the right projects for you will increase your likelihood of success. 

### 4. Make your projects public

If possible, keep all your projects public. Public projects are subject to greater accountability, especially if you shared your repository or blog with the community before undertaking the challenge. 

At the end of each day, push your code to GitHub (or another public repository hosting service). If you are working through interactive exercises or are working on a project that can not be pushed to GitHub, commit and push changes to your journal (see the next section Keep a journal for more detail). Pushing or publishing something each day reinforces your daily habits and keeps you accountable to showing consistent progress—no hiding behind local changes or trying to backdate coding sessions.  

Keeping your projects public also simplifies your journal and helps you engage with the community. You can more easily discuss projects if other developers are able to explore them as well. Try to fight the urge to mark projects as private simply because they are unfinished; being open about your development process can make you a more collaborative, community-oriented developer. 

Furthermore, public projects are easier to showcase should you decide to build a portfolio of your projects in the future. Potential employers, friends, and colleagues can better understand your interests and skills as a developer when your work is easily viewable. 

### 5. Keep a journal

Start a journal and create an open GitHub repository or blog where other developers can follow your work. 

In your journal, give a brief description of your progress each day. A short paragraph or a handful of bullet points can cover the tasks that you completed. Make sure to discuss your successes, as well as your challenges and frustrations, to foster a stronger sense of community with others who are also working through the challenge. 

Your journal can be as formal or as informal as you see fit. Some developers may opt to write lengthy blog posts, while others only maintain a quick set of bullet points each day. The most effective method is likely a combination of both styles: keep most daily updates brief, but take time each weekend (or another less busy time of your week) to write a longer, more thorough reflection of your week. Using a hybrid reflection strategy will ensure you do not feel overly burdened by your journal, yet encourages you to take adequate time to think deeply about your progress.

Above all else, the most important requirement is to write something every day. 

Journaling will also help you build momentum. By visualizing your progress and keeping a historical log of all your accomplishments, you constantly inspire and motivate yourself to continue through the challenge. 

Check out the *Essential Tools* section at the end of this guide for a template GitHub repository for your journal. 

### 6. Track your coding

Keeping a journal is a great step to share your experiences as your code, but adding quantified measurements to your 100 days of code can add extra motivation and accountability. 

You can use a simple timer to ensure that you code for at least an hour every day. If you tend to code for more than an hour, tracking your coding will help you understand more about what projects you have worked on the most. Based on the number of hours you spent on each project, you can gain insights into project complexity and skill development. 

Tracking can also reveal how your coding habits evolved during the challenge. Do you prefer to code in the morning, afternoon, or evening? Do you code more the weekend or on weekdays? You will likely spend the first few weeks of the 100 Days of Code challenge optimizing your routine. After experimenting with different strategies, you will soon have a clearer picture of how to organize your schedule so that you can code more consistently. 

### 7. Do not skip days

Skipping days sets a dangerous precedent and will undo much of the discipline and motivation required to complete the challenge. Try your best to not skip any days. 

If you miss a single day every few weeks due to unforeseen circumstances or unavoidable challenges, do not stress. Simply add the missed days to the end of the challenge and continue coding as soon as possible. 

Most importantly, do not skip two days in a row, as you will be more likely to slip into bad habits. The faster you return to your coding habits, the better odds you will have of long-term success.

### 8. Set a Reasonable Pace

The threat of burnout is usually the most difficult part of the 100 Days of Code challenge. Trying to sustain a new habit for three consecutive months requires discipline and planning to prevent demotivation. 

Much like a typical hype cycle, your enthusiasm for the challenge will face a noticeable trough of disillusionment when you are most likely to quit. As you push through days of low enthusiasm, the value in building a strong habit—and seeing it pay off—begins to take effect. As time goes on, the stakes get higher, too. Breaking a coding streak on Day 99 is more difficult than breaking a streak on Day 25. 

With such lulls and spikes in motivation, you need to be especially deliberate in setting a consistent and reasonable pace. Pacing is the key to maintaining engagement throughout the 100 Days of Code challenge and ensuring you do not overcommit yourself

Newcomers to the 100 Days of Code challenge sometimes experience burnout by coding far more than the minimum during the first weeks before tapering off and quitting the challenge. 

Burnout is the result of spending too much enthusiasm too quickly before the long-term benefits begin to materialize. 

To avoid burnout, start the challenge by coding for the minimum one hour each day. Stop coding each day with an exciting task planned for tomorrow. Once you have a better understanding of how the challenge is progressing, you can incrementally add more time to code each day if you feel you want to code more.

### 9. Engage with the community

While the 100 Days of Code challenge is an individual challenge, you should view yourself as a member of a larger community of other passionate developers. 

Your journal might motivate others to learn to code. Your projects might inspire a colleague to join the challenge. Your words of encouragement on Twitter might help someone work through a challenging problem. 

Strive to be an active member of the community by encouraging at least two other people each day who are also doing the challenge. If you are not comfortable interacting with other developers just yet, start by tweeting your progress daily or weekly with the #100DaysOfCode hashtag.

A strong community also poses new challenges to your coding journey. In any large movement, you will likely be tempted to compare yourself to others. The 100 Days of Code challenge attracts developers from all backgrounds and skill levels; the complexity of projects created during the challenge will vary greatly from one developer to another. Work on projects that are challenging for you, knowing that 100 Days of Code is about improvement—a rate of change—and not about skill—an absolute measurement. To be a strong community member, you should support other developers who are at a different skill level than you and are likely facing a different set of challenges. 

Help build a community that you are proud to be a part of and encourage others to be respectful and supportive. 

### 10. Reflect

At the end of the challenge, you should take time to fully reflect on your journey. Over 100 days, you will learn many new things and work on many different projects, so summarizing your challenge will memorialize your progress for you to revisit at any point.  

You can build a portfolio for people who visit your website or GitHub profile as a way to show the skills you have developed. Even a simple Markdown file with links to your projects or a website built with a template on GitHub Pages is an easy way to centralize your work. 

You should also write a retrospective blog post or journal entry detailing the successes and challenges of your 100 days of code, so that you may better prepare for more challenges in the future and give back to the next class of developers that are just beginning the challenge. 

### 11. Do multiple rounds

Once you finish your first 100 Days of Code challenge, you can start planning your second round of the challenge.

While you should take a few days off in between rounds to reflect and plan, continuing with another round of the 100 Days of Code challenge can maintain your momentum and consistency. 

Each successive round is an opportunity to learn new technologies, build a portfolio, and tackle new projects. If you need to, you can adjust the challenge for the next round to work better for your lifestyle, either changing the minimum time required per day or the number of days of the week you plan to code. Once you begin the challenge again, share what round and day you are on by using the format R#D# (e.g. R2D3 is the third day of the second round). 

As you progress through each round, you can begin to compare your rounds and experiment with different working styles. Do you code best in the morning or evening? Do you struggle to code on certain days of the week? Is an hour per day enough to get into flow? 

As you analyze your data each round, you begin to learn how you can be most efficient and productive as a developer. While the first round of the 100 Days of Code sets the foundation for strong developer habits, every round thereafter will help you fine tune these habits to reach your developer potential. 

### 12. Do Not Be Afraid to Fail

Many developers do not succeed in finishing the 100 Days of Code challenge. Like any habit-in-progress, the challenge requires an incredible amount of dedication, motivation, and discipline. With enough practice, however, any coding challenge is doable. 

If 100 days seems daunting or unattainable, know that the process can be iterative. If you only code for 25 consecutive days before breaking your streak, stop and reflect on the challenges that you faced and how you might improve. Start the challenge again, but with a new goal to code for 50 consecutive days. Each failure is an opportunity to restart the challenge and revise your strategy until you are able to form a consistent coding habit. 

The goal of the 100 Days of Code challenge is to become a better developer; learning from failure and taking risks are often the most important steps of the process. 

## Essential Resources

![Resources for the 100 Days of Code Challenge](https://thepracticaldev.s3.amazonaws.com/i/ws4ing0sbdkqoprs4eqe.png)

If you are thinking about taking on the 100 Days of Code challenge, you should prepare yourself beforehand by gathering together important resources, joining the community, and reading about others’ experiences. 

### Communities

As thousands of developers around the world take the 100 Days of Code Challenge, a network of communities has sprung up across the web. You should join these communities and see what you can learn from your fellow developers. 

* Gitter: [100 Days of Code Gitter](https://gitter.im/Kallaway/100DaysOfCode)
* Slack: [#100DaysOfCode Slack](https://join.slack.com/t/100xcode/shared_invite/enQtNTk0MzA1MDcyMDMzLTZhMDdlZDZhYTExYTM1ZTY1NWIxZjVhZjEwYjdhMjQ3YzE4MGMyYjMxMWMwMTY0YTJlYWU4ZGM5NDYyMmNjOGE)
* Discord: [#100DaysOfCode Discord](https://discordapp.com/invite/x7TGGTG)
* Twitter: [100 Days of Code Twitter](https://twitter.com/_100DaysOfCode)

Many new developers also enjoy using FreeCodeCamp, a nonprofit organization working to make development accessible to everyone. [FreeCodeCamp News](https://www.freecodecamp.org/news/) is a great resource for tutorials, development advice, and motivational articles. 

[Dev.to](https://dev.to/) is another popular platform for developers to share resources and discuss important news in the software development world. Dev.to is a great place to showcase your work and give back to the community. All developers are welcome to post articles, so if you are hoping to write a brief tutorial highlighting your skills you learned during the 100 Days of Code challenge, Dev.to is a great platform. 

### Articles and Podcasts

The 100 Days of Code challenge was created by Alexander Kallaway, a developer who has led the creation and expansion of the challenge throughout the developer community. You can learn more about Kallaway’s thoughts on habit formation, resistance, and consistency with these articles and podcasts. 

* [#100DaysOfCode Official Website](https://www.100daysofcode.com)
* [Join the #100DaysOfCode](https://www.freecodecamp.org/news/join-the-100daysofcode-556ddb4579e4/)
* [Take the #100DaysOfCode Challenge. It’s the fastest way to form a coding habit](https://www.freecodecamp.org/news/take-the-100daysofcode-challenge-make-coding-a-habit-4a655d8663fd/).
* [Improve with the #100DaysOfCode Movement: Rounds, Resistance, and Adaptation](https://www.freecodecamp.org/news/the-100daysofcode-movement-rounds-resistance-and-adaptation-432429cc3306/)
* [Resistance, Habit Change and the #100DaysOfCode Movement](https://studywebdevelopment.com/100-days-of-code.html)
* CodeNewbie Podcast [Ep. 120 "100 Days of Code"](https://www.codenewbie.org/podcast/100-days-of-code)
* Learn To Code With Me Podcast [S3E7: Coding Daily Through #100DaysOfCode With Alexander Kallaway](https://learntocodewith.me/podcast/100-days-of-code-with-alexander-kallaway/)

### Inspiration

As journaling is a highly recommended best practice for the 100 Days of Code challenge, many developers have written about their previous experiences that you can use to learn and prepare. Check out a few of the inspirational and honest discussions about the 100 Days of Code. 

* [#100DaysOfCode Challenge: Completed](https://medium.com/@brittanyrw/100-days-of-code-challenge-completed-bbce87f04c00) by Brittany Walker
* [My #100DaysofCode Experience — The Good, The Bad and The Ugly](https://code.likeagirl.io/my-100daysofcode-experience-the-good-the-bad-and-the-ugly-ee1263131f15) by Egwuenu Gift
* [How to Transform Your #100DaysOfCode Log Into a Visual Experience](https://medium.freecodecamp.org/how-to-transform-your-100daysofcode-log-into-a-visual-experience-d048334af8d9) by Joe Warren
* [Why you should start the new year with #100DaysOfCode](https://medium.com/@francesco.agnoletto/why-you-should-start-the-new-year-with-100daysofcode-a5d4517fb8e6) by Francesco Agnoletto

## Essential Tools

![Tools for the 100 Days of Code Challenge](https://thepracticaldev.s3.amazonaws.com/i/ummy2lp0uwxzlo7wes0l.png)

To complete the 100 Days of Code challenge, a computer and a code editor are the only two necessities. Of course, adding a few more tools to your toolbox can increase your chances of success and help you learn the most during your 100 days. Three additional tools that make your 100 Days of Code even better:

* **Journal**: Pick a medium to capture your thoughts during the 100 Days of Code challenge. You can create a blog, repository, or document to keep track of your progress. Kallaway, the creator of the 100 Days of Code challenge, created a journal template [100-days-of-code](https://github.com/kallaway/100-days-of-code). Software also created a clean and easy-to-use [template](https://github.com/geoffstevens8/100-days-of-code) based on some of the best practices in this guide that any developer can quickly deploy. 
* **Timer** or tracker: Find a tool that can track how much you code each day so that you can ensure you code for at least an hour per day. You can use a simple stopwatch or you can opt for a more robust tracker that keeps a historical log of your coding time to see your progress over time. 
* **Project manager**: You will need to juggle a lot of tasks, so find a tool that can help you regain context quickly and make the most of your hour each day. 

For developers that prefer Visual Studio Code, Software recommends our [100 Days of Code extension](https://www.software.com/100-days-of-code). With the 100 Days of Code extension, you can track your progress, collect milestones, share your achievements, and build your coding dashboard. We hope it makes your experience a little easier (and more fun too!). 

<figure>
<img src="https://dev-to-uploads.s3.amazonaws.com/i/0j3l4ji1y01prydtp20p.png" alt="Software 100 Days of Code extension">
<figcaption>Software's <a href="https://marketplace.visualstudio.com/vscode">100 Days of Code extension</a></figcaption>
</figure>

If you want an even more robust toolbox for Visual Studio Code, try the [100 Days of Code extension pack](https://marketplace.visualstudio.com/items?itemName=thegeoffstevens.100-days-of-code-pack). The pack includes:

* [Code Time](https://www.software.com/code-time): Software’s free code tracking tool. During your 100 Days of Code, Code Time will track how much you code each day and what projects you work on. Each week a coding heatmap will be automatically created to show you when during each day you code. 
* [Pomodoro](https://marketplace.visualstudio.com/items?itemName=cosminalco.pomodoro): The 100 Days of Code challenge does not require many hours of coding each day, but it does require focused coding. A Pomodoro timer in your code editor can break up your coding time into manageable sessions to help you be more productive. 
* [Simple Timer](https://marketplace.visualstudio.com/items?itemName=burkeholland.simple-timer): A simple timer in the Status Bar of your code editor that will count down from a predetermined amount of time. 
* [Project Manager](https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager): Add a shortcut to the Activity Bar so you can quickly open projects and navigate between different folders. 
* [Todo Tree](https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree): If you are only coding for an hour per day, you can more easily lose context when trying to juggle your career or other obligations. Todo Tree is a quick way to regain context when you open your projects for the 100 Days of Code challenge each day. Todo Tree compiles TODO and FIXME comments from your code into an easily traversable interface. 
* [Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one): As you write in your journal during the challenge, Markdown All in One will help format your Markdown files. If you want to stylize your Markdown previews to match GitHub, you can try installing [Markdown Preview GitHub Styling](https://marketplace.visualstudio.com/items?itemName=bierner.markdown-preview-github-styles) as well. 

## What's Next?

![What to do after the 100 Days of Code Challenge](https://thepracticaldev.s3.amazonaws.com/i/35ndcxajstjb416p7hek.jpg)

The 100 Days of Code challenge is the first step in becoming a better, more consistent developer.

Self-quantification and self-tracking are important tools for self-improvement. As you consider other habits in your life, and the importance of consistency and flow, you should find other tools and resources to help you. 

If you felt that the challenge helped you form strong and healthy habits, you can use a similar challenge format to achieve other goals. Called the [100 Days of X](https://www.100daysofx.com/) challenge, this repeatable format can be replicated with any habitual task. The official 100 Days of X website lists a few challenges you can try, including writing, reading, cooking, meditation, and more. 

The 100 Days of Code is a fun and engaging way to tackle your goals and grow as a developer. What will your journey be? 

![Good luck from the Software team](https://thepracticaldev.s3.amazonaws.com/i/zm0lkkhxzoq50ghebdzu.png)