I've been interested in programming since I was a pre-teenager. When I was 12, my family purchased a
Gateway P60 (Pentium 60MHz) desktop system with 8MB RAM, 3.5" floppy disk drive, CD-ROM and a
14.4Kbps dialup. I tinkered endlessly with the available freeware and shareware on Windows 3.1,
played The Neverhood from CD, read Microsoft Encarta articles, and explored command line MS-DOS to
navigate the file system.
After playing a few games and exploring the web through AOL's free online trial, my curiosity piqued
and I wanted to learn how all of this stuff worked.
This curiosity led me down countless rabbit holes, into endless challenges and combing the software
topic bookshelves at local libraries. I became acquainted with BASIC, HTML (before CSS was a thing),
C/C++, and some other older languages like Pascal and Fortran. JavaScript and PHP was recently
created, and VBScript was a new contender.
While I segued away from programming in my late teens through mid-20s to explore other things such
as art, design and music production, ultimately I circled back and pursued a career in software
development.
Part I: Internal Growth
My first role in tech was ironically not as a software developer. My first title was "Junior
Graphic Designer" in a small company of about 40 people. My first job there was to convert
paper-printed curriculum into highly visual and engaging PDF designs for music and film school
programs.
Within 6 years my role grew to "Lead Developer / Designer" and I eventually left the company after 8
years for a fullstack developer role elsewhere.
In order to grow internally at the first company and prepare to make an eventual jump for a more
fulfilling role, I had to learn new things to increase my value.
I'll outline some key values and specific decisions which led to steady internal growth in my
first position. These are steps which took me outside of my comfort zone and pushed my limit. I
believe these steps are universal in nature and can be applied to many careers, but are especially
relevant to software engineering.
1. Push Boundaries
All websites and applications, no matter how impressive, have something in common: people built
them. People no different from you or me. People who worked hard, tried new things, and maybe had
a bit of luck along the way.
Everything can be created.
"I can't build that" is not a valid excuse. There's an incredible amount of open source projects,
tutorials, and blog posts at our disposal to learn from. Nothing is impossible to create, and
breakthroughs happen every day. With time and dedication to learning, much can be accomplished.
If I limited myself to what I already knew, or what I'd already tried and had success with, I would
not have grown at all. I had to push myself.
2. Network
This may go without saying for many people, but it's still important enough to reiterate here. For
my first few years as a developer (this might sound silly), I did not know there was an actual
developer community out there!
I went to community college and made a few acquaintances, but most of us in class were flying solo.
There were no real collaborative dev projects like you would find in the real world. This experience
was not an accurate reflection of common software development, where team integration is a critical
piece.
I stumbled on the developer community by accident.
There are a myriad of podcasts and highly-visible software developers out there; find your preferred
technology and then search for relevant podcasts. There's a fit for everyone!
X (formerly Twitter) and LinkedIn can be an exceptional place to connect and interact with other
professional developers - many of whom have worked on or created the very libraries and packages you
use every day. Following people who have made significant contributions to technology is rewarding
and very accessible.
3. Automate Yourself: Work Differently
I've come across the notion that some developers feel the need to keep themselves employed by
overcomplicating their work. The thought is that if they make their work so overly complex, nobody
else can take it over and their tenure with the company is guaranteed.
The truth is that there are countless developers out there who not only can take it over, but they
will gladly do so. Over-complicating your work for job security only makes their onboarding a bit
more challenging.
I've found the opposite effort to be true: automate yourself.
If you find opportunity to automate yourself out of a task, do it. Don't hang on to doing something
just because it keeps you busy or it keeps the company dependent on you. There's more exciting work
around the corner to focus on.
Part II: Preparing to Jump
After several years within the same company, I realized I hit a ceiling for growth. There was
nowhere to grow internally, and my compensation was not going to improve.
At this point, I realized I needed to make a jump. But how? I developed software alone. How could
I level up my skills to work with a team?
Read on about some steps I took to help grow my skills and make myself more marketable to companies
with engineering teams.
1. Testing Code
I would see posts online about TDD (Test-Driven Development). I'd ask myself: "Do I have time to
write this extra code? Do I have to ask permission from upper management to allocate some of my time
to do this?"
As I learned more about it, I decided not to ask permission, but rather to take the risk of having
to ask for forgiveness.
I never had to ask for forgiveness.
2. Act as If
Using version control software is a non-negotiable requirement in modern software development.
Learning to leverage git was a critical stepping stone for growth.
git software is typically leveraged by teams to allow developers to work on the same codebase
simultaneously without much friction.
Within the context of the company I worked for, git's primary purpose was to track the commit
history to verify which work was done; to save a historical record of progress.
I read up a bit on team development, and learned more about branching, releasing, and what the
pull-request (PR) process should look like. I learned about continuous integration (CI) and
continuous deployment (CD). I realized that these were practices that I could learn and practice on
my own — even without a team!
In Closing
At the end of the day, it's all about self-improvement and progression. When I found myself working
repetitively, or stagnant, I became restless. The solution was typically to get outside my comfort
zone, try new things, and learn.
The beauty of a software development career is that it's never stale. New technology and techniques
are available nearly every day. There is no shortage of innovation and ideas.
The best software engineers continue to learn and grow, remain humble, and never settle for the
routine for too long.