It’s no rocket science – becoming a software engineer these days is akin to strapping yourself a
But taking up the course and graduating isn’t a guarantee towards success, and this holds true to any profession. One has to establish habits, create opportunities and, most importantly, work hard.
Here are the 5 tips every fresh software engineer must know to thrive in the industry.
1. Decide Which Industry or Language to Remain/Specialize In
We went through a broad range of programming languages during my high school years (and prior to that), including QBasic, Pascal, C/C++, Delphi, Java, Python, and I’m probably missing some (apart from asm for Texas Instruments).
Job prospects for Java (and partially C# gaining popularity) were quite promising for several reasons.
3 Reasons Job Prospects for Java are Promising
- Enterprise-grade software is built by large teams, with tons of tedious tasks for reasonable junior software engineers.
- Most projects take years — there is less pressure compared to rapidly evolving startups or smaller repetitive gigs.
- Corporations can afford to hire juniors — small companies and new startups don’t have the time to mentor/coach and resources to pay someone to learn “on the job”.
Plus, for many beginner programmers, this sounds more exciting. This explains the cult towards the top tech giants, all of the corresponding internship programs, international applicants studying for interviews at Google, Amazon, Microsoft.
And I had a couple of other opportunities, a Python job for a former professor of mine or a PHP gig at the job I held as a site administrator. The Python project wasn’t as interesting for me and the PHP job wasn’t as flexible (nor well-paid) and had fewer career growth options.
Due to my passion for open source, the .NET stack wasn’t something I was overly excited about, so Java was a wonderful option.
So I spent several years at a couple of jobs working as a Java developer. After the initial hype, it really didn’t match my dynamic attitude. Compiling for hours a day or debugging all sorts of server exceptions didn’t thrill me, along with having to discover and gather a long set of random libraries to make an enterprise web project work.
Working on pet projects in parallel, I was spending a good chunk of my time writing forum extensions on PHP or debugging CMS plugins. I was initially fond of desktop applications but soon realized that “the future is the Web” and transitioned to web development full-time.
My Last Job Hop In Tech
My last “hop” on the tech train were CMS platforms, namely WordPress where I specialized. At first, it allowed me to work as a full-time freelancer (as remote or freelance Java/.NET gigs were nearly impossible to find.) Also, I became fond of the WordPress community, being a true open source advocate, a fan of content management platforms, and someone tired of reinventing the wheel for basic features like “News” or yet another admin panel, or a comments area, or a media uploader.
It took a while to find our niche (given the millions of small blogs and sites on top of WordPress), but it finally worked out.
If I were to pick a new technical stack, I’d probably resort to Python and its machine learning capabilities (plus porting some web applications to Django). But in a world full of services and micro-services, that’s not really a game-changer in itself.
2. No Shortcuts To Becoming a 10X Developer
There’s no workaround for it; it’s a combination of intellect, aptitude, experience, and motivation.
Lacking any of these would drastically limit your odds to become a 10x developer. Unless, of course, you work in a sub-mediocre company that calls everyone capable of fill out a formula in Excel “a senior engineer”.
Considering you have the motivation, the rest is years of hard work, solving complex problems, continuously studying the industry, engaging in peer programming and other collaborative activities, and hopefully, you would develop the right analytical mindset to become a 10x developer.
Or you can, you know, follow the same path from a purely career-oriented perspective without aiming for a subjective definition that isn’t measured in a practical way.
3. Learn How to Block Time
Block time for focused work.
Valid for both employed and freelance developers, you have to leave your comfort zone and handle all sorts of non-development tasks — such as marketing, accounting, negotiations, management, attend some meetings/calls, do some financial planning. Those are often done sporadically, or chaotically.
In this case, handling the actual work could become a tedious process.
Being able to block time for coding without interruptions is extremely valuable.
This was one of the main reasons I switched to freelancing over a decade ago. Regular business hours didn’t suit me. I’m barely adequate before noon, sometimes even 2 pm. I’m a night owl and this works for me while some of my colleagues start as early as possible, utilizing the early mornings.
However, most tech companies out there realize that. Product businesses revolve around weekly or bi-weekly sprints. Flexible working hours are more common than ever. And charging your own creative juices for maximum efficiency is what it takes to become a thriving software engineer.
If you’re dipping your toe into freelancing, book some time for meetings and calls, along with time for marketing or whatever you do to build your sales pipeline. The rest could be blocks of focused work – 2–4 hours at a time, tackling tasks in your PM system.
Working from co-working spaces or coffee shops “may” help you. It doesn’t work for everyone, but this was my main “hack”. Coffee shops, for me, are the best combination of discipline (I won’t watch TV in the company of strangers, let alone the lack of such) and lack of interruptions (because, strangers).
Another type of forced emergency is hitting a coffee shop with just a couple of hours of battery life left. Make sure you utilize every bit of your time — or else.
4. Take Feedback Seriously
Most aspects of the job are tolerable. Juniors tend to learn new platforms (or languages), get acquainted with business processes, adapted in a new environment, get used to communication and adhering to processes and deadlines.
It’s a lot to tackle at once, and that’s fine.
What isn’t fine is ignoring or taking feedback lightly.
We’ve had some interns who can’t grasp the basics of programming. They can’t access a hashmap or a multi-dimensional array. We take the time to explain the basics of how data structures work and how to use them accordingly (despite being really basic).
A couple of days later, another few hours spent on the same problem. A different method used to train the person on solving that error.
Early next week, back to the very same issue. Without indicating a problem or asking for help – just committing a basic bug fix throwing a warning due to improperly accessing an array index.
That’s not fine.
The other common case is escaping input or verifying variables. In dynamic and typeless programming languages, a variable could be anything — and placing a basic check upfront is more than mandatory. Failing to grasp that after repeating that 5 times ranks acts demotivating to the mentor or the corresponding colleague.
It’s perfectly fine if you don’t know a lot of stuff. But unless you pay close attention to what your team is trying to teach you, there won’t be any notable progress. Here’s where communication comes into play, too — ask follow-up questions and indicate problems early on and you’ll be good to go.
5. Continuously Upgrade Your Skill Set
I tend to use four different techniques for ongoing professional development in the software engineering field.
The projects we work on day-to-day always require some research and the implementation of new techniques (optimizing platforms for performance, conducting security reviews, migrating proprietary applications, etc.)
Moreover, we work closely as a team on technical implementations. Folks come up with certain ideas that we evaluate against the business case. We do peer code reviews before deployments, load test solutions, build automated tests and tend to experiment with new libraries or frameworks.
The combination of working on complex projects and collaborating with other tech members is highly valuable unless you work in a dev factory reusing generic code at scale.
I follow several technical blogs and social media accounts discussing new frameworks, machine learning, programming paradigms and the like. Examples:
- DZone: Programming & DevOps news, tutorials & tools
- Slashdot: News for nerds, stuff that matters
- The DEV Community
- High Scalability
Spending a few hours a week + reading a tech book monthly helps me stay up to speed.
Whenever I stumble upon a new technique or technology which may come handy at a later point, I try to invest some time playing with it, building a test project, or integrating a library into an existing project.
It could be an AI-driven framework, an ad management library, a new IDE, a new profiling tool, configuring the web server or optimizing the database layer.
Occasionally, I build some apps that automate certain processes or integrate systems together. For instance, I built a simple time tracking tool in Ruby, a Slack bot in Node, a PM wrapper with Electron, a task manager with Java. I have a couple of web applications for different purposes and build WordPress plugins solving various business problems I’ve faced myself.
Community events may be of help, too. Contributing to Open Source has helped me learn a lot about the web development ecosystem at scale.
While participating at large contributor events across the world, I had the opportunity to brainstorm together with hosting agencies, enterprise providers, product development companies, support teams, translation experts, accessibility consultants, and other industry peers solving problems for different industries.
Bonus: The Best Ways to Thrive as a Freelancer
I have a soft spot for freelancers — simply because that’s how I started DevriX in the first place.
Some of my folks at the office freelance as well. No harm in generating extra cash on the side, working on various projects, learning new technologies (and getting paid for that). This benefits everyone as long as it doesn’t affect day-to-day productivity.
So, if you’re also intrigued in building a successful freelancing side hustle as a freelancer:
Start with a recurring revenue strategy from day 1.
Thriving as a freelancer means stability and profitability.
So you’ll either need to be a rockstar freelancer who is constantly in demand, charges insane rates, and works on exciting projects all the time…
…or find a safe way to get some ongoing stream of revenue over time — just like payroll employees expect their paycheck at the end of the month.
Now, becoming a rockstar freelancer sounds great, but needless to say this takes years (and not everyone can get there).
Recurring revenue is a safe strategy.
Find ways to charge or upsell your clients in the long run.
I’ve recorded a short video that covers 5 actionable techniques to grow your recurring revenue with a smaller subset of clients:
The main bit I regret through my early freelance years is not paying enough attention to small, accumulating revenue opportunities at first.
Think of maintenance, recurring reviews, optimization opportunities, redesign schedules, or other trends you can leverage.
Handling hosting support or maintenance may seem like an overhead at first. But once you keep scaling your business, they make more and more sense.