As some of you may know, over the last couple of months I've been working on my startup, Nightingale. By working on it, I've begun to appreciate some of the lessons I learned while working at Square. I've listed them below by category:
Before starting at Square, the largest team software project I had worked on was my FIRST Robotics team at my high school. At its peak, we had at most 5 programmers working on the project, but usually we were working with only 1 or 2. Our versioning system consisted of sending zip files of the code base to the entire software team at the end of the night. Branches? We handled those by manually merging changes. Outside of Robotics, all of my coding was as a lone contractor, so I never bothered to research versioning. I arrived at MIT and worked on FanFuser where, again, I was the only coder.
Suddenly, I found myself at the end of freshman year, and I had still not learned how to use git or svn. I had created a GitHub account earlier in the year, but didn't understand its value. Two days before my start at Square, I decided it'd be a bad idea to come in with no experience, so I started the Git Immersion tutorial.
I sat down for my first day of work on the Android engineering team next to Eric Burke. He walked me through their code submission cycle. I pretended to know what a pull request and jenkins were. For the first few weeks there was a lot of git commit --amend as I figured out what Jira meant, but somehow, no one was pointing out my severe lack of understanding, and I began to figure my way around the code base.
Now, 6 months later, I start a git repo every other week and am always teaching others the usefulness of git add -p. Nightingale currently follows the same development cycle as Square: Pull Request --> Code Review --> Jenkins Build --> Merge to Master.
In the spring of my freshman year, I was playing around with Android Development and decided to learn how to connect the app with a server, which involved making an http request. I read the following post which led me to read up more on Jesse Wilson, the author. I eventually stumbled upon this video teaching about Guice (A library created by Google to support Injection in Java). The creator of Guice, Bob Lee, introduces Jesse who explains the benefits of Guice. When I listened to the video, I was like, wait a minute, I was just interviewed by Bob Lee the other day! Known as Crazy Bob, he's the CTO of Square. It suddenly dawned on me how amazing the Android team at Square really was.
I met with Bob the first day I got to Square. I was originally assigned to work on their device firmware, but, after taking a semester-long class on Android development and learning about Bob's contributions to Android, I knew which team I really wanted to be on and immediately switched.
Next, I started to do more research on the team, to see who else I was working with. The first person I started researching was Jake Wharton, who, according to AppBrain, has the 11th most used Android library in the world. I quickly realized I was working with some big hitters.
Halfway through the summer, I heard we had an awesome new hire come onto Android. For the first couple of days, I didn't get a chance to meet him, but I was amazed at the huge amount of commits he was making even in his first week. I asked Eric to introduce me to this new programmer, and I felt a sense of deja vu. The new programmer was Jesse Wilson.
To say Square has a rockstar Android team would be an understatement. They have some of the top contributors to open-sourced Android and Java libraries in the entire world, and it was very humbling to work alongside them. Now, when working on the Nightingale Android app, whenever I run into difficulties, I read the Square blog or shoot off an occasional email to Jake
As mentioned above, before this summer, I had never worked on a large software team, so my first ever standup meeting occurred on my second day at Square. I loved those meetings because they were capped at 15 minutes and were a great way of learning what my team was working on. Another favorite was the retros, where every other week, the entire team would get together and talk about the product roadmap for the next six months. Anyone was allowed to chime in and voice their opinion on where the product was headed. I was amazed that as an intern I was able to voice my opinion and question the decisions of those made from higher up.
A key facet in Square's culture are the weekly all-hands meetings known as Town Square. They take roughly an hour, but they were my favorite time. This is where Jack would announce funding or the Starbucks partnership, months before the press releases would come out.
I've taken these lessons on team structure and meetings and applied it to Nightingale. Even though we're a little small, we do once a week retro and demo meetings.
I think Square also taught me how to have fun while working on a product you love. Whether it was the workday or the weekend, I was always excited about mobile payments even though I had never heard of the industry 6 months before. Maybe it was the tradition of coworkers sending out rainbow unicorns to the company if you ever left your computer unlocked. This fun was exemplified in my final act on my last day at Square. I tried to sneak in a pull request that fixed a bug on the signature screen. It also had a sneaky feature that the screen would look like the following if I, another intern, or Jack Dorsey ever signed:
ANOTHER PHOTO DEL
All in all, I believe most young entrepreneurs should spend a summer at a tech company before going off to pursue their idea. There's a lot you can learn in a much lower risk environment, and what better place to go than Square.
... unless you want to work in healthcare, then come on over to Nightingale :)