- After the Offer, the Tables Completely Turn
- The Gear on Day One
- My Team: Grid Systems
- A Two-Week Sprint Rhythm
- The Tools We Used Every Day
- Thirty Minutes With My Boss Every Two Weeks
- Sitting on the Other Side of the Interview Table
- The Rhythm of a Workday
- SolarCity’s Little Perks
- You Are Supposed to Struggle
2015 is entering its last few days. While making my 2016 New Year plans, I am also looking back on my 2015. In summary, this was a year of adventure and challenge. I moved from Maryland on the East Coast to California to chase a dream, and the process brought every flavor with it: sweet, sour, bitter, and spicy. Some of those tastes you probably have to experience yourself to understand. Many friends thought my decision to quit my job was risky, that I should have searched slowly while still employed. But I knew I did not have the luxury of taking it slow like friends who started programming in college (or even earlier). As a self-taught career changer, I was already far behind. Once I had evaluated the plan and decided to do it, I was going to bet all my chips on it. Of course, if it failed, it would mean spending all my savings and achieving nothing.
If you have read my earlier posts about job hunting, you know my job search was more thrilling than I first imagined. I went from secretly envying the work environments and work content of the big Silicon Valley tech companies to actually knocking on the doors of Google, Facebook, Apple, Amazon, Yahoo, PayPal, Uber, Box, SolarCity… to interview. The carefully designed interviews at these famous companies were themselves an enjoyable process. Being tested by top engineers showed me my strengths and weaknesses more clearly, and confirmed even more that this was the road I wanted to pursue.
In the end, I joined Elon Musk’s company: SolarCity. For someone with an environmental science background who cares about environmental protection, being a software engineer at a nationally known, fast-growing solar company was the best possible choice for me!
An earlier post asked readers to fill out a survey for me, and many friends responded. The topic most people wanted to read about was the daily work of a Silicon Valley engineer. Well… before this, I worked at a startup in Virginia, and so far I have only worked at one Silicon Valley company. Let me start by sharing what felt new and interesting about working in Silicon Valley this year.
After the Offer, the Tables Completely Turn
Once I passed the final onsite interview, if the company wanted to give me the job, things got interesting. Our positions completely reversed compared to when I was applying. The company wanted me to sign the offer quickly, every question about the offer got a fast answer, and HR’s attitude went from already good to excellent, offering every incentive and appeal to persuade me. After the sustained pressure of job hunting, being courted in reverse was a real treat.
The Gear on Day One
The equipment I received on my first day was Apple’s highest-end 15-inch MacBook Pro at the time. I had often seen Silicon Valley tech job postings saying they would take you to the Apple Store to buy whatever equipment you wanted. When my boss handed me the Mac, he also said I could pick any equipment (Boss: “Oh… I forgot to ask you, but you definitely can get a Windows laptop…”). But I was already used to Mac, so of course I happily took it right away.
My Team: Grid Systems
I belonged to the Grid Systems (the power network) team inside SolarCity’s software engineering department. Grid Systems could be further divided into Embedded, Infrastructure, Controls & Analytics, Business Application & Data Transfers, and Customer Applications. I was on the Customer Application team, mainly responsible for frontend development (and a little bit of backend). The nice thing about a big company is that responsibilities are divided very finely. Unlike a startup, you do not have to do end-to-end development. If my work needed backend data, I could go directly to the teammate in charge of that part and ask them to provide it.
At first, seeing more than 30 Macs on my team made me think the company really spent big. But once work actually started, with a pile of tasks running on the Mac at all times, plus a VM and all sorts of other things, the machine sometimes lagged too. A lower-spec machine would probably have been even slower. I think Silicon Valley companies nowadays give software engineers top-spec laptops. The development time engineers save every day adds up, and it is far more cost-effective for the company than saving a few hundred dollars on a laptop.
Besides the Mac, I also got two 27-inch Asus monitors, a Mac docking station so my Mac could quickly connect to all the peripherals, and a keyboard and mouse I picked myself on Amazon. My desk was not an automatic standing desk, but it was at standing desk height, paired with a comfortable office chair I chose. All told, onboarding one engineer probably costs roughly 4 to 5 thousand US dollars. Silicon Valley companies budget generously for software engineers and take good care of them.
A Two-Week Sprint Rhythm
Our workflow was similar to most Silicon Valley companies: Agile software development, with a sprint every 2 weeks. On Wednesday there was sprint planning to plan the next two weeks of tasks, and on the Tuesday two weeks later, demo time, when everyone showed their work results to the whole team. Starting on Wednesday and ending on Tuesday was chosen because starting Monday and ending Friday often means people take time off and miss things. Starting and ending midweek made it less likely to have attendance problems.
Every morning at 10 we had a standup meeting. The meeting started with a warm-up game, and people often teased me for playing all day long… After the warm-up, the meeting was mainly for reporting what I did yesterday, what I planned to do today, and what blockers were in the way of my development work today. After everyone reported, we went back to our seats and started working.
The Tools We Used Every Day
Basically, the tools we used every day were:
- Bitbucket: the code management platform. Our project’s source code, commits, and pull requests all lived here. The equivalent platform other companies might use is Github.
- JIRA: all the tasks in a sprint were here, a place for everyone to track work progress. If you use Github, you can use waffle.io to track progress.
- Slack: the team communication platform. Channels organized by topic let the relevant people communicate and exchange information, greatly reducing the use of email.
- Zoom: the video meeting tool. Every meeting room also had an ID, so you could conveniently join meetings remotely. For the morning standup, teammates working remotely joined through Zoom.
Thirty Minutes With My Boss Every Two Weeks
Every two weeks, my direct manager had a 30-minute meeting with me, mainly to see how I was doing, whether I had any suggestions or complaints, whether I wanted any adjustments to my work, my short- and medium-term plans, and so on… This made me feel that SolarCity genuinely paid attention to how its employees were doing. A few of my suggestions were later adopted, which made me feel valued.
Sitting on the Other Side of the Interview Table
Starting last month, I also began helping interview candidates. Interviewing people as the interviewer is an interesting experience. Sitting on the other side of the table asking questions, you see all kinds of things you never noticed as a candidate. After our team finished interviewing a candidate, we would meet to discuss their performance, mainly looking at three areas: communication, culture, and technical skills. We hoped to find someone with at least one area so strong it left a deep impression on us, and above-average performance in the others. So far, none of the candidates I have interviewed received an offer (one of them even had a UC computer science degree). I used to think Silicon Valley companies were all short on people and sent out offers constantly to grab talent. But my team believed that if a candidate did not meet the bar, it was better to leave the position empty, even if it took half a year to find the right person. It taught me that ability is still the most important key to getting the job.
The Rhythm of a Workday
My work hours were roughly 9 to 6. Because our standup meeting was at 10, many teammates did not show up until almost 10. Actually, nobody cared what time we arrived at the company or how long we worked there. After all, coding can be done at home too. Because too many people at the company needed him, my direct manager sometimes worked from home or hid in a meeting room to focus.
Most of our time was spent developing in front of a computer screen. When you finished a task, you submitted a pull request for teammates to review. After the pull request was approved, it could be merged into the dev branch, and at the next release it would merge into the master branch. The merged tasks then went to QA for testing. Sometimes we also helped teammates test tasks that were less customer-facing.
SolarCity’s Little Perks
Finally, a few interesting little things about SolarCity. All the tables in our meeting rooms had solar panels as desktops, so even if you had not installed solar panels yourself, you could see and touch them every day. We did not have free lunch, but we had free breakfast cereal, all kinds of snacks, soda, coffee and tea, and fruit was available 2 to 3 days a week. Recently everyone had gotten a bit tired of the snacks, and we hoped the company would rotate the selection often. Every week there were free meditation sessions and fitness bootcamps to join. Overall, SolarCity employees were relatively young on average, and the gender ratio was about 1:1 (the software department’s ratio differed quite a bit). The work atmosphere was cheerful, with frequent happy hours, team outings, and holiday events. Everyone worked seriously but also knew how to relax and have fun.
You Are Supposed to Struggle
I often heard a saying that sums up a software engineer’s daily work: “You are supposed to struggle!” Most of the time, we software engineers are troubled by problems big and small, scratching our heads and unable to find the answer even on Google. But on the other hand, this is also what makes software engineering interesting. Facing all kinds of challenges, the process of solving them, and the final product all feel like creating something new. After all, a software engineer is kind of like a magician. :)
This post was originally published on my former blog, 「半路出家軟體工程師在矽谷」, on December 30, 2015. The blog is now offline, and the text is preserved via the Wayback Machine. It has been lightly edited for this site.