Software Developer Life

Home > Other > Software Developer Life > Page 13
Software Developer Life Page 13

by David Xiang


  Expertise Across Change

  We change companies, departments, and positions throughout our careers. Each transition comes with new languages to learn, new frameworks to use, and more technical expertise to be gained. Change is an amazing growth catalyst, because it forces you to adapt to unfamiliar environments. Remember, you are a software developer—not a Python developer. You will learn any language and any stack to get the job done.

  Let me share a quick story. Joe had been working with C++ throughout his entire professional career. He had memorized all the standard library interfaces, could recite all the Boost classes, and sometimes baked cakes with C++.

  Each transition comes with new languages to learn, new frameworks to use, and more technical expertise to be gained.

  Joe—who was working a comfortable job at JP Morgan—got sucked into the startup hype and moved to San Francisco to join a “fin-tech” unicorn. Life just turned upside down. Joe now had to move to Silicon Valley and start working with Java. Thinking Java was pretty much like C++, Joe initially floundered. Unconsciously, he thought he could carry his C++ knowledge as weight. C++ was raw, powerful, and more of a programmer’s language. It would definitely be good enough for his new San Francisco job, he figured—yet it wasn’t. Joe’s supervisor eventually called him out and gave him the wakeup call to get his act together.

  Joe had simply underestimated a new tech stack and failed to maintain his expertise across the transition. That wakeup call sent Joe diving deep into Java and its best practices. He now bakes cakes with multiple languages.

  Do not make the mistake of assuming you have high credibility because you’ve developed across a few different stacks. Every company, technical stack, and development environment will be different. Once you transition, it’s your responsibility to initiate your learning, ramp up, and become an expert again.

  Mentorship

  If you have someone you can call a mentor, take a moment and realize how lucky you are—then go give them a hug. For the other ninety-nine percent of us, we must find mentorship and guidance through other sources. The good news is that mentorship doesn’t have to come directly from another human being. I’ve never been able to call someone a true mentor, but I’ve learned to fill that void with my own initiative.

  Here are two amazing mentors that have helped me—books and YouTube. With books, find someone you respect, read their work, and immerse yourself in their brain. There are some incredible people in this world who have taken the time to write down their thoughts and experiences—take advantage of that!

  My second mentor is YouTube and the Internet in general. These days, you can learn the fundamentals of any topic with just a few key strokes; not many people understand how incredible this is. Respect someone? I guarantee they have multiple documentaries and full-length interviews online. Want to sit in on an “elite” Stanford lecture? No problem, just watch it sped up at 1.5x after dinner.

  If you don’t have the luxury of a real-life mentor, don’t worry, you are in the majority. With books, YouTube, and the Internet, there are more resources than we could ever hope to consume in a single lifetime. Everything is out there, you just need the initiative to get up and find it.

  Non-Tech Makes A Difference

  My last snippet of advice is that you should not limit your educational pursuits to just tech. The world is a big place, and everyone—really, everyone—has something unique to share with you. Learning about other industries and professions outside your field will increase your value as a software developer. You can read about basic accounting, learn how the healthcare industry works, read up on some politics, or try to understand human psychology. Anything you learn will complement your work as a technologist in some way, shape, or form.

  Anything you learn will complement your work as a technologist in some way, shape, or form.

  29: The Quickest Way Out [Stories]

  The following story comes from a friend’s experience starting a career with a wedding company based in New York. I was surprised to see how happy she was with her company’s culture—a lot of my friends weren’t so lucky. Her company was decisive and swift when hiring and firing. There were no qualms over letting the bad apples go. Her story demonstrates the significance of inter-personal skills and how an individual’s conduct can trump ability.

  Company culture has been a hot topic these past few years. We’ve seen a Google software developer’s gender “manifesto” lead to his firing and a brave blog post spark the departure of Uber’s CEO. While a lot of people talk about culture, no one defines it well. Every company believes in diversity—but so what? Every company has integrity as a value—so what?

  A company is a group of people providing a product or service—that’s it.

  Don’t over-complicate the concept of a company. A company is a group of people providing a product or service—that’s it. It’s simple on the surface, but incredibly nuanced under the covers. What is the most unique, dynamic, dramatic, and powerful thing in life? The answer is a group of people. That simple concept is the essence of humanity. It’s how we define ourselves and ranges from companies, to towns, to countries. It was people who created the iPod and it’s people who start wars. If we have to start somewhere with company culture, we have to start with the people.

  Two years ago, I was a newly minted software developer and had started working at a medium-sized wedding startup. We were a one-stop-shop for couples tying the knot, providing services such as gift registries, invitation management, and photo album creation. Aside from the work itself, I’m proud to say that I thoroughly enjoyed working with everyone in the company. After a marathon of technical interviews, I was beginning to suspect that “just being nice” wasn’t a common attribute for tech companies. Here, everyone was respectful and intelligent, and contributed to a pleasant work environment.

  One of the hallmark traits of the company was a strict no-jerk policy. While in the rest of life I was used to just having to put up with tough personalities every now and then, this company was breaking records for shortest jerk-employee tenures.

  During my first six months on the job, our team was on a roll. We were hiring at a steady clip, leveling up our tech, and pushing out product—all at the same time! We had picked up a couple of infrastructure engineers, a bunch of full-stack web developers, and two awesome product managers.

  With many of our seasoned developers looking to stay inside the code, managerial duties weren’t getting enough attention. Many of my colleagues had been managers in previous jobs and were now only interested in developing. For my first six months, we had been very lucky with our hires, but this luck led to a lack of scrutiny in recruitment. We met an engineering manager named Bob. He had the right qualifications and got along with everyone during the interviews. With confidence, our company gave him an offer.

  Bob’s tenure at our company lasted a little over two months. I don’t believe Bob was a bad person, but a few recurring personality traits led to his swift removal. The one thing about him that I will always remember is that Bob was always critical, and never constructive. We noticed it immediately, as his criticism appeared everywhere, from code review comments to architecture design meetings. He was quick to veto proposals, point out flaws in the system, and push hard for his solutions. Two of his favorite phrases were “that’s not going to work” and “I’ll come up with a design.” These might be acceptable traits for an enthusiastic developer, but they were inexcusable ones to find in a manager.

  As an entry-level developer, I’ve noticed how often senior developers forget how challenging programming can be.

  As an entry-level developer, I’ve noticed how often senior developers forget how challenging programming can be. I don’t see all the nuances, edge-cases, and ripple effects like they do. I don’t think they can reasonably expect me to, either. I’m aware that my design isn’t winning any prestigious coding competitions, but a senior going off and architecting the system in a silo doesn’t help me
