As developers, we constantly need to learn new skills. I find projects are a great way to do this, but making time for them with a full-time job can be challenging. This is how I’ve built project-based learning into my daily workflow.
The best way to fully learn and understand a new tool is by using multiple resources. I use PBL after going through an online course and reading about the technology. The main benefit of a project-based approach is that you have to figure out how to overcome problems yourself. You don’t get the solutions. You also learn how to search for methods and solutions on Google or stack overflow—a real skill.
Projects can also help in landing jobs. If the source code is made public, hiring managers can see you’re a passionate developer who goes the extra mile for learning.
When I decided to learn React and move to frontend development, I built a Burger builder that helped me understand how React worked on a deeper level and added to the foundational knowledge I had from a React course. I did this while working full-time as a Java developer and had to think carefully about how I managed my time to fit learning in while also working. If you’re looking to do the same, here are some tips that worked for me.
Create dedicated project time
Use optimal focus time
I reserve a specific time to invest in my projects: 8 am every day before work. I’m able to focus more in the morning before work meetings start. Using the hour before work means I am more focused and less distracted.
Spend less time on distractions
If you don’t have time before work, you can probably carve out an extra hour each day by eliminating unnecessary distractions. I used a browser extension to track how much time I spent on social media and reading the news. I realised I could spend 30-60 minutes working on projects instead. To reduce all possible distractions, I stopped all notifications to my computer and phone. This means I don’t check my phone every time a notification is received, but only once an hour.
Use unproductive time
Over the years, I found many pockets of time that are “dead” and unproductive. For example, I used to work on a project where the build plus deploy time was around half an hour. Every change took more than 30 minutes to be visible in the environment. This meant I could switch to working on something else in that waiting period.
Another “dead” time is waiting for code review. Often I found myself waiting for the code review of a pull request. Because it was the foundation for something else, I couldn’t continue without it. That waiting time is valuable and can be used more productively.
Focus on a real-life need as a forcing function
The biggest challenge with reframing waiting time as productive time is the ability to context-switch. My solutions to this have been to find projects that keep me motivated.
I find that a real-life need is an excellent forcing function to get projects done. One example of a real-life need was a library management tool. I found myself in situations where I was losing track of who had borrowed my books. I needed a solution to track where my books were and to send reminder emails to friends when the books needed to be returned. My need to track and have my books returned forced me to work on the library manager tool in my spare time.
If context-switching is difficult and doing deep work in “dead” time isn’t feasible, you could use these little time slots for something light like reading documentation or discussing project ideas with colleagues.
Combine learning with your work
Another method for integrating project-based learning into your daily workflow is to build something using the technology you want to learn for your day job.
When I started learning Node.js on a deeper level, I wanted to build something small to have a project to work on and apply my skills. Since I was working with Node.js in my day-to-day job, I was able to tell my manager that I wanted to invest some time in my Node.js knowledge and started working on a CSV parser. I created a tool to parse a CSV file and extract data from it.
The tool was unrelated to my job—it was a personal project. The job benefit was in terms of knowledge, not the end product. I built the parser during working time because the skills I learned doing it—different ways of reading a file, using a stream and keeping data in memory—were transferable to my day job.
Of course, this method only works for learning something which can be used in your daily job, unless your company has a different policy on personal development. For career changes, a dedicated and separate time slot works best.
By applying these tips, I am more disciplined in my learning because I set aside time for it and can learn new technologies more deeply because I refine my skills with projects.
Parkinson’s Law states that work expands to fill the time allotted for completion. If we spend three or four hours each week on a project, at the end of one year, we’ve invested 170 hours in learning. Learning should never stop; as you can see, there’s no such thing as “I don’t have time”.
If you're interested in project-based learning, you might also enjoy:
Adrian Muntean is a passionate full stack developer in the whole JavaScript ecosystem - as well as other technologies. He loves being up to date with the tech world and trying out new trends. He’s involved in the local community in an attempt to share the knowledge and help others.