Growing as a Developer
Introduction
I love being a software developer. Each job I’ve had has given me opportunities to learn, grow, and tackle new and interesting projects. I love being part of a team — Designers, InfoSec, Marketing, Engineers, Managers — all working together to build something no single person could create alone. I love the feedback and push back from other engineers on ideas and technology decisions. Exposure to tech and methods that only make sense at scale while still being able to focus deeply on some small part of a bigger machine.
Being around so many competent people can make you believe you know more than you really do. The same way we generally feel we know how a car works. We step on the gas, brakes, turn the wheel and we end up safely at our destination, unaware of all the complexities required to make it all happen. And if something goes wrong with our vehicle we simply call someone to fix it. I see work as a modern-day high-tech BMW. I may never understand all the complexities that make it work, but I can get a small taste of it by buying an old tractor and try to keep it running.
Expanding My Awareness
Side projects give me the “tractor experience” and a deeper appreciation for modern software development at scale. To explore tools and languages I don’t touch at work. Force me to learn all the “other” things that I only think I know. “Sure I can create an online Stripe checkout system in about 10 minutes”, “Manage a cluster of Postgres databases”, “Create a CI/CD pipeline from scratch, and drive tons of traffic to my online product.” [spoilers: No I couldn’t]
I heard it said that you can’t learn to swim without eventually getting wet. Working on side projects is my way of getting into the water and see if any of those books I read is going to keep me afloat. I have found there is a big differences between reading a Rust book on game development and actually building out a multi-player game online.
Even though I have over 5 years experience within the Elixir ecosystem, side projects push me into places I don’t touch at work. In the last few months I’ve worked with Elixir libraries for image processing, Stripe payments, and got to go deep into the newest version of LiveView. All of those experiences directly benefit how I approach current challenges at work.
Beyond Technology
At work I never have to worry about how to get new clients or what to price something. I don’t directly design pages or make pricing decisions on servers, etc. I don’t necessarily see how the work I am doing in Elixir day to day contributes to those ends. Working on side projects gives me a glimpse and deepens my appreciation for those that have to do it scale with high stakes every day.
I don’t know how to do most things to turn an idea into a product that someone else will want to use. I have technical gaps, marketing gaps, design gaps, energy gaps, etc. I see each gap as an opportunity to widen my experiences and learn through failure, iteration, and feedback. Learning how to learn in different domains is a skill I continue to grow and enjoy
Learnings So Far
Real side projects give me room to experiment, fail, and learn fast. They let me explore both new and old technologies in real-world situations where the stakes are just enough to matter.
Dual Benefits
For me, work and side projects complement each other. My job challenges me with scale, collaboration, and depth. My side projects fuel my creativity and curiosity. Together, they make me more energized, motivated, and grateful for both. I look forward to Mondays when I can dive back into big projects with a great team — and to weekends, when I can bump my head on something new and make progress on my side project(s).
Do What You Can With What You’ve Got
Just start. You don’t need a groundbreaking idea. Pick something that is at least a little interesting to you. Worried there are already 20 other products/services like it? Perfect. That just means people already understand the problem and the value of a solution. Just build something boring and you will learn a lot about how much of what you thought you knew, you really don’t know.
Get Your Reps In
Epictetus says “Don’t show me your weights, show me your shoulders.” For developers that means show me what you created, don’t show me what code snippets you typed by following the examples in a book (necessary to learning, but not the real goal). Put your new learning to practice as soon as possible. Learn what didn’t work and why and apply those learning to your next iteration.
I have heard that Mr Beast tells aspiring YouTubers to make 100 videos and he’ll give them feedback and advice. Apparently 98% never get close to 100 and the remaining 2% no longer need his help. Get your reps in.
Building Alone Can Still Be Social
Surprisingly building side projects alone has led to some great social experiences. I’ve even made some great new friends directly as a result of building something new. Putting a project into the world puts you into uncomfortable situations where people notice, encourage, and want to help you. Most people seem to love cheering on people who are giving an effort.
Build in public, let others know what you’re working on, and you’ll be surprised where it leads.
Call Your Shot
Calling my shot is something I do multiple times a week, and I am still learning Hofstadter’s Law (Things take longer than expected, even when taking into account Hofstadter’s Law).
Set a deadline based on how much effort you think something will take against the available time you think you have. If you haven’t done this often, you are in for a surprise. Setting a deadline like this removes the excuses your mind usually makes on why something still isn’t done. It helps us remember that we seldom know everything we need to know to perform something anything more than trivial. It is also a good reminder at work when we think we are 90% done with a big project only to eventually realize we were really just 1/2 way through.
Conclusion
Side projects are becoming my personal training ground — a place to make mistakes, stretch my skills, gain new experiences, and accelerate my rate of growth. I am becoming a more seasoned and well-rounded developer, with a much wider understanding and humility towards the complexities that surround me. I am also much better at brushing myself off after a failure and getting back to work.
I encourage you to experiment putting something new in the world. Start small, be curious, and see where it leads.