Something I’ve been reflecting on recently is what I know now compared to when I started my career. It’s easy to lose sight of how little I knew then (not to mention how far I have yet to go). When I first started working, I really wish that I had known what to look for and what to expect.

I’ve been fortunate in life to have had the opportunity to work with many kinds of people in a variety of occupations. My first job at 15 was working as a busser in a local restaurant. A month out of high school and I was in the Air Force, where I learned tactical satellite communications. Since then, I’ve done a teaching internship at a public school, I’ve worked at a poorly funded startup and a well funded one, I’ve experimented in an innovation labs-type environment, and I am now working at a tech company that has an Android team larger than the entire first startup I worked at.

Many people have had far more varied, more interesting, or longer careers, but I hope that my experiences can offer a bit of insight to others. Although you can learn and grow in almost any environment, it’s nice to have some hints along the way.

Understand What You Love

I love to teach. Seeing someone’s eyes light up when they “get it” for the first time is thrilling. I feel satisfied when I know my effort has helped someone else learn. Knowing that, I pursued my teaching certification and did an internship at a public high school. I think that experience opened my eyes more than I was able to open the eyes of any students.

I expected that the hardest part of the job would be the public speaking, everyone’s greatest fear, but that’s a skill you can learn like any other. What I started to learn is that the aspect of teaching that I loved was a more direct one-on-one or one-on-a-handful environment. Having 30+ students in a classroom, some of whom are homeless, on IEPs (Individual Education Plans are for students with specific learning needs), still learning English, dealing with abuse, or just in the class because nothing else was interesting… well, at that point, reaching just a few of those students per class each day didn’t feel like enough to me. I learned a hell of a lot but one of the most important things I learned is the importance of considering all aspects of the job and really understanding what you want (not just what you think you want).

When thinking about the things that you enjoy, dig into the details rather than floating on generalities (sure, you like to solve problems, but what kind of problems?). Do you enjoy working on projects alone or collaborating in big teams? Do you like a lot of definition around features or do you prefer to figure it out as you go? Do you prefer a user-centered design process or a traditional product manager directive? Do you want an agile environment or a waterfall approach?

Understand Yourself

It seems obvious to say you need to understand yourself, but I’ve found it to be one of the most challenging parts of life. We’re always evolving as individuals, and we don’t necessarily know how we handle situations if we haven’t experienced something similar. It’s easy to say, “If I saw a bomb, I would calmly look at the circuitry to cut the ignition wires. No big deal.” Confronted with the reality of a deadly bomb, the same person might run away as fast as possible while trying to simultaneously cry and scream only to realize that fear had caused a lack of bladder control. It’s easy to guess your response, but dealing with urine-soaked clothes when reality strikes isn’t fun (uhh… I’m just hypothesizing here).

I suppose most people reading this aren’t likely to make a career at bomb diffusal, so let’s look at something more meaningful. You want to be better at your job tomorrow than you are today. In six months, you should look back at the work you had done and realize how you would do it in such a better way that you’re almost embarrassed to look at it. That requires you to understand how you learn and whether you care about depth or breadth.

If you’re self-driven, you have a lot more flexibility with job options. If you prefer other means of learning, you need to consider how a potential job will support them. Will the company pay for you to go to a conference (or, at the very least, let you take the time off if you’re willing to pay for a conference yourself)? Does the company do any kind of on-the-job training? Is paired programming part of the usual routine? Are outside experts ever brought in for training? How do coworkers share what they’ve recently learned?

The other part to consider is whether you care about depth of knowledge or breadth? In other words, would you like to be an absolute expert in one thing or reasonably knowledgable about a lot of things? If you want a broad range of experiences, a startup can be a great chance to try many things. If you want to really dive into one specific field or skill, a larger company might be a better bet.

Stay Humble

Someone with less coding experience than I have recently said something along the lines of “It must be really frustrating to have to explain things to junior developers or listen to bad ideas all the time” to me. I told her that it wasn’t at all because it was an opportunity to teach. Say a junior developer makes a suggestion. That suggestion might not be ideal because the person hasn’t experienced living with that decision and seeing what problems it causes a year down the road. That means this is a learning opportunity for that developer (and anyone else around). The alternative is that maybe it’s a really good suggestion that should be compared to the current plan. Neither of those sounds bad, right?

People Make The Difference

You can find out most factors before even scheduling an interview and more after the interview, but the part I’ve always found hardest to judge is what the environment is like given the types of people you’ll work with. The interview process is artificial and terrible, so you won’t get a great sense of personalities there (and you don’t always interview with the people you would be working day-to-day with), and people aren’t necessarily honest since they don’t want to say anything that would make you turn an offer down.

I don’t really have any tips or tricks to figure this out, but I can say with confidence that I’d rather work on a mediocre project with great people than a great project with mediocre people. One of my jobs was really awesome and I worked on everything from prototyping Android apps to using machine learning on UAVs. From a technical perspective, the job was amazing.

Unfortunately, people were brought in who didn’t understand the agile process, wanted daily multi-hour meetings, and ignored the expertise of the employees. Everyone on the team suffered and productivity dropped. Despite significant effort, I felt that I couldn’t improve the situation and I ended up quitting to save my sanity. If you’re having nightmares about your work, you need to get out.

Money, Money, Money

You should get paid what you’re worth. That’s not an easy number to calculate, but you can research online what the salary range is based on your skill and experience to get a reasonable idea. Some companies will be more flexible with salaries than others, but you shouldn’t be afraid to be blunt about what you’re looking for when the negotiation starts. If the offer is only a little under what you’re expecting, you can usually get the company to come up (the price of interviewing is expensive and they’ve already decided they want to hire you). If it’s substantially under what you expect, don’t hesitate to say that it’s well under the range you’re looking for. I’ve had to do that before; it sucks but there’s no reason to waste your time trying to convince the company what you’re worth if the discrepancy is extensive.

Once you’re working at a company, expect regular raises. If you don’t get them, ask your manager why you haven’t been getting a raise. A lot of people have this expectation that the company should just pay what is right and give raises automatically, but that’s not how most companies work (especially smaller companies that don’t have an established policy). You have to learn to be comfortable fighting for yourself. It’s wholly appropriate to talk to your manager and say something like, “I feel that I have learned a lot in the past year and my skills have improved, but my salary doesn’t reflect this growth,” and begin to negotiate a raise.

Parting Thoughts

Ultimately, the “perfect job” is different for you than for someone else. It’s even likely to change as you grow. Learn what you want and make it a priority. Make seeing the actual workspace and meeting the team you’ll work with a requirement before accepting an offer (and, ideally, before even interviewing to avoid wasting time if there are red flags). Spend the time to really analyze what you enjoy in detail and don’t hesitate to ask a lot of questions.

In the end, you can learn from every experience. Stay positive, have fun, and keep learning.