It's been three years since I joined the competitive industry of software development, building products full-time. Including my freelance and contract-based projects in college, five years, tops.
I was fortunate to join companies that operate at a different scale, from startups, SMEs to public companies of various industries, while managing to balance my personal life with work and the developer community.
In between, I also tried 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 in line with my interest in the arts. I designed posters, logos, and websites for clients. I sold some t-shirts too! Later on, 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.
The rest is history.
Side projects helped me find my interests, gain experience, and align my path in software development.
I get to build software for clients, schools, and the government back in college. Currently, 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
Show, don't tell.
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, 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, 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 the last thing I want to be in my life. I didn't have the confidence and the technical know-how to present well, and I ended up messing up a few of my presentations when I was starting.
To build your confidence in communication, you have to invest the effort in preparation and research for things you're not comfortable doing. Practice and apply what you know or 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. Currently, I give conference talks, 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, 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 failed 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 becoming aware of your long-term career goal and have the system in place for you 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.
There are a ton of articles comparing 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 how to have these qualities, on top of getting good at what you do best.
Some tips to 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 are only a few Android and iOS developer opportunities. Now they're one of the most in-demand jobs.
- In the last five years, data science job opportunities have increased from 5% to 38%.
- Three years ago, there is little to no demand for a Flutter developer role before Flutter 1.0 got released.
- Just a year ago, COVID-19 has 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 come across 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 super 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 that you might want to be aware of is taking risks. And I don't mean saying yes to everything, but rather knowing when to say either yes or no.
From experience, there is no maybe, it only implies you that are not ready to take new responsibility, 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'm 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 all I can say is it's worth it after all. 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 somehow ready, not because you need to make a call out of a whim.
There are days where 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 are the areas I focused on that 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 👋
Til' next time.