From Public Sector To Senior Software Engineer: How I made the Transition
I joined the US Navy after graduating from college. The service commitment is 5 years. At the end of my service commitment during my terminal leave, I obtained a position with a mature startup in NYC as a Senior Software Engineer. There were a lot of bumps in the road during the last five years, especially the last 3 weeks of my transition out of the Navy. I will share the story of how I prepared for my career transition and shed some light on how job search works today.
Table of Contents
1. Ask for What You Want At Your Current Workplace
Because I got the ROTC scholarship to pay for college, I knew I was going to work in the public sector. Working in the public sector has some downsides. Specifically, you don’t get as much exposure to in-demand skills that are valued by the private sector. Some public sector positions are more similar to a career in the private sector than others. For the Navy, that’s Naval Reactors.
I received a Navy ROTC scholarship which came with the obligation to serve active duty in the Navy as an officer for five years after graduating. There were a few service communities to join and most of them entail going on deployment on a ship.
There’s an exclusive program called Naval Reactors which is run by a four star Admiral and jointly funded and operated by the Department of Defense and Department of Energy. Working at Naval Reactors means:
- You don’t have to go on deployment and have nights and weekends off to work on side projects and learn up-to-date skills to support a career change,
- You make technical decisions and can work on a variety of engineering problems and learn skills which are transferable to the private sector.
During my senior year when we put in our preference for what job in the Navy we want, I wanted to join Naval Reactors. The only problem was my GPA wasn’t good enough.
Naval Reactors only invite midshipmen graduating with the best grades in an engineering major for an interview. You cannot have anything less than a B in any engineering class. Typically, people who get selected for an Naval Reactors interview have a 3.8 GPA at the time of the interview. I had barely a 3.5 GPA (due to mostly fluff classes I took) and some C’s in my engineering classes.
So I wasn’t good enough to pass the pre-screening for Naval Reactors. How did I end up getting hired? I asked.
I wasn’t good enough to get an invite for Naval Reactors but I was good enough to get an invite to interview for a Nuclear officer position on an aircraft carrier. This position is also something that requires pre-screening and coming to Naval Reactors for technical and Admiral interviews but bar for the pre-screening is lower and the interviews are easier (two technical interviews instead of three and questions are easier).
I accepted the invitation to interview for the aircraft carrier nuclear officer position but I asked my ROTC commanding officer that I’m really hoping to get into Naval Reactors. He told me that my grades weren’t high enough but he could put a note in the interview package of my desire to work at Naval Reactors.
I did my two technical interviews (physics and math whiteboarding) and waited for my turn to interview with the Admiral. The Admiral looked at my transcript and then the notes that I was getting my masters degree at the time of the interview and my interest to work at Naval Reactors. He asked me what projects I was working on for my masters degree. I was taking four masters level engineering classes at the time (my last semester of college) and I gave him the one minute breakdown of each project. He was very impressed, then asked whether I’d like to have a position as instructor at the Naval Power School in Charleston, NC.
The position offered a way out of going on deployment but did not meet my other goal of having a role that lets me learn skills valued by the private sector. So I asked the four Admiral if I could have a job at Naval Reactors. He sent me to my third technical interview and I did well in that and I got the job.
When I started my Naval Reactors career, I was put in a department which focused on mechanical engineering problems. Although fluid dynamics, structural mechanics, and material science are interesting, the things I was getting good at had little to do with software engineering. After almost two years of working there, I asked to be transferred to a different section which focused on instrumentation and control and lets me work on software engineering problems.
Here’s the moral of the story: If you don’t like what you are doing, you can ask for a career change without leaving your current work place. Most companies, even the US Navy support internal mobility and want to give you the best job so you’d stay. Employee turnover is expensive.
2. Prepare Early. Build Your Brand
If you don’t work at a software company and you don’t write code at your job, how do you convince other people that you are an experienced software engineer?
My strategy was to start my own software company, LooseLeaf. It gives me the motivation to code every day and the credibility to call myself a software engineer.
Dream jobs are not found. Dream jobs are made.
Learning from these books made me a better software engineer and reinforced my understanding of the underlying technologies which power my apps to improve the quality of the apps I build.
Additionally, I regularly blog on Medium and my own blog about things I learned building a feature of my apps. Acquiring readers and followers on Medium and having people send emails to me thanking me for inspiring them with my blog posts really helps with motivation and the sense of being a legitimate software developer.
3. Work Hard Despite Negative Feedback
It’s easy to work hard if you are surrounded by supportive friends, family, and coworkers and you see reward for your hard work. What if that’s not the case? What if you get punished for working hard?
To launch LooseLeaf and close my skills gap, I spent almost every evening after work coding until well past midnight. I did that for 4 years. In order to have the energy to do that after a long day of work, I would drink a lot of coffee at night, which has the side effect of keeping me up until 3am. On a regular basis, I showed up late to work. The office policy is to be in the office by 8:30, but I’d regularly show up at 9:30. My manager was not happy and I had many talks in his office about my tardiness.
In my mind, I was not doing anything wrong for showing up an hour late because I was getting my work done at Naval Reactors and was doing a very good job. If there are no meetings scheduled before 9:30, I rather spend the extra hour getting enough sleep so I can feel productive at work the next day. However, coming in late to work and having the talk with my manager still caused a lot of anxiety for me.
In addition, there were social consequences. I kindly declined most of the invitations to socialize with coworkers at happy hour, or house parties with friends and families because I needed the time to spend coding. I turn every federal holiday long weekend into a hackathon.
What I learned from this experience is that we all have 24 hours a day. If you do one thing, that means you can’t do other things. It’s up to you how you spend that time and decide what’s more important. I could have spent my evenings relaxing and get a good night sleep and show up early to work to please my manager, but that means I lose 30 hours per week of time on practicing my skills and working on my relevant work experience.
4. Get into a habit of coding
I find two methods very useful in getting me into a habit of coding every day. Two things that really helped me:
Read my other article about why it’s worth the investment to pay for a membership to a co-working space.
The official rule for 100DaysOfCode is to code for at least 1 hour every day for the next 100 days and publish an update to social media. I do a variation of 100DaysOfCode which I call 100DaysOfCommit. The rule is I need to commit at least once to a repo hosted on Github every day for 100 days so my Github contribution chart shows mostly green.
This is what my Github contribution chart looks like the day before my first day of work as a senior frontend engineer at Smartling (my first job after Naval Reactors)
The Github contribution chart is great for accountability and signaling to recruiters and companies who are hiring that you are serious developer.
5. Start Conversation with Recruiters Early
There are two types of recruiters: Those who work for the companies that are hiring and those who work at independent agencies like JobSpring and Workbridge whose mission is to find qualified candidates and get them interviews with companies.
Work with the second type of recruiters and start conversations with them as soon as you can. Let them help you prepare and get hired. They collect a big commission if they help you get a job offer and you accept the job offer. How much they get paid is a percentage of your annual salary so it’s in their interest to get you get as much money as possible. Many of these recruiters found me on LinkedIn. I started conversations with them two years before the end of my five year military commitment, explained my situation and asked them for feedback on how competitive I am in the job market and what I can work on to be even more competitive.
6. Questions You Should Be Able to Answer Before the First Interview
Below are a collection of actual questions asked during phone interview and my actual response. A lot of these questions were standard questions that are always asked. Thanks to A-list, JobSpring, and Workbridge, I’ve interviewed with 30 or so companies. I did not provide the most optimal response for my first few interviews but as I got more experience interviewing, I learned how to give the best response to every question to get the “wow” response from the interviewers 95% of the time and impress them enough to get you to the next interview. A lot of these questions were asked by almost all the companies I talked to. I’m sharing these questions and the best response I give which awed the interviewer.
What’s your strongest coding language?
The company asks you this question (1) to see if you are a technical fit for their stack and (2) to conduct the technical interview in. You need to pick a language that you know really well and can write clean code and solve algorithm problems with.
Tell me about you.
If you are interviewing to join a Buddhist monastery, you may want to show some humility and tell them how much you don’t know and want to learn and be enlightened. For any other job interviews - BRAG.
Bragging is the most optimal response to this question. Companies who ask you this question want you to tell them how impressive you are. you may They brag too about themselves. A large percentage of companies who reached out to me on A-List name drop quite a lot in the invitation to interview. The most extreme example was:
We just raised a Series A from Founders Fund and our engineering team includes Amazon, LinkedIn, and Palantir alums.
Another way to think about it is it’s not bragging. It’s marketing. You have 5 minutes to convince someone why you are awesome. Tell them how prestigious your previous position was. Tell them your most impressive accomplishments. For example, I got really positive reaction from my interviewer when I told them:
- I went to CMU (well respected by the high tech community) and got a masters degree along with my undergraduate degree in 4.5 years.
- I completed all of the Scala courses on Coursera on my own in order to learn functional programming and level up your coding skills. I got perfect scores on all programming assignments which you submitted to the autograder (shows how Gritty you are and committed to learning).
- I built a complicated iOS game in Objective-C in 2 months while working at a full time job which got hundreds of thousands of downloads even though prior to starting the project, I never built an iOS application or worked with Objective-C before.
- I built and deployed an entire production-grade web application by myself, including front-end, back-end, and DevOps. I used only latest and greatest in my stack. I built three prototypes and presented these prototypes at startup conferences and startup hackathons to get feedback on the product I was building and understand what problem to solve.
When I started interviewing with companies, I would tell companies that I worked at Naval Reactors but it was just something I started doing as part of my military service. Because it was a 9-5 job, I had evenings and weekends to work on my side projects. The interviewers were impressed that I took the initiative and dedicated my free time in the last 5 years working on side projects which had nothing to do with my day job. But they were that impressed with Naval Reactors.
It was a missed opportunity to gloss over Naval Reactors. Even though it had little to do with the roles I was interviewing for, I could have used the exclusivity of Naval Reactors to implicitly brag about how smart I am.
After realizing that, I started telling the interviewers that Naval Reactors is very selective and they only invite the best graduating engineering students with top GPAs from universities all over the country for the interviews. They only have two or three open positions each year and to get the job offer, you have to do well on three technical interviews, followed by an interview with a four star Admiral. After I said that, every interviewer’s response was a clear “Wow”.
If you could create a position for yourself at [insert company name], what would it be?
A variation of this question is What do you want in your next role?
The response depends on which company you are interviewing with. Read the company’s website and the job posting before you start interviewing.
Google asked me this question and my response was:
I want my time to be split between working on a big project like Gmail and working on a side project that could be the next Gmail. The big project helps me get exposure to a big codebase, work with the brightest at Google and become a better software engineer, while the side project lets me be creative and take lots of risks working with cutting edge technologies and create something transformative.
In response to a very early stage startup:
I want a role that gives me start-to-finish ownership of the engineering side while gives me the chance to be more than an engineer. I’d like to contribute to the business development, product design, hiring, and marketing for the company as well. I’d like a role that lets me wear many hats and experience what it’s like building a big company.
In response to a medium size startup with a very product-centric mission:
I envision my day to be spent collaborating with other engineers and designers, figuring out how to build a great user experience for our customers.
You get the idea.
How many hours a day do you spend coding? Why are you passionate about coding?
Google asked me this. My response for the first question was:
I have a co-working space membership. After I get off work, I go to the gym, then I go to the co-working space from 7pm until 10 or 11pm to work on my side projects. Sometimes if I’m solving an interesting problem, I keep coding until 3am.
For the followup question, my response was:
It’s empowering. If you see a problem, you can come up with the solution on you own with just your computer You don’t need anyone’s permission or getting a loan from the bank to start coding and solving the problem that you care about and the solution you come up with generally has very high social impact. For example, I volunteer for this non-profit in DC whose mission is to connect the homeless population in the DC metro area with services. The DC government provide unlimited free SMS to homeless people. The non-profit provide software solutions to let homeless people receive SMS about services around them (for example, free food giveaways, job fairs). Everyone has seen and interacted with a homeless person once in their life. I could give a few dollars to a single homeless person, which is not a scalable solution to help homeless people, or I can spend my time building a microservice for this non-profit, which helps countless homeless people and also gives me a testbed for a new technology like AWS Lambda which I’ve wanted to try out.
What kind of problem do you enjoy solving?
Tell me what you’ve been doing at your last job and why you are looking for a change now?
- Good Response: I’m done with my military obligation. Want to pursue my passion in software engineering.
- Good Response: I’ve worked at a bigger company. I enjoy working there but I’d like to join a smaller company that’s more fast paced, takes more risks, and focus on developing cutting edge technology with high social impact.
- Bad Response: I’d like a higher paying job. I don’t like my boss/coworker. I don’t enjoy what I was working on.
What do you look for in your next role?
- Join a company that invests in potential rather than credential
- Build reliable, scalable systems
- Work with coworkers who are passionate about their craft and are tech visionaries
- Social impact
- more hands on, infrastructure, architectural design, building infrastructure for hyper growth. Scaling.
- Problem is so interesting and important that you have a lot of fun and feel a lot of purpose in the thing you work on.
- Building a great product for people who are not tech. Consumer product
- work on a new product. Not something that is just a repackaging of something that exists. To use Peter Thiel’s terminology, I want to work on the zero-to-one products.
- Another important factor is team. Team dynamic, good relationship with coworkers and ability / flexibility to do more than the job description is important. I want to be a team member, not another dev. Team really affects day-to-day happiness.
- A third important factor is outreach. Working in a company that cares more than its own profit margin, pleasing its customers and/or investors. Community outreach, hosting meetup events, open sourcing are all things that make a company worth more to the world than its stated value prop. I want to be part of companies that commit to collaborating and having a presence with the broader programming communities. I believe it improves employee happiness, attracts outside talent (great for recruiting), and improves the company brand.
- I’m not religious about specific domain, languages, or framework. I’m driven to make the world more compassionate, innovative, and sustainable.
- being challenged every day, pushed to the limit but having a lot of fun. Learning new things everyday, including different and better ways to think about a problem
- Everyday, doing things I’ve not done before. Surrounded by peers and mentors who push me and support me to maintain healthy stress and avoid burnout
- learning a lot. Being asked “can we do better”, not being told how exactly to do things better but encouraged to work on my own solutions by applying creativity
- Having an engineering culture of devil’s in the details, applying engineering rigor in everything we do, not taking shortcuts, treating problem solving not as application of boilerplate or following a cookbook
- take idea to reality in quick sprints and being able to test your hypothesis
- Humility and no shame in being wrong but treating mistakes as a learning opportunity rather than a failure. Not being dismissive about dissenting opinions. Welcoming dissenting opinions.
- Company leaders are transparent about what the goals are and sharing company news and strategic visions frequently to help the engineers calibrate their problem solving and prioritize appropriately to align with the overall vision
- follow through. Young companies have a lot of new initiatives occurring simultaneously. Need to let people know rationale for prioritization
- having a company of teams working in sync, going in the same direction
Open ended technical question.
If you are interviewing at a web technology company, sometimes they will ask:
Tell me what happens when you visit a website.
With the follow up questions
Do you have any questions for me?
Take the opportunity to ask as many questions you can to understand what problem the company is solving and why they are solving this problem.
Companies are not hiring someone to get the job done. They are hiring someone to join their team, to build a company together. They want someone who can get along with the rest of the team and show a strong interest for the company’s mission. They want someone with whom they can have a conversation with and can work well with others.
To be interesting, you have to be interested.
I’ll give you this example which reinforces this point:
There was one company that was really excited about me and was willing to move very fast and fast track me in their interview process after the initial phone call. I talked to the CTO during the 30 minute initial phone call. The phone call was set up to have him talk 10 minutes about what the company does have me spend 10 minutes about me. Before the interview, I had very little knowledge of the industry for which the company is creating a software solution for. As he was explaining what the company does, I continued to ask questions about the industry and for clarifications on why the existing process is broken and what this company is doing to make the process better.
Pro-tip: Don’t feel bad about interrupting to ask a thoughtful question. It’s a good idea to prepend it with “I’m sorry for interrupting but I’m really interested in learning more about …”
For every question I asked, he responded with “That’s a very good question”. We ended up spending all 30 minutes talking about the company. Occasionally, I would comment by citing an analogous problem I encountered at my last job or in my personal life to relate to the problem that they are solving. The CTO spent most of that time talking. We ran out of time to talk about me but he was so impressed by my thoughtful questions that he wanted to set up the final round on-site the next day in the evening (have his engineers stay after hours) to accommodate my schedule. The most amazing thing was that the company did not advertise any open positions online. Their AngelList profile says they are not currently hiring.