get any better.

  I did not come from a formal engineering school. I was a Math major, took an interest in coding, signed up for a boot camp, and was lucky enough to get a developer job. I often feel that I do not have the thick skin that comes with the fancy Ivy League, Silicon Valley training. Because of this, perhaps, I’ve become perceptive of the various ways in which technical criticism is given.

  Many developers are quick to point out exactly what’s wrong and, without any discussion, provide a solution. I know this is extremely practical, but it’s highly aggravating for any developer trying to formulate ideas. If I’ve written a crappy interface, I don’t want to be told exactly what it should have been. Good technical criticism starts where solutions are lacking: “Hey, have you thought about how your interface can extend to our new features coming into the pipeline?” or “There seem to be a mix of responsibilities with another interface we have; is there a way to re-organize them?”

  The trickiest part of being a team member in any company is interacting with the people. With coders coming from eclectic backgrounds, strong cultures and comfortable work environments take precedence over raw talent. I know the veterans mean well, but their devotion to the optimal solution might come at the cost of raising the team collectively. A seemingly innocent habit might be the deal breaker for a job.

  30: Duress And Rationalization [Stories]

  Dan, my first Qualcomm friend to join startup-land at the tumultuous L.A. fitness company, is back with a story about career transitions. This chapter follows Dan as he closes a chapter and starts a new one in his startup journey. Learning about Dan’s concerns and emotions during his career pivots has helped me tremendously over the years. We have shared many struggles over beers, and he has been an invaluable earpiece for me during my own pivots.

  Leaving a company can be emotional. You might be leaving an intimate group of developers. You might be leaving a CEO who went out on a limb to hire you, or maybe you’re disappointing your co-founder and soon-to-be ex-best-friend. You might be in love with your current job, but I promise you there will be a day when you come face to face with these difficult emotions. A company can be like a second family, and closing that chapter in your life is no easy task, but when you know it’s over—it’s over.

  It was 2015, and I had been working at the L.A. fitness startup for a couple of years. The sexy idea for a fitness app was still high in the sky, but our future looked increasingly grim as the months passed by. Developers were churning, investors were wincing over our bug-crippled demos, and we had absolutely nothing to show in the numbers. I was struggling to keep up my motivation. The only thing keeping me onboard was my faith in the CEO. As the days passed, my itch to leave only worsened. It didn’t help to see our leader slowly losing his fire. After a few months of suppressing my emotions, I was ready to do whatever it took to get out of there. I was stressed, I wasn’t in the right state of mind, and I made a major mistake. I left for the sake of leaving.

  A company can be like a second family, and closing that chapter in your life is no easy task, but when you know it’s over—it’s over.

  Looking back on those times, it’s so clear to see what I did wrong. I can offer this simple tip for anyone in a similar situation: get a neutral third party to hear you out and weigh in with their thoughts. An objective mind is invaluable; use someone who has zero affiliation with the job or your own personal situation—no colleagues; no partners, husbands, wives or dependents; just someone who can listen to your issues and give an unbiased opinion.

  Due to extreme impatience and stress, when another opportunity presented itself to me, I accepted it immediately. Hindsight will always be 20/20, and I want to smack my head against a wall every time I relive this decision. When I look back, it was obvious that I should never have taken that other job—the signals were clear, but I didn’t acknowledge any of them. I made excuses to myself, rationalized away blatant red flags, and completely ignored my gut instincts.

  The new company I ended up joining was co-founded by my college friend and headquartered in San Francisco. Before I was consumed by the failing L.A. fitness startup, this particular friend and I would periodically grab beers and I’d hear about all the craziness happening in his company. I heard about investors acting like bullies, friends becoming enemies, and day-to-day in-fighting among management. It was bar talk between friends. Said another way, this was a dialogue that a founder should never, ever have with one of his or her employees. During these bar sessions, I did my best to be understanding, but all I could think about was, Your company sounds insane, man. Unfortunately, by the time I accepted his offer, I had pruned these thoughts away. It’s completely normal for a startup to be chaotic.

  There were other major signals that I ignored. A year before this all started happening, I had introduced my younger brother—also a software developer—to my friend’s company. Just when I was about to accept the job offer, my younger brother was planning to leave! Why would he be leaving? Was it because something was wrong with this company?

  I never asked my brother why he left. In the back of my mind, I was scared, because I knew I wouldn’t like what I’d find. Instead, I attributed his leaving to personal ambitions and assumed it had nothing to do with the company itself. My desire to leave the fitness startup was so strong that it overshadowed any rational thought. I had neglected to perform the much-needed diligence on this new company before jumping ship. To this day, I cannot believe I ignored these warning signs. My brother and I are the same blood. Why did we not talk about this? Why did I not get every ounce of truth out of him about that company?

  Catch yourself quickly when you find yourself rationalizing away difficulties. This goes beyond your career and can touch everything in your life. Frequent justifications are a signal that your reasoning has been compromised. All you need to do is remember my story—I willingly joined a startup after hearing a boatload of negative gossip from its CEO, and I joined on the heels of my own brother leaving!

  The rest of this story plays out as you might expect. I knew I had made a huge mistake as soon as I started. Every single crazy story I had heard over beers was now my reality. I spent just one year working there and it was rough.

  Frequent justifications are a signal that your reasoning has been compromised.

  I joined shortly after a large Series B round of funding. For many Silicon Valley startups, this round is extremely significant. It is a huge injection of capital that is dedicated to growth. New positions form, teams start filling out, and power-jockeying sky rockets to an all-time high. Times like these offer many opportunities to employees. After years of grinding as a tiny company, it’s no surprise that people are eager to step into bigger roles and have more influence. These are very delicate times; a bad outside hire or premature promotion of an old employee can seriously hurt the company. Suddenly, everyone—from every department—felt that it was now the appropriate time to start hiring and creating new teams underneath themselves. I could feel the anxiety; people wanted to get on the right rung of the ladder.

  Obviously, this kind of situation doesn’t happily resolve for everyone. To placate his employees, my friend—the CEO—started becoming very liberal with titles. All of a sudden, vice presidents began popping up everywhere. I’m no business management expert, but a top-heavy management hierarchy full of millennials didn’t seem very reasonable. Soon, it felt like everyone was a director or VP of something.

  With the injection of this new money, investors were now scrutinizing numbers. We had to hit revenue goals, and I could feel the stress building on top of the sales team. Slowly but surely, what they were selling started to stray away from what we actually had to offer. Sales reps were doing whatever it took to close the deal. Features were promised, solutions were oversold, and many customers were in for an unpleasant surprise. Our offering was a one-time-sale product. Since revenues were not recurring, the only thing that mattered was closing the deal.

  You can imagine what
followed—promises not matching up with reality is never a good look. I’ll spare you any more details, but more startup absurdity ensued. If you’re interested in more juicy stories, there’s plenty of reading material out there on Silicon Valley. It’s usually more fun to read about than to live through.

  Every experience—no matter how bad it may seem— is a learning opportunity. Even though I might have wasted a year of my life, I was left with these lessons that I can share with you today. I can’t help but feel a twinge of regret when I look back on this. If I had cleared my head in L.A., if I been patient, I could have steered my career in a better direction earlier. There are only so many career-changing moments in your life, and it stings when you realize you messed one up. But in the end, it’s all about learning and progressing.

  Every experience—no matter how bad it may seem—is a learning opportunity.

  If you’re rationalizing away red flags, you need to smack yourself and take a breather. Never leave a company for the sake of leaving. Take your time with any decision that affects your life. Finally, don’t dwell on your past blunders or your future prospects; keep your mind in the present and your thoughts will be clear.

 

‹ Prev