© Daniel Heller 2020
D. HellerBuilding a Career in Softwarehttps://doi.org/10.1007/978-1-4842-6147-7_1

1. The Big Picture

Daniel Heller1 
(1)
Denver, CO, USA
 

If You Only Take Away One Thing

Here’s the most important lesson in this whole book: you need to own your own career, because no one else will guide you. Good mentorship can be wonderful for the .01% of engineers who find it, but in all likelihood, you are going to teach yourself 99% of everything you’ll learn as a professional; great projects may fall into your lap once in a blue moon, but more often, you’ll have to find your way to them yourself. Therefore, the most important tools in your toolbox are going to be personal responsibility and initiative; those qualities are what make you a trustworthy (and valued) professional, but also how you grow and advance. We’ll discuss this principle in many contexts throughout the book.

What Is the Job?

Software engineers design, build, debug, and maintain software systems, which is to say they write text that tells computers to do useful things. At the time of this writing, these skills are some of the most sought-after in the global economy.

This work can take many forms. Some engineers are generalists, with the skills to make changes in almost any system, while some are specialists with profound expertise in one area; some maintain and improve existing systems, while some write new ones from scratch; some move from project to project, getting things working and moving on, while others own and develop one system for years. Some of us work at companies whose main product is software, while others work on ancillary systems to help produce a non-software product or service. Day to day, though, the foremost qualities of our work are more or less the same:
  • We write a lot of code.

  • Almost as much, and sometimes more, we debug code (analyze why things are going wrong).

  • We work normal-ish hours (9–5 or 10–6), with extra hours tacked on at more intense companies and an hour lopped off here or there at slower shops.

  • Collaboration is a big part of our jobs: we coordinate with other engineers, product managers, customers, operations teams, and etc., etc., etc.

  • We write frequently for humans: design proposals, status updates, defect postmortems.

What It Means to Grow

Engineering is the enterprise of building and applying technology to solve problems, and I find joy and comfort in the observation that whatever the pros or cons of any one project, the world needs people who build things. My definition of growth derives from this observation: if we exist to solve problems, then growth is being able to solve more, tougher, and bigger problems. We do so with a vector of skills built over time:
  • Coding: Clarity, testing, documentation, discipline in scope of diffs.

  • Project management: Identifying dependencies, updating stakeholders, tracking tasks.

  • Communication: Clear emails, engaging presentations, evangelizing our ideas.

  • Personal organization and time management: Not dropping balls, prioritizing effectively.

  • Architecture: The macroscopic design of systems.

  • Leadership/mentorship at a level appropriate to their position.

  • Emotional skills: Empathy, confidence, stress management, work–life balance.

Developing on each of those dimensions is certainly growth. And when we apply those skills successfully, we enjoy four pleasing and necessary benefits:
  • Money

  • Respect

  • Title (bureaucratic blessings)

  • Fulfillment, pride, and a sense of purpose

Acquiring each of the above is satisfying and practically beneficial. All of the preceding skills can be dissected in great detail, and much of this book does exactly that. I ask you to remember, though, that everything derives from our essential raison d’être as problem-solvers: the world needs problems solved, so companies need engineers who can solve them, so our impact is the foundation of our career progress.

Ten Principles

I once gave up a team to a new manager. Reflecting on our time together, and thinking about what I’d taught well and poorly as a manager, I wrote a short essay about the most critical practices that I think lift a newly minted software engineer from amateur to seasoned professional: the path from fixing bugs as an “Engineer 1” to leading major projects as a “Senior Engineer.”

