It's been a few years since I started working as a professional software developer. I was lucky enough to join companies that operate at a different scale – from startups and SMEs to public companies. All while balancing my personal life with work and the developer community.
In between, I tried several times and failed a lot.
Here are the key areas I find important to focus on in life as a software developer looking for personal growth:
1. Side projects
Side projects help you gain experience
Side projects can be anything. Whether it's in the interest of learning something new or looking for extra income, side projects will help you understand what you want to do outside regular office or class hours.
Long ago, I started doing side projects aligned with my interest in the arts. I designed posters, logos, and websites for clients. I sold some t-shirts too! Later, I learned how to program, tinkered with Android Custom ROMs, and built a few apps.
After saving enough money, I bought myself a 13" Macbook Air — paid in installments! I learned to let go of my beat-up 2004 IBM T42 and use modern tools to solve real-world problems.
Side projects helped me find my interests, gain experience, and align my path in software development.
Back in college, I get to build software for clients, schools, and the government. I work as a software consultant and a technical writer (US & UK) as a side hustle, on top of my full-time work in the US.
Side projects help you build a portfolio
I have compiled some of my projects on deguzman.dev. A portfolio is like an online resume, but it's more than that. It tells a story about who you are and what you do.
Having a portfolio allowed me to land jobs and get offers from startup founders and recruiters from reputable tech companies globally.
Some interesting side projects to look at
Websites or apps
- Find a problem, and check if it can be solved by building websites or apps
- Work part-time to gain experience using different technologies or new frameworks
- Contribute to open-source projects
- Create example apps, SDKs, or libraries
Data structure and algorithms
- Solve LeetCode problems daily or weekly
- Learn data structure and algorithms by creating visualization charts using a UI framework and a programming language of your choice
- Join hackathons in your local area or online
- Learn Google Technologies like Cloud, Machine Learning, and Flutter on codelabs
- Write blogs or technical articles
- Participate in community challenges like UI challenges, 100 Days of Flutter
- Volunteer for a tech community of your interest
2. Communication skills
Practice and build your confidence
If you asked me before, becoming a public speaker is probably my last goal. I didn't have the confidence and the technical know-how to present well, and I messed up a few of my presentations when I was starting.
To build your confidence in communication, you must invest effort in preparation and research for things you're uncomfortable doing. Practice and apply what you know or have just learned. Then, get constructive feedback from your peers or audience. Finally, get better at doing it the next time.
I learned it the hard way, but it was a great experience. I give conference talks and conduct workshops at least ten times a year, and I'm still learning a thing or two.
Communication is crucial in software development
One of the responsibilities of a good software developer is to simplify and communicate complex ideas in a way that is understandable by stakeholders and clients, especially non-technical personnel.
Communicate clearly with your clients or team, and ask clarifying questions or feedback.
You don't want a faulty code left hanging in a sprint or ship a buggy feature and disrupt the user experience of 5M+ users in companies that operate on a global scale.
Communicate clearly in interviews
Communication is also crucial during a technical interview. This process requires some understanding of how you work and what your thought process is.
I have been both interviewee and an interviewer myself, and I have witnessed firsthand how someone can fail to get the job even if he has a solid resume and technical know-how but fails to communicate his ideas.
Prepare for your job interviews ahead of time, don't lie, and just be yourself.
Some tips to improve your communication skills
- Research, practice, get some feedback, practice, and speak with confidence
- Read books and expand your vocabulary
- Practice active listening
- Control your emotions and manage your stress
- Watch others do technical interviews at interviewing.io
3. Maximize Your Impact
Adopt the right mindset
The most effective engineers — the ones who have risen to become distinguished engineers and leaders at their companies — can produce 10 times the impact of other engineers, but they're not working 10 times the hours. ~ Edmond Lau, The Effective Engineer
I am by no means a distinguished engineer at a large company. But I find it helpful for software developers, including junior developers, to start preparing themselves, become a leader in their companies and maximize their impact.
The key is to become aware of your long-term career goal and have the system in place to achieve it.
Be proactive at work
If you're starting your career as a software developer, be proactive. Spend some time for you to understand the codebase of your project. Observe how your team works, then adapt or suggest new ideas for improvements.
Get feedback from your team managers or senior developers from other teams.
Many articles compare senior and junior developers like this and this. But the statement that struck me the most is that a senior developer knows the full scope of a project and can assign tasks effectively. If you want to be a senior developer, be proactive in learning to have these qualities on top of getting good at what you do best.
Some tips for maximizing impact
- Invest in active learning
- Measure, validate, then improve
- Get constructive feedback
- Read books, start on this or this
4. Continuous Improvement
Be ready for the changes
There has been a significant trend of written articles and papers surfacing on the internet about the Fourth Industrial Revolution.
The fourth industrial revolution focuses on the applications of technology to augment the lives of everyone. It started with companies using modern industrial practices and deploying advanced systems like robots and automation to streamline manufacturing and increase productivity.
My point? Change is inevitable.
- In the last decade, there have been only a few Android and iOS developer opportunities. Now they're one of the most in-demand jobs.
- Data science job opportunities have increased from 5% to 38% in the last five years.
- Three years ago, there was little to no demand for a Flutter developer role before Flutter 1.0 got released.
- Just a year ago, COVID-19 shaped the future of work.
Mastering a few core and modern technologies for years is helpful when you apply for a technical lead or senior role. But, you should always be open and adaptable to learn technologies or tools outside your area of expertise to stay current.
Focus on yourself, do not compare
I've recently seen this video by @marktechson on Twitter - a good one!
"Comparison is Weird" ~ Mark Techson
Stay intentional and get things done
For the past 380 days, I have been journaling and reflecting on how my days went by. I barely remember most of it, but thanks to Notion for acting as my second brain, I get reminded of what has happened and where I can improve.
Forget planning and scheduling every minute of your life unless you are as busy as Elon Musk. Instead, make time for one highlight every day.
Some things you can do
- Make time to learn new technologies
- Work on side projects
- Read books and research papers
- Join meetups, webinars, and conferences
- Get certified for what you do
5. Taking Risks
Learn when to say "yes" or "no"
The last key area you might want to be aware of is taking risks. And I don't mean saying yes to everything but knowing when to say either yes or no.
From experience, there is no maybe, it only implies that you are not ready to take on new responsibilities, and often it's better to say no.
There are opportunities out there for freelance or contract-based work as a side hustle, but you should also consider that you only have limited time in a day and energy to use. Circling back on #4, stay intentional with what you want or need to do and how you would like to spend or end a day in your life.
Be somehow ready, then take the risk (or not)
Last year, I was lucky I still have a good-paying job back at Freelancer.com amidst the COVID-19 pandemic. But, I found myself preparing for the next step in my career, applying for roles that use the technologies I love. I got a new job - my first time working in a startup!
It was a risk joining the startup, but I can only say it's worth it. I now lead the engineering efforts in mobile and have more impact on what I do. It also opened my eye to how the financial system works in the US and how difficult it is to build a digital bank from scratch.
Often, you might feel anxious and tempted at the same time when making decisions. Do not let your emotions run in your head. Stay rational and weigh the different factors, the good and bad ones, then make the call.
It is better to take a risk when you're ready, not because you need to call out on a whim.
There were days when I felt like I was not moving too fast and the other way around. I learned to accept that life is not a race but a journey that everyone should enjoy every waking moment.
These areas I focused on helped me get to where I am today. It may not work for everyone, but I hope you've learned some insights on how to live life more intentionally and grow as a software developer or in any walk of life.
If you have suggestions or questions, feel free to comment or send me a message at firstname.lastname@example.org 👋