Between the lines of code, 9 to 5 work day, and flurry of learning how to use new mobile development tools, my first software internship taught me how to be a better engineer, think more carefully about my career, and learn from some of the best in the industry.
Although I’ve been interested in technology and writing code ever since high school, I’ve never had a formal software engineering internship until now. As I found the desk that I would call my own for the next three months, I told myself that I would make the most out of these next couple of months. Ooyala is an online video company in the humble city of Santa Clara. Although being in the vicinity of the new Levi’s stadium, a popular theme park, and many of the most powerful technology companies in the world, the low-rise nature of the offices in the area would not strike the average person as significantly impressive.
However, walking into the office on Patrick Henry Drive, you can’t help but feel a buzz of energy in the culture that Ooyala has created. In the lobby, you’re immediately greeted with a large television wall that boldly displays a video of happenings around the company, getting a visual glance into the mission that Ooyala is seeking to achieve. Like most young internet companies in the Silicon Valley, Ooyala seems to be built for growth, slowly but surely adding to the army of engineers that hope to build products that will be at the forefront of online video.
Initially, I heard about Ooyala from a friend who worked there. Being a friend that I knew from school, he reached out during a recruiting event and asked if I would be interested in interning. Wanting to keep my options open, I decided that interviewing would be worth a shot, and the worst case scenario would be walking away with some more interviewing experience.
A couple rounds of technical interviews later, I received an offer letter that I was unsure what to do with. On one hand, I had just started a startup that I was hoping to spend my summer working on, and couldn’t find myself particularly excited about online video. But as things unraveled, I decided that my best learning experience would probably be through Ooyala, because there were a couple of things that Ooyala could offer.
First, being more of an enterprise company, I knew Ooyala had a very big emphasis on engineering, which I have lacked in many of my previous work experiences. I knew that I had a lot to learn about engineering best practices, and that Ooyala would be able to help me strengthen my technical skills.
Second, working for a company that is not yet a significant household name has a couple of advantages. The company is at a very happy medium between large and small, and working there would be a very good experience for knowing whether my talents and strengths are suited for a company larger than Ooyala or a company smaller than Ooyala. Additionally, not being a household name at the forefront of Silicon Valley sensationalism would give me some much-needed space from the hypothetical tech bubble that the media loves to argue about. And as a startup enthusiast myself, Ooyala would give me the opportunity to work at a company not yet too far removed from it’s startup days, giving me a crucial view into the lifecycle of a company that I have not yet had the opportunity to observe.
Finding My Feet
First weeks are always a challenge. A good first week usually consists of getting your development environment set up, getting to know the people in your team, and finding a good rhythm to work at within the bigger picture of your team and the company as a whole. Playback Apps would be my home for the duration of the internship. Essentially, playback apps was the part of the company that built the video players for various mobile applications, and I would be learning how to and building some new mobile SDKs.
As I started setting up my computer on the first day, my first task was to update to OS X 10.10. Halfway through the installation process, my laptop fired a kernel panic, much like the one you might have seen in Silicon Valley HBO. There I was, not two hours into my first day, and had somehow managed to break the work computer. IT is really a lifesaver. (Thanks Archie!)
My first ticket (more on this later) was to detect whether the phone was in landscape or portrait mode, and to manipulate the interface based on what orientation the device is in. Within the first couple days, I had finished that task, pushed the branch, and merged in my code, only to be greeted with this.
Oops. (Or as one of my fellow interns would say, “rip”) Looks like I still have quite a bit to learn.
Adapting to the culture at Ooyala, I found a work hard, play hard culture that had a bit of everything. I found the group of athletic frisbee players, friendly pet owners, and hardcore video gamers. It’s easy enough to strike up conversations with anyone in the company, no matter how senior they might be. I quickly realized that one of the advantages of having such an open work culture was how easy it was to talk to anyone, which allowed me to ask a large variety of questions to a large variety of people. And as much as my entrepreneurial bug was asking why I would spend a summer at a company instead of working on my own projects, it’s hard to complain about all the perks offered by tech companies.
And just to humor myself, I wanted to become the mayor of Ooyala on Swarm, which I found to be much more difficult than expected because there had been someone else checking in almost everyday. Three weeks into my internship, however, I finally achieved the feat.
Software Engineering
Javascript was a language that was hacked together in 10 days right before the launch of the Netscape browser. And yet, it has serendipitously achieved what the creators of Java tried unsuccessfully to achieve. Namely, become a unified language that works on any system regardless of architecture, operating system, or implementation.
And as more libraries provide more and more functionality to javascript developers, we’re starting to see even the most complex applications written in Javascript. Mobile development is no exception. Mobile development used to be highly dependent on the architecture and system that was running it, but now with tools such as React and Phonegap, mobile development is quickly going the way of Javascript.
In my time at Ooyala, I had the opportunity to learn and use the new, somewhat limited, implementation of React Native to create an interface for the video player. At a very basic level, the new video player skin provides a very easy way to customize different aspects of the player, allowing vendors to easily customize the player to their liking. It interacts with the core Ooyala SDK to get the different states of the video, and manipulate the UI accordingly.
Team Dynamics
That said, one of the things that I observed in my time at Ooyala is the simple fact that no one is on the same page by default, and the more cooks in the kitchen, the more agreement from more people is necessary to move the needle.
Take for example, user interface design, in my time at Ooyala, it seems that everyone has some opinion on how a user interface should be done, leading to endless discussions on the best ways to implement a feature. Seeing everyone’s perspective meant not only listening to what they are saying but understanding what their goals are for making the decisions that they are.
The way that a team communicates and gets along is directly proportional to how well they are able to produce. This meant getting to know the strengths and weaknesses of everyone on the team, and how to best communicate with each individual person.
GIT and Code Reviews
Prior to this internship, I already loved git as a tool for version control and collaboration. But following the way I saw it implemented at Ooyala, I learned to appreciate it even more. Essentially, git provides a way for engineers to collaboratively contribute code to a project.
Following the structure of JIRA tickets, engineers create feature branches to build out the requirements within a specific ticket, and match the name of the branch to the name of the ticket. After features are completed on a specific branch, the engineers submits a pull request to merge the branch into master. Other engineers on the team examine the pull request, schedule a code review if necessary, and someone else merges it into master when the whole team is satisfied with the quality of the code.
Code reviews, while seeming like a waste of time at first, quickly proved themselves to be extremely helpful to ask questions around architecture with the entire team. As an intern, the code reviews gave me more opportunities to learn from the senior developers on our team.
Branches really proved themselves to be the lifeblood of software collaboration. Branches allow a team of engineers to maintain code in a clean any effective way. For instance, as discussed above, the main use case for branches were in developing features, allowing each engineer to contribute code that built out new features. But branches are also useful for taking snapshots of the code at certain points, such as cutting a release branch to test before it gets deployed to production.
Agile, Standups, Demos, and Retrospectives
Although I had heard of agile processes in school, I had never seen it in practice until now. Even most of my experience with git have been rudimentary at best.
Software engineering is so much more than simply throwing a large number of engineers at a problem and expecting a coherent product to emerge. It’s an orchestration of hundreds of little moving thought processes that fit into the product that will be built. Each person has unique mental models of how a product should look and feel, as well as how it should work under the hood. Thus, in order to make sure that all the engineers are in sync, tools and practices are put in place to better organize and facilitate the creation of a product that is high quality.
Part of understanding the rhythm of the company was understanding the agile process implemented at Ooyala. Like most implementations of agile development, Work is broken down into sprints, which last two weeks at Ooyala. With agile, work is divided into stories, which are all sized into story points, or the number of days it is estimated for a single engineer to accomplish the ticket. At the beginning of each sprint, work is assigned to each team based on how much a team can reasonably accomplish in the two week sprint.
To keep up with daily statuses, standup meetings are conducted once a day in order for everyone to share what they have been working on, ask any quick questions, and followup in person on anything that they might be blocked on. Standup meetings proved to be a very fast and effective way to “read the temperature” on the team.
Another key aspect of the agile development process at Ooyala were the retrospective meetings. Retrospectives happened at the end of every week with a round table discussion on everything that went well and not so well in the past week. From my perspective, retrospectives seemed like a more in-depth standup meeting that allowed another layer of communication within the team.
But perhaps the best way of knowing what everyone is working on is to see it yourself. Toward the end of every sprint, the playback team gathered in a meeting room to demo everything that was developed in the last sprint, to excite the rest of the team and keep morale high. Demos quickly became one of my favorite sorts of meetings, as demos were like getting a sneak peek into the newest features.
JIRA
The first one of these new tools that I learned to use was JIRA. JIRA, a ticket board system made by Atlassian, is a software designed to keep track of what needs to be done, how quickly it should be done, and how quickly it is done. According to the principles of agile, tickets are measured out in terms of how many estimated days it will take to complete, and are assigned to sprints based on the length of the sprint and the number of engineers on the team.
I have used tools like Asana and Trello before, but my experience with both of these systems was made up of a quick burst of use during a period of inspiration, only to be abandoned when as a frustrating nuisance to my workflow. So naturally, I was skeptical about JIRA.
But over the weeks, I learned how JIRA was used by the whole company to communicate different tasks that had to be accomplished, and having the project manager religiously maintain the JIRA board kept the board useful.
Culture
It would be an understatement to say that employees at Ooyala enjoy having fun. Besides the vast array of nerf guns around the office, the scooters that seem to conveniently be present whenever you need one, and the game room, there are a variety of events and things done solely for fun. One of these was the Ooyala lip sync battle that I bullishly participated in. (You’ll never see another video of me dancing to fergalicious)
Other things also contributed to making Ooyala a very unique place to work. From the barbecues, ultimate frisbee, and more, there is always a stress relieving activity to look forward to.
While culture is an important aspect of engaging and motivating employees, having a strong culture means more than simply having a fun office to work in. It’s easy for outsiders to look in at the glorious perks that companies offer to their employees, but often the reality of working in such an environment is very different than how it appears.
The pressure of tech startup culture is to create a place that is fun. But the problem with is that culture needs to have a purpose in the same way that interface design isn’t just about making things pretty. Culture is an aspect that is generally complementary but often foundational to how employees think and interact. The culture defines the kinds of people a company attracts, and becomes a fundamental internal attribute that is very clear to the public.
Hackathon
I could write a whole post about the hackathon on it’s own. But in short, I took the opportunity to build something that I’ve been meaning to do for a very long time: to convert my old RC car into something that I could control from the internet.
In Depth Conversations
Timothy Ferriss, a world class learner, teacher, angel investor, and author, learned how to dance tango professionally in a span of a couple months. To achieve this feat, he took a counter-intuitive approach to learning. Before he even began learning his part in tango, he learned the female part. By learning his partner’s part first, he allowed himself to experience the experience from his partner’s shoes, which allowed him to know exactly how to lead.
In a similar spirit, I decided to apply this principle in my time at Ooyala to become a better engineer. Knowing that I would only be around for a few months, I realized that learning how to be a better engineer would only be a small part of the valuable lessons I could take away from Ooyala. Thus, instead of limiting my interactions to only the people on my team, I set aside time to speak with other people in the company to learn how they best did their job, and what kinds of interactions with engineers went well, and what didn’t.
In many of my career related conversations in the past with parents and mentors, I’ve learned that the most valuable skill when it comes to any sort of career is being an effective communicator. This comes at no surprise to anyone, and certainly did not surprise me when it comes to the conversation that the interns had with the head of human resources over lunch.
Product Design and Management
One valuable conversations I had was with the product manager of our team. Although I see myself always having a passion to do things technically and want to always be involved with development to some capacity no matter what I end up doing, I see myself in more of a product role in the long term.
Product is a very interesting role of any company, because it defines the overall vision for the product and coordinates engineers, designers, marketing, and more to create and oversee a cohesive strategy around a product. Product says what to build, engineering says how to build it, and project says how to execute. This means being very good at soft skills, being able to think quickly on your feet, knowing the landscape of the industry and what’s out there, as well as being able to lead.
What I Learned about Myself
Another extremely valuable aspect of internships is also the aspect of learning about yourself. This means being aware of your strengths and weaknesses, your likes and dislikes, how you come off to the people around you, what your ambitions for your career are, how you work best, etc.
Going into my time at Ooyala, I didn’t know whether I would enjoy being at a company so large, as I tend to be somewhat of an independent developer having done freelance projects and startups, but there were a couple aspects that turned out different than I had anticipated. In particular, I thought that it would be much difficult to really get to know people at bigger companies and that the potential for growth would be smaller than if I were to have worked at a smaller company. But in reality, I found much of my team very enjoyable to work with, and got to see many different styles of communication and work that I would not have otherwise seen.
However, being used to working on my own schedule (school doesn’t tell you when or how to do your homework, you just do it), it was more difficult than I anticipated to acclimate to a 9-5 (although flexible) work schedule. I tend to do my best code between the hours of 11PM and 3AM, and trying to force myself to be productive on certain days in the office was a futile exercise.
I think that there is still a lot of room for growth in terms of communication and soft skills, but I’m working on that.
Overall Thoughts
Overall, the goal of participating in a variety of internships is to get closer and closer to what you want to do as a career, and my time at Ooyala undoubtedly gave me a lot to think about in terms of what I want in a company, what kind of work I want to be doing, and how I want to go about it. It was highly valuable to be able to interact with so many different parts of a tech company, and observe the practices and ways of thinking that takes place on a day to day basis.
“We don’t try to make our interns stay. We just make sure that no matter where they go, they really really miss us.” – Michael Len