I was shocked by how strongly people responded to that little list of practices—it seems to be a hard-to-find lesson. It still captures what I see as the most important principles for personal growth and building a successful career, and I’ll reproduce it here to set out the principles that thread through the more specific advice later in the book. These are the most important lessons that I wish I had learned years earlier than I did; I sure wish someone had sent it to me when I was 22.
  1. 1.

    Reason about business value: Reason like a CEO. Understand the value of your work to your company, and take responsibility for reasoning about quality, feature richness, and speed. Your job isn’t just to write code; your job is to make good decisions and help your company succeed, and that requires understanding what really matters.

     
  2. 2.

    Unblock yourself: Learn to never, ever accept being blocked; find a way by persuasion, escalation, or technical creativity. Again, your job isn’t just to write the code and wait for everything else to fall into place; your job is to figure out how to create value with your efforts.

     
  3. 3.

    Take initiative: The most common misconception in software is that there are grown-ups out there who are on top of things. Own your team’s and company’s mission. Don’t wait to be told; think about what needs doing and do it or advocate for it. Managers depend on the creativity and intelligence of their engineers, not figuring it all out themselves.

     
  4. 4.

    Improve your writing: Crisp technical writing eases collaboration and greatly improves your ability to persuade, inform, and teach. Remember who your audience is and what they know, write clearly and concisely, and almost always include a tl;dr above the fold.

     
  5. 5.

    Own your project management: Understand the dependency graph for your project, ensure key pieces have owners, write good summaries of plans and status, and proactively inform stakeholders of plans and progress. Practice running meetings! All this enables you to take on much bigger projects and is great preparation for leadership.

     
  6. 6.

    Own your education: Pursue mastery of your craft. Your career should be a journey of constant growth, but no one else will ensure that you grow. Find a way to make learning part of your daily life (even 5 minutes/day); get on mailing lists, find papers and books that are worth reading, and read the manual cover to cover for technologies you work with. Consistency is key; build habits that will keep you growing throughout your career.

     
  7. 7.

    Master your tools: Mastery of editor, debugger, compiler, IDE, database, network tools, and Unix commands is incredibly empowering and likely the best way to increase your development speed. When you encounter a new technology or command, go deeper than you think you have to; you’ll learn tricks that will serve you well again and again.

     
  8. 8.

    Communicate proactively: Regular, well-organized communication builds confidence and goodwill in collaborators; knowledge-sharing creates an atmosphere of learning and camaraderie. Share knowledge, and set a regular cadence of informing stakeholders on project goals, progress, and obstacles. Give talks and speak up judiciously in meetings.

     
  9. 9.

    Find opportunities to collaborate: Good collaboration both increases your leverage and improves your visibility in your organization. Advancing your craft as an engineer requires you to have an impact beyond the code you write, and advancing your career requires, to a certain degree, building a personal brand at your company. Cross-functional projects and professional, respectful collaboration are critical to both.

     
  10. 10.

    Be professional and reliable: Think of yourself as a professional, and act like one. Come to meetings on time and prepared, then pay attention. Deliver what you say you will, and communicate proactively when things go wrong (they will). Keep your cool, and express objections respectfully. Show your colleagues respect and appreciation. Minimize your complaining; bring the people around you up, not down. Everyone appreciates a true professional; more importantly, it’s the right way to behave.

     

Your Relationship with Your Employer

Your company is your counterpart in a business transaction where you exchange your valuable skills for their valuable money—your employer is not your mother, your father, or your friend.

Like any firm doing business with another, your expectation should be that your company will make every decision out of rational self-interest. This profound truth has many important corollaries, foremost among them that
  • Your company will never do anything for you out of sentiment.

  • Your company doesn’t owe you education, career development, a raise, or a long-term guarantee of employment.

  • Everything your company does is business, not personal, and you shouldn’t take it personally.

  • You don’t owe your company your personal loyalty—they certainly don’t see themselves as owing you any.

  • When you want something from your employer, you should approach it calmly, as a negotiation between two businesses.

None of these means you mistreat each other: like any two firms doing business, you aim to build a trust that allows for a long-running and mutually fruitful business relationship, and for both of you, building a good name as a trustworthy partner keeps other doors open.

We should approach our relationships with our employers calmly, without a sense of entitlement, aiming to follow our own ethics, firmly represent our interests, and secure the most favorable, mutually beneficial relationship we can. And if we can’t get what we want, we shouldn’t degrade ourselves by whining—we should sell our skills elsewhere on more favorable terms or accept our situations as the best available.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.227.102.124