In the ever-evolving realm of software development, I’ve spent a captivating 15 years — a journey marked by triumphs, challenges, and a ceaseless learning curve. It’s a path I’ve trodden alongside some incredibly gifted minds, gleaning wisdom from their experiences and adding to my own repository of knowledge. Today, I want to unwrap that treasure trove and present to you pearls of wisdom, both technical and life-oriented, that have not only enriched my professional journey but have also added layers to my personal growth.
- Continuous Learning: The tech world is ever-evolving, and staying updated is not just an option, but a necessity. Carve out time regularly to learn new languages, tools, or methodologies.
- Quality Over Quantity: Writing ten lines of clean, efficient code is better than fifty lines of cluttered, confusing code. Aim for clarity and simplicity.
- Peer Reviews: No matter how seasoned you are, always be open to feedback. Peer reviews often unearth overlooked mistakes and provide a fresh perspective.
- Work-Life Balance: This isn’t just a trendy term. Taking breaks, indulging in hobbies, and ensuring adequate rest can boost productivity and foster creativity.
- Soft Skills Matter: Technical expertise is essential, but so is the ability to communicate your ideas clearly, collaborate with a team, and empathize with users’ needs.
- Celebrate Small Wins: Every bug you resolve, every piece of code you optimize, and every feature you develop is a victory. Celebrate them.
- Stay Curious: The ‘why’ behind a problem can lead to the best solution. Dive deep, ask questions, and be inquisitive about how things work and how they can work better.
- Adaptability: The tech landscape shifts rapidly. Flexibility and adaptability are keys to survival. Embrace change, even if it nudges you out of your comfort zone.
- Networking: Engaging with a community can provide support, open doors to opportunities, and keep you informed about the latest industry trends.
- Take Care of Your Health: A sound mind resides in a sound body. Regular exercise, a balanced diet, and mindfulness practices can help keep stress at bay and keep you at your optimum.
Every glitch I encountered and every debug session at 2 a.m. has taught me something valuable. And while I wish I had known some of these things earlier, the journey of discovery has been profoundly enriching. My hope is that by unveiling these lessons, you can harness them to propel your journey in software development to newer heights, without having to stumble where I did. Happy coding!
1. Find a place you enjoy working in or at
The environment we surround ourselves with is like a silent partner in our lives. It has the power to either lift us up or drag us down, to inspire us or leave us feeling drained. Finding the “right” environment is a highly personal journey, and it’s a quest that can significantly impact our well-being and productivity.
For some, “right” may mean a cozy, familiar space that feels like a warm hug. It’s where they can work comfortably, surrounded by personal mementos and soothing colors. It’s a place that invites creativity and eases the stress of the daily grind.
Others may seek an environment that fuels their focus and concentration. This is the space where distractions are banished, where the world outside fades into the background, and where they can immerse themselves in deep, uninterrupted work. It’s a place of solitude and silence.
“Right” might also lead to places of change, where the scenery shifts with every whim. It’s the corner booth at a quiet cafe, the park bench under a spreading tree, the bustling hum of a small bar. These places offer a sense of connection, just enough background noise to stimulate creativity, and a dash of sociability to keep things interesting.
In essence, the “right” environment is a reflection of your unique needs, your work style, and your personal comfort. It’s the space where you feel in your element, where you can give your best and be your best. So, what does “right” mean to you? It’s a question only you can answer, but once you find it, your environment can become your most reliable ally on your life’s journey.
2. Invest in your hardware
As software developers, we’re masters of code, creators of digital wonders. But our creative sanctuaries extend beyond lines of code. The hardware we choose to work with can turn our daily grind into a delightful symphony of productivity and comfort. Here’s a little magic to breathe life into your hardware choices:
The Throne of Code: Your chair isn’t just a chair; it’s your trusty steed in the vast digital realm. It cradles you as you script your digital spells, and if it’s worthy, it will keep your posture noble. Imagine a chair that adjusts to your every whim, supporting your spine like a loyal squire. Your Secretlab Titan Evo, adorned with the emblem of Batman, is your throne.
The Keyboard’s Song: Your keyboard is your musical instrument, every key a note in your symphony of code. Mechanical or low profile, wired or wireless, it should be an extension of your very fingers. Imagine a keyboard that knows your every keypress, a Moonlander Mark 1 with Cherry Brown switches, an ergonomic masterpiece. It has healed your wrists and shoulders, and the sound of its keys is a sonnet.
The Art of Navigation: The mouse, your loyal sidekick, helps you traverse the digital wilderness. It may be lightweight or ergonomic, but it dances to your every whim. ZLOT Vertical Gaming Mouse, an instrument of precision, is your guiding star, swift and responsive.
A Canvas of Possibilities: The monitor, your canvas, showcases your digital art. A 35″ Sceptre Curved Monitor brings your creations to life, providing ample space for your visions to flourish.
The Symphony of Silence: Your headphones, your sanctuary. They shield you from distractions and usher you into the realm of deep focus. Beats Fit Pro, your companions, embrace your ears with comfort, allowing you to code for hours on end without missing a beat.
In this enchanted realm of software development, every piece of hardware is a magical tool, contributing to your epic. The “right” hardware is a reflection of your unique preferences and needs, making your coding journey not just productive, but a grand adventure. So, what hardware do you use, and what is your dream hardware? Share your tale, for in this digital kingdom, each developer’s story is woven into the grand tapestry of technology.
3. Find tools you enjoy working with
Developers, in addition to their hardware, heavily rely on various software tools to effectively perform their tasks. While some tools are non-negotiable, there are numerous options available that allow for personalization, and the joy of using these can significantly enhance your daily work experience. Even the ability to customize a tool to suit your preferences can have a positive impact.
It’s important to emphasize that the goal isn’t to find tools that are universally adopted because of their extensive features. Instead, it’s about discovering tools that genuinely resonate with you, tools that you eagerly anticipate using, and, most importantly, tools that get the job done efficiently. Even if these tools lack some of the advanced features found in others, if they bring you joy in your work, they are worth embracing. Using tools that bring you genuine delight can inject positivity into your professional life.
Over the years, I’ve come across several such tools that have added a dose of happiness to my daily routine. Here are a few that stand out:
- Giphy Desktop App: This tool injects life into Slack messages by allowing you to respond with animated gifs, adding an element of fun to conversations that would otherwise be text-only.
- Raycast: Raycast has seamlessly replaced Spotlight on my Mac. With the pro version, I have quick access to ChatGPT 4, enabling me to harness AI with a simple keyboard shortcut. This has been a game-changer for me.
- Obsidian: While already a popular note-taking app, I invested time in writing scripts to automate tasks, transforming how I take notes and manage my to-do lists.
- Arc Browser: Arc became my primary browser within a single day. I only turn to other browsers on my desktop when testing specific features for compatibility.
- Habitical: This task management app, driven by badges, achievements, and gamification, has made the process of managing and completing tasks more enjoyable for me.
I’d love to hear about the tools that bring joy to your daily development life.
4. Set Goals
I’m aware that this advice might seem obvious, but it’s surprising how many individuals don’t set clear goals for themselves. To illustrate this, you can try asking a couple of your neighbors what goals they’re currently working toward, and you might be surprised by the number of shoulder shrugs and “Nothing really” responses you receive.
Setting goals is just the first step; it’s equally important to regularly contemplate and work towards them. Various methods suggest writing down your goals and placing them where you’ll see them often, like on a mirror. While this approach may work for some, I’ve found my own method that suits me better. Each morning, before I begin my work, I allocate 15 minutes to think through my goals, tasks, and calendar. I schedule this time on my calendar to ensure I stick to it. During these moments, I ponder my goals and identify one small step I can take that day to make incremental progress toward achieving each of them.
For instance, if one of my goals is to clean the garage before my family arrives for Thanksgiving, I ask myself, “What is one small action I can take today to move closer to completing this goal?” Sometimes the answer is quite modest, like “Sweep under the workbench,” while other times, I might be more motivated or have more time to tackle something more substantial. Regardless, taking time to consider one action I can complete that day to advance my goals has a powerful effect on my mindset. I feel a sense of accomplishment and optimism. Even if the road to achieving the goal is long, this daily progress helps me accomplish more than I ever thought possible.
So, whether your goals are grand or modest, make the effort to set them. Then, consistently reflect on them and take small, actionable steps daily to get one step closer. I can promise you that this approach will bring positive changes into your life.
As for me, my primary goal right now is to continue providing helpful assistance and information to those who seek it.
5. Be Curious and Learn Why
Many of us in the software development world can relate to the frustrations and judgments that can arise when working on coding projects. I’ve certainly been there myself!
“Why did someone ever pick this technology?! This other technology is so much better for this use case…” “Why would anyone write code like this?!” “Things would be so much better if we didn’t do X and just did…”
Do any of these complaints sound familiar? It’s all too easy to get caught up in the frustration.
However, it’s crucial to recognize that, in software development, there is almost always a reason behind every decision that’s made, even if it doesn’t seem like the best choice at first glance. While it may not be the optimal solution, there is still a “why” behind the decision.
I used to share these frustrations, particularly when faced with problems and roadblocks. But at some point, a shift occurred, and instead of dwelling on the frustration, I started seeking the reasons behind these choices. What was the “why” that led to this decision? As I made it a habit to “look for why” instead of just questioning “why not,” my curiosity grew stronger. I found myself actively seeking more information, deepening my understanding, empathizing with my colleagues, and, ultimately, experiencing far less frustration.
Now, my software development journey is significantly more positive. Whether I’m refactoring complex code, solving challenging problems, or diving into a new codebase for a job, I find enjoyment in the process by embracing curiosity and seeking to understand the “why.”
What about you? Can you recall the last coding challenge that left you truly frustrated? Did you manage to uncover the reasons behind it, and how did that experience change your perspective?
7. Keep your PRs Small
I absolutely resonate with the idea of keeping Pull Requests (PRs) or Merge Requests (MRs) small—it’s a practice that I’ve come to prioritize in my work over the past year, and the benefits are truly remarkable.
Focusing on smaller PRs or MRs brings about a multitude of positive outcomes. First and foremost, it leads to fewer bugs being released into the wild, which in turn improves the overall quality of our product. Additionally, smaller PRs/MRs lead to more efficient code reviews, allowing for faster feature rollouts and enhancing the developer’s experience.
By concentrating on smaller changes, I’ve found that I think more comprehensively, considering use cases that might have been overlooked in larger, more complex changes. This thoroughness not only results in higher-quality code but also expedites the review process. Team members can quickly review my code because they’re only investing a few minutes, rather than hours, and during these reviews, I receive fewer change requests. As a result, I can devote more time to building new features rather than addressing a slew of missed bugs.
On the flip side, reviewing small PRs/MRs is far more enjoyable than grappling with massive ones. If you’ve ever had to review a PR or MR comprising thousands of changes across numerous files and application areas, you’re likely familiar with the initial response. It’s not exactly an excitement to jump right in; rather, it can induce a sense of reluctance, especially if you have limited time before your next meeting.
With large PRs/MRs, the chances of details being overlooked or receiving less attention are higher. Reviewers may experience “Review Blindness” or “Review Fatigue,” leading to even longer review times, reduced efficiency, and a higher number of change requests. This not only impacts the review process but can also create dissatisfaction among the team.
Since I’ve made small PRs/MRs a priority for myself and encouraged my team members to do the same, my experience with code reviews has notably improved. I’m more willing to dive into reviews between meetings, need to request fewer changes, and don’t feel drained afterward. This practice has even enhanced my project planning and estimation accuracy. It’s a win-win for both code quality and team morale.