The Enjoyable Profession of Software Development
Software development can be a tremendously rewarding, enjoyable
career.
Few careers offer comparable opportunities to weave intricate,
complex structures that, while virtual, have such a positive
impact on the world around them. Few offer the freedom and
creativity that software development does, or the very real
potential for entrepreneurial riches.
Whether it's building a new peer-to-peer application, control
software for a massive power generator, or improving the workflow
of the corporate scorecard system, done right this can be a very
fulfilling, enjoyable, challenging pursuit.
A Passion for Software Development?
Are you
really passionate about software development?
Be honest with yourself.
A desire to outshine a teammate isn't passion. Nor is a
motivation to impress the boss. Neither is a combination of the two
worn as a magic defensive cloak against downsizing
spells. These are second-rate, artificial passion substitutes:
Mixed into the recipe, they yield sub par results, often leaving a
nasty aftertaste of burnout and dissatisfaction.
Instead I'm talking about a bona fide
interest and
enjoyment of the craft and challenge of software
development, even outside of career or job security issues (though
it benefits the same). This isn't a job ad demanding that you're
"passionate about business reports!", but rather is just a
moment for sober reflection on whether you're over-clocking life,
or running idle instructions in a tight loop.
If you're like many software developers in the industry
today, a feeling of enthusiasm and enjoyment for the pursuit is
just a distant memory (often during the happy days of university
and your first job). Instead it has become a career, and is just
something you do from 9-5 (or more when passion is replaced by
sacrifice). Skills have likely stagnated, moving just enough to
compete with coworkers, or to avoid obsolescence.
Of course there are those who've never enjoyed this career, and
they probably will never enjoy it -- it just isn't their thing. The
only advice I can offer to those people is a suggestion that life
is too fleeting to spend so much time doing something you don't
enjoy.
Software developers who truly love what they are doing are the
ones creating the most innovative code. They're the ones with
productivity rates multiples of their peers. They're the ones that
feel a little guilty getting paid to do something they enjoy so
much
The Tips to be a Productive, Happy Software Developers
1. Be Marketable - Keep Up To Date Skills and Network
Contacts
Most of us will work for over a dozen different firms over
our careers.
We'll leave for better salaries and working conditions.
We'll relocate to accommodate a spouse's career. We'll be laid
off during corporate mergers and spin-offs, or even when the
company goes bankrupt. We'll get turfed out because we're
over-skilled, and thus overpaid, relative to the needs of the
position. We'll be downsized because we aren't compatible with the
new boss' empire building schemes. Maybe we'll get bored of a
position and seek out something new.
This is the employment reality of most careers in the 21st
century.
To some professionals this represents an exciting
journey, and each transition is met with anticipation and
enthusiasm. These people feel confident in their abilities, have a
network of peers in the industry communicating interesting
opportunities, and their skillset is up-to-date and marketable
(they have the appropriate laundry list of abilities, credentials
and certifications, and upgrade as needed), and while the
possibility of their current employer closing shop tomorrow is
something they'd prefer not happen, and they probably love the
great group of people that they work with, it isn't something that
they
fear.
To less prepared professionals, however, the idea of losing
their cushy job hangs over them like a black cloud. Their lack
of apparent opportunities, and the feeling that they couldn't
find an equivalent job, is enormously destructive of both
motivation and job satisfaction. Paradoxically, job protectionism
(such as making one "indispensable" through obscurity, by
denigrating coworkers, and so on) often becomes a more likely
activity of people in such positions than legitimate
contributions.
This is incredibly destructive to morale, not just for the
individual in question, but for everyone on their team: Often the
malcontent, contagiously demotivated member of the team is the
least employable, and it can be debated which condition led to the
other.
SUMMARY: No matter how much you love
your current job, you should keep your CV current, and
you should always keep up-to-date on industry
opportunities. Know what skills are in demand, and try to gain
experience in them (even if it means pursuing formal or
self-training during your own time), and attain a level of comfort
that you could transition to a different opportunity with minimal
discomfort.
MANAGER SUMMARY: You should do
everything in your power to make your group feel
confident in their abilities -- ensure that everyone gets a
chance with marketable technologies; encourage the pursuit of
desirable certifications; and build skills through internal
resources, workshops, and seminars. Unless you're running a
sweatshop, this is unlikely to lead to a feared exodus of
employees, but instead will empower and motivate your group to
more openly contribute, and to demand more of each other.
2. Be The Master of Your Domain
The control we have over our environment can have a tremendous
impact on our happiness.
Something as simple as a sporadically malfunctioning key on our
keyboard can ruin an entire day, for instance. Similarly,
when you're nearing a deadline and your network connection starts
flaking out, it can make an enjoyable jog to the finish line a
frustrating exercise of physical restraint (in this case
restraining yourself from tearing the wiring out of the wall). At
least we have optical mice now, eliminating one of the primary
causes of environmental control frustration.
Many times our work habits inevitably bring a feeling of "lack
of control" into our work lives: By failing to fully read the
documentation for our tools, investigating their behaviour, APIs,
and nuances, we often create a situation where much of our
development is basically crap-shoot trial and error, reacting as
things don't work as planned.
I've witnessed development groups, not to mention that I've
demonstrated this unsavoury trait myself, unhappily fighting with
perceived technology deficiencies (usually as a deadline
rapidly approaches), moaning and complaining about what seems to be
faults in the language, technology, or platform, forever building
workarounds under a fog of uncertainty, when in reality it was
actually a fault in the understanding of the same.
More often than not it's simply that they haven't spent the
upfront time to understand the language (I remain amazed at the
number of C# developers who have no idea what the
using
keyword is for, or why seemingly out-of-scope file objects are
still locking files until some magical, indeterminate time in the
future. Or the Delphi developers who needlessly nulled variables at
the end of scope in a futile misguided attempt to fight mystery
bugs), the technology, or the platform. Their frustration is
created out of ignorance, and a small up-front investment would
have sped up development, increasing the sense of control that the
developers have over their domain.
SUMMARY: The next time something seems
mysterious or unknown, take the time to properly investigate it.
Classic lack-of-control approaches such as hacked workarounds or
"reset the server daily" lead to a feeling of losing control,
reducing job satisfaction and adding to the natural daily
frustrations. And get your keyboard replaced if it starts
malfunctioning.
MANAGER SUMMARY: Identify and investigate
"easy-outs" proposed by your development team. While most
software has faults, and products and technologies often work
differently than we might imagine, many times such excuses are due
to a lack of investigation and analysis. Even when things
don't work as advertised, which is frequently the
case, formally investigating and empirically determining
behaviours is vastly superior to each developer endlessly fighting
with and then hashing out strategies on a need basis. And make sure
your developers have functioning keyboards.
3. Accommodate Your Financial Needs
I've worked in some great positions at the wrong times in my
life, sapping my motivation until eventually I moved on. These
positions were for great firms, with great working conditions and
great coworkers and management, but it couldn't realistically adapt
to accommodate my evolving financial needs. I invented
dissatisfactions with the situation, turning an ideal situation
into a daily torture.
After getting married and planning for our first child, for
instance, the financial risk/reward that worked when I was living
alone in a $600 apartment eating Ramen noodles was no longer
satisfactory. Demands of owning a home, a car with infant carseats,
education funds, daycare (for two children costing more than it
would cost to lease two (2) BMW 750i's), and boxes and boxes of
diapers, required more financial returns than I needed years
before.
I moved on.
While the resulting role superficially wasn't as satisfactory,
from a life perspective my mood brightened dramatically, and my day
was much more enjoyable.
Of course this seems like cheap advice: Make more money! And
Fast! Yet the reality is that developers often do make choices to
the detriment of their financial condition, and if they go too far
they will hate their job no matter how perfect it otherwise is.
Working for equity of a start-up is great when you're just out of
university, but it is destined for failure when you're more
established.
SUMMARY: If your financials are out of balance,
it will unavoidably sour your mood during the workday, making you
resent your employer and your workplace. When life goals exceed the
income of your position, immediately begin investigating
alternatives (be it asking for a raise, looking for a more senior
role in your organization, or seeking employment elsewhere). No
motivational boost or cool company games room will overcome this
basic life need.
MANAGEMENT SUMMARY: Be aware of the goals and
needs of your group. Sometimes someone's needs grow beyond the
possible return of a position, and it is important to appropriately
communicate this (rather than giving vague hints of unseen raises
and super-bonuses at some future point).
4. Have A Life Outside of Work
This is a rule that works for all professions -- having
accomplishments providing satisfaction outside of work will smooth
the inevitable downs of our professional lives, often providing one
with a much better perspective. Without this, often minor workplace
failures can explode into seemingly momentous events.
These accomplishments can even be in the same domain: A
professional coder by day, and an open-source coder by night, for
instance.
SUMMARY: There will be periods when everything
seems to go wrong in the workplace. Having the cushion of
achievements outside of work can avoid it spiraling into a
workplace disaster, keeping spirits up through the tough times.
Often non-work experiences benefit the workplace as well, whether
it's techniques learned from nighttime projects, or delicious
coffee courtesy of the nighttime barista classes.
MANAGER SUMMARY: There is a world outside of
work.
5. Properly Manage Expectations
Developers, as a general rule, are terrible at managing
expectations: Many of us are prone to overpromising deliverables,
assuring stakeholders that we'll deliver these amazing results
sooner than is reasonable. I've fallen victim to this syndrome
myself, and I've seen it occur rampantly across the industry.
When D-day comes we convince ourselves into believing that the
users built their own unrealistic expectations, and managers forced
us into untenable timelines. While often that is the case, just as
frequently the developers were the origin of
misinformation.
While there is a temporary sense of satisfaction wowing users
and management with an exaggerated declaration of our abilities
(we've likely even convinced ourselves), as time wears on this
misinformation can be enormously destructive and debilitating. With
every day closer to the deadline we get a little more desperate for
a silver bullet, hoping that some magic technology or component
will deliver us from damnation.
It seldom works out that way.
Users are unhappy. Management is dissatisfied. Employees are
demoralized and devastated.
The best option is always to manage expectations, to ensure that
we can reasonably deliver promised results without heroic
effort.
SUMMARY: Plan for the long term, realizing that
promises that aren't delivered on will cause you great workplace
unhappiness later. Manage expectations to ensure that you can
satisfy your "customers" with reasonable effort, and with a
reasonably high probability of success.
MANAGER SUMMARY: Never demand unrealistic
deadlines, and question employees when provided with the same.
Encourage your troops to be more reasonable with their promises,
especially to stakeholders outside of the group, and they'll have a
much greater probability of meeting external expectations, leading
to increased motivation for everyone.
Conclusion
This is an amazing, expansive career full of incredible
innovation and endless opportunity. Ensure that you don't diminish
your enjoyment through simple mistakes, such as pigeon-holing into
a position, or endlessly setting up yourself for failure.