There are so many things I wish I knew before I became a professional developer. Or a professional at all. I know I'm in a position of privilege as a white, college-educated woman who is mid-career and doesn't have much outside-of-work obligations, but I hope most of this advice reaches wider than just me. I wasn't a computer science major, I was a 19 year-old Government major when I got my first programming job. And I've made a lot of career mistakes: I've trusted the wrong people, taken the wrong jobs, worked in toxic environments, and been way underpaid and undertitled for most of my career. But I've also done some stuff right, which is probably why you're reading this right now. In addition, I've done a lot of hiring and worked with a lot of bootcamp students, so I've been a witness to a lot of other people's careers too.
You do not need to do everything on this list. Nor do you need to do any of it. I wish I at least knew that some of these things existed and were things people do earlier in my career, even if I wasn't doing them. So I wrote them down for you in hopes that it may give you a leg up.
There are a bunch of subfields within programming, from video games to websites to desktop apps to sending people into space, not to mention management and teaching. Find what fires you up and makes the most sense to you. There isn't a single path to success -- whatever success even means. If you're interested in hearing about more, here's a podcast episode discussing a bunch of different career paths.
Success looks incredibly different to everyone. Some people enjoy recognition, others want to make tons of money, others want really good work life balance. What's most important to you will not be the same as the person next to you. Don't compare yourself to anyone else, and don't hold yourself to anyone's standards. Your priorities are valid. Find work places that align with your values and priorities.
What do you want in the future? What's important to you? Is it a certain salary? Or work life balance? Or a certain title? What times do you work best? What culture is best for you? These things may evolve over time, but having them on paper means you can come back and revisit over time. Then you can focus on doing things that get you closer to your goals. Also, remind yourself of those non-negotiables when you get an offer so you can make sure you're going to be in a situation to succeed.
Good management that prioritizes your interests and goals is so important for creating a career where you're growing and thriving. Management makes or breaks roles. Find a manager, and a team, who is looking out for you and wants you to succeed. It will lead to a more functional team and to an environment where you're probably happier.
Just because the perfect job for you doesn't exist on a company's website doesn't mean it doesn't exist. I got my first tech job through cold emailing a startup asking if they had internships
Online application portals are notoriously hard to break through. I remember hiring for a single position that had hundreds of online applications. Getting through that process without a connection is incredibly difficult -- possible, but difficult. I would advise trying to make connections or working with recruiters so that you can move to the front of the line.
I've seen a few people create "searching" pages when they're looking for new roles that feature their requirements and interests in a new position. Almost like a job description but from the perspective of the employee instead of the employer. I haven't done this myself yet, but if I do a job search at some point I definitely will.
If a company seems toxic, is disorganized, or makes you jump through a million hoops in the interview process, the company is probably similar to work for. Interviews are a two way street, and you should both be courting each other. Make sure you actually want to work for them too. What does 18 rounds of whiteboarding interviews really say about the company? They're selective or inefficient and nitpicky?
If you get asked a question like "Do you know React?" and you don't, be honest. Don't lie and say you know something you don't -- it will be easy for them to figure out you're being dishonest. That being said, don't just say "I don't know it" and leave it at that. You can instead say, "I don't know React yet, but I do know Vue and I know that they both have similar component architectures", or "I don't know React yet, but I love learning new things and would be excited to learn on the job". Admit what you don't know, but express your willingness to learn.
Most interview questions are there to see how you think. So show that! Explain your thought process, draw diagrams, write out the intermediary code, explain pitfalls in your approach, etc! Be vocal, and ask clarifying questions. That's part of being a good developer after all!
Negotiate everything you can. Job offers, content creation, work hours, remote days, job duties, benefits, compensation, etc. can all be negotiated. Use your wins to give you confidence and as a tangible list of accomplishments. The format I normally use is:
- Thanking them for the initial offer, telling them I'm excited about it
- Telling them what I want to negotiate
- Listing my "wins" that lead to me getting what I am negotiating for
- How I plan to help the company in the future
- Sign off
It has worked really well for me.
On a related note, you may get asked in interviews how much money you currently make. Don't answer this question, in fact it's illegal in a lot of states. You can spin and answer it with "Here's the number I'm looking for in my next position." instead. If they push, tell them you don't answer that question.
You have experiences outside of tech that are valuable, contribute to who you are, and can contribute to a company as well. Your customer service skills translate to client management, your teaching experience makes you a better mentor, your previous career in the insurance industry will give you subject matter expertise to help make the product better. I can keep going!
Don't undervalue your previous experience, sell it. If you can find a job that hybridizes your interests or previous career and code, you'll be a huge step ahead. Your non-programming skills are incredibly important, don't ignore them.
Read through the full instructions, take notes if you need to, and read them again before you submit the challenge. Make sure you're doing everything required and you're not missing anything. Show your attention to detail!
Even if the challenge doesn't ask you to add tests or styling, or x or y feature, if you have time add those things. They will make your challenge stand out.
This probably goes without saying, but write clean code that is well documented and follows the best practices for what you're working in. Use a linter, add some comments if needed, and delete or .gitignore unused files.
I have a private GitHub repository where I take notes on everything I can. It allows me to create a searchable knowledge base that I can come back to instead of searching over and over again or just purely forgetting. I know a lot of other people also create engineering journals where they write about what they do each day and what they learn, I used to do something similar and I made a cron job on my computer to populate parts of it everyday.
Similar to tracking your knowledge, track your wins. First, if you're having a bout of impostor syndrome, you can come back to them and think of all the awesome things you've done. And you can compare your current wins to your old ones -- you've probably come pretty far.
I keep a document cool things I've done at work, side projects, speaking and writing gigs, positive feedback on my job performance, nice letters from students, screen shots of nice comments on my blog posts, etc.
On the other hand, when you're negotiating at a new job or for an internal raise or promotion, it will come in handy to have a list of the things that make you a great candidate.
I think programmers in general like to be challenged -- we enjoy learning new things and using our problem solving skills. I personally struggle when I'm not learning new things or stretching my brain. So, I make sure I'm still challenging myself to grow code-wise. At one job where I had a lot of ownership of my projects, I made rules for myself for each project, like implementing Sandi Metz's rules or doing strict test driven development. I've also made myself blog about learning new technologies or solved code challenges everyday to keep myself consistently learning. Keep growing and expanding your skill set, both for your career and for yourself.
The tech industry can be really toxic, especially for people who are members of underrepresented groups. Know that people treating you poorly isn't your fault. The job search process can suck, but it is worth it to try and move in order to get out of a work situation where you're being treated poorly. Changing things internally is really hard, and most companies you want to work for aren't going to judge you for a short stint somewhere. Your mental health and safety is more important than loyalty to a company that isn't showing that back to you. Do what you need to do to get out, if at all possible, and don't let people minimize your experiences.
I know that this is easier said than done, and finding a new job is hard. If you're in this position please reach out to me and I'll do what I can to help. Or just be a person to vent to.
I thought that burnout was impossible for me, I'd been working wild hours since my teens and hadn't felt it at all. Until relatively recently. It can be spurred by different things for different people. For me, it was feeling like my work didn't matter and wasn't being acknowledged. Have a life outside of work: hobbies, friends, and families are all important. You'll probably be able to get more done with more balance too. And that balance will look different at different points in your life. You're not weak because of it, and you can still be successful without working all the time. I just read "Becoming Super Woman" by Nicole Lapin, and I really enjoyed it -- it has a bunch of exercises to work through and everything.
If there's one thing that I wish I had done earlier in my career, its getting involved in the tech community. I started coding in a computer science classroom where I didn't feel like I belonged, but getting involved in the wider industry through blogging, attending meetups, and social media has made me feel so much more included. In addition, it can help with establishing a "brand" and demonstrate your knowledge. Not to mention how much it can help others.
I wrote a lot more extensively on how to get involved with the tech community here.
The best way to really learn something is to teach it to someone else. You have to know something in-depth to explain it well -- it's much harder than you may think. Plus teaching can help you meet other developers and display your own knowledge! It's a win win!
Your portfolio is key to communicating who you are and what you've done. They are super helpful if you're looking for your first job, so you can show off the projects you've built and what you're interested in. If you're looking for speaking opportunities or to advance in your career, they're great for that -- it's what I use mine for now. Plus, they're a fun creative outlet. Do something fun if you can, it will stand out more. If you're looking to make one, here's more of my advice!
Getting referred for jobs makes it much easier to get in the door at companies. I have gotten almost all of my jobs through people I know. Online applications when you don't have a reference are usually a lottery -- there are tons of applicants and filtering them is incredibly difficult. It's really important to network and use your connections to find jobs.
Along the same lines, it is much better to make mutual relationships that are not just about a certain position, the person will be more likely to vouch for you, not to mention the other benefits of genuine friendships! One-sided relationships aren’t likely to be long lasting and overly rewarding. Both parties should be engaged and benefit from the relationship.
Go to meetups, go to industry events, interact on social media, and build a network before you're looking for a job so that network will be there to support you once you're ready.
Plus you'll have new friends -- some of my closest ones are from this industry now.
It can be tempting to learn all the shiny new things that come out, but it isn’t necessary. Learn one thing in depth, and then from there carry that knowledge over to other topics. Instead of learning trying to learn everything, a better strategy is to focus on T-shaping your knowledge: go really in-depth on one thing and become an expert on it and then from there build more knowledge in less depth on other topics.
I hope some of the advice above was helpful, you don't have to do all of it. Or any of it! But, these are things I wish I knew before I started out in the industry. Know that different people take different paths and that's okay. I teach people to code at a bootcamp, which is often thought down on by other programmers. But I love it, and it's a job that's fufilling to me. That matters to me more than any prestige that may come from a fancy title at a big tech firm. Prioritize what matters to you.