By Tommy Tran and Robert Sunderhaft
Over the past semester we had the privilege to intern with the 99P Labs Team. Reflecting on this incredible opportunity, we had many learning experiences from collaborating with a supportive research team and working on projects using the latest software. As a result, we have grown tremendously as developers in a short amount of time and the invaluable skills we’ve learned will push us towards success in our future endeavors.
Lessons Learned from a Successful Team
On our first day, we immediately learned the value of having an organized team structure with efficient methods of planning. To begin the week, sprint planning meetings are held where tasks are defined and delegated using a platform named Jira. This allowed for the prioritization of the team goals for the week that could be broken down into smaller tasks for team members to accomplish. To ensure tasks were being met throughout the week, the team would regroup every day for short meetings, standups, where each person talked about what they had done, what they planned to do, and who they needed help from. We found this to be helpful in keeping everyone accountable for their work while also creating a supportive team atmosphere if anyone needed help. To wrap up the week, a sprint review was held on Friday to review, discuss, and accept the completed work. This ensured everyone was updated on the projects being worked on, and how it contributed to overall goals of the team. Based on the progress of the task, sprint reviews also allowed input from the team on the logical next steps for the project to reach success. All in all, the sprint workflow kept the team organized which allowed for great productivity by keeping everyone accountable and encouraging a teamwork friendly environment. This workflow was beneficial in moving projects forward and we hope to continue this ideology in future teams we work for to ensure success.
Though an organized team is key for success, it would mean nothing without a great team culture. One of the critical components for building a solid team culture is creating connections within the team itself, which we both experienced at 99P Labs. Although the team took work seriously, they also made the effort to get to know each other, making tasks at hand more enjoyable. Over time we became more comfortable with the team which allowed us to try new things, make mistakes, and seek help without the fear of failure in front of others. Throughout the internship we learned that it is important to ask questions in order to resolve challenges effectively. It can be intimidating to ask questions at times especially when they seem simple, but a connected team environment eliminates the fear of judgement because we know the team wants to help us be successful.
Being interns we experienced first-hand what makes a successful team. We found that having a high level of organization coupled with a supportive team created an atmosphere where everyone could learn, be productive, and grow to the best of their ability. However, it is also important to build good relationships with the team to create an enjoyable culture where everyone strives to help each other be successful. In whole, the 99P Labs Team embodied these key characteristics for a successful team. It enabled us to learn many skills from our teammates and we hope to instill this similar culture in future teams.
Software & Project Learnings
Both of us worked on many different projects using various languages, frameworks and software. We had different experiences from each other because one of us was a data science intern while the other was a software engineer intern. As a result, we have many learnings to share from each of our unique experiences.
Robert’s Experiences — Data Science
The very first tool I learned to use in this internship was the query language SQL. SQL is used to communicate with a database in order to draw conclusions from the data, which is extremely useful for data analytics. Prior to the internship, I used a site called Datacamp to familiarize myself with the language and get a jump on the basics. Once I started the internship, I was able to apply these skills to real world applications.
With my newfound SQL skills, I was tasked with creating a dashboard that contained visualizations showcasing sensor metrics within a vehicle. The biggest challenge that I found was that the collected data was never perfect and always had to be cleaned before use. This allowed me to understand the importance of data validation because inaccurate data can greatly impact your findings.
After cleaning the data, I started to become very fluent in SQL. With my prior experience in SQL, there was always one answer or one way to solve a problem, but within my project in the internship there never was just one solution. Some problems were even unsolvable. With this open-ended approach to drawing insights from the data, I was able to greatly improve my problem-solving skills and start thinking of multiple approaches to solving the same problem.
In the future, SQL will prove to be a very important tool as it is a crucial component to any data science project. Moving forward, SQL will enable me to make important discoveries from any dataset quickly and efficiently.
To create the dashboard mentioned in the previous section, I needed to become familiarized with creating visualizations from the processed data. For my internship, I utilized the data visualization platform Superset to accomplish this task.
With no prior experience in making visualizations, it was great to learn how to take plain data and turn them into actionable insights. At the start of my internship I would take the datasets and put them into general visualization types, like histograms, but as the internship progressed, I was introduced to more complex graphics like GIS. Not only was I able to learn about new visualizations, but I was also able to improve my design skills. Design was very important to learn because it improves the user’s experience and allows them to find the information they want quickly. For my dashboard, this included organization, visualization titles and labels, and graphic type.
By learning how to use Superset, I was able to get a general understanding of how to make effective visualizations across all platforms. You can read some of my learnings here.Towards the end of my internship, I participated in a data visualization competition, run by The Ohio State University, where I was tasked with generating insights in drug abuse. Within this competition, I had to use a new visualization tool, which I was able to quickly learn due to my past experience with Superset. Overall, my experience with using Superset at 99P Labs has provided me with a solid foundation in generating visualizations that will carry on over to many different platforms and projects.
One of the last main areas I focused on was getting introduced to machine learning. This was a topic I have always been interested in and I was thrilled that I would get the opportunity to learn more about it.
To learn the basics, I utilized TensorFlow, a popular python library that is made for machine learning. From there I spent several weeks learning the topics, the basic logic, and the applications of machine learning to prepare for my project. Aside from learning how it works, I also had to become familiarized with the Jupyter Notebooks platform to run my model, add visualizations, and add text writeups all in one place. Getting exposure to Jupyter Notebooks was also vital to my data science journey as it is the go-to computational notebook for projects like these. Once I was comfortable with TensorFlow and Jupyter Notebooks, I was able to create my first model.
Since this was my first project utilizing machine learning, I started out very simple and made a neural network that was composed of a single node / neuron, which essentially models a linear regression line. With this model, I tried to describe the relationship between the fan speed used in the vehicle and the ambient air temperature outside the car. What I found reiterated one of the most important learning outcomes of this internship: initial results are rarely pretty. The model was very inaccurate due to confounding variables and taught me that good machine learning models take into account many factors to accurately model a solution.
With this project under my belt, I was able to demystify what the field of machine learning actually was and finally step into the realm of AI. Going forward, I can’t wait to take what I learned in this project and build upon it to create useful models in the future.
Tommy’s Experiences — Software Engineering
The first project I had when interning was to review the team’s GraphQL APIs and use it as a template to create additional APIs for our other available datasets. This was my first exposure to reviewing such a large code base that was not my own. From this I learned how to properly review project code by analyzing it one line at a time to properly understand it. I also learned online research skills: I had no previous knowledge of APIs, GraphQL query language, SQL and the Requests python library for querying the API, so I had to perform an immense amount of research. Obtaining the skills to review code and perform research became very useful in the rest of the internship and will always be relevant in my career. You can read more details here.
Redesigning 99P Labs Developer Portal
Being a part of the redesign process of the 99P Labs developer portal, I learned how companies effectively collaborate with one another towards a common goal. To begin a project, the first priority was to provide context for the project at hand and to share our vision for the final product to the company we were partnering with. Early on, the minimum viable product (MVP) was determined because it was important to prioritize work on tasks that must get done over tasks that were “nice-to-have” features. After establishing an MVP, the project is broken down into tasks with identifiable quantitative and qualitative success metrics. Tasks were created with a user-based approach using user stories, which showed to be effective in creating helpful features for clients. We used a Trello board or something similar to track tasks. I felt this process helped drive the project because it was motivating to see we were getting closer to the final product as we accomplished small tasks one at a time. In designing features, we often performed competitive analysis to evaluate industry standards and it inspired our own features that best fit our user needs. To confirm the usefulness of our features, we performed usability testing. This was a critical step of the project because it kept our biases in check by verifying if predicted user needs were actual use cases and if our features correctly satisfied that.
Every week we would meet at least once to discuss the progress of the project with our partnered company. It was a good way to keep each other accountable, see if the product was moving towards the right direction and allowed for updates to the project if we had to change things based on new findings. Through these meetings I realized good communication is crucial for everyone to be on the same page. It is important to be detailed, but also concise because too much technical information leads to confusion and too little leads to incorrect assumptions. Therefore, a balance between the two is important for everyone’s understanding and if it is necessary to go into more detail, then you can explain further based on the questions that arise. Discussions can sometimes get in a loop of brainstorming ideas, which is useful for improving the product, but it can also lead to no clear path forward. Thus, it’s important to end these weekly meetings with a plan for the most actionable next steps to keep the project moving so it can be completed before the deadline.
At the end of a collaboration, we reflected on the project as a whole. We even wrote a blog post about this experience, check it out here. It was helpful to acknowledge the positive accomplishments as well as things that could be changed. I believe it is important to review and learn from each project so that future ones can be just as successful or hopefully, even better. In brief, collaborating with other companies has taught me many project management and communication skills that will be helpful in my future team projects.
Visualizations with Kepler and AG Grid
To allow our users to explore our datasets on 99P Labs, we wanted to display a proof of concept for visualizing our datasets on a map and table format using Kepler and AG Grid, respectively. This was my first experience working with open source software and I quickly realized that it was going to be a challenge. I was blocked quite often from not understanding something, but over time I became more comfortable with it, adapted and learned how to best approach unblocking myself. When blocked, you have to think deeply to identify what it is you don’t know and from there you can ask the appropriate questions. Sometimes that may mean you need to start from the beginning with the fundamentals, such as learning a new language or framework. For me, I did not know React and Redux for Kepler so I had to learn the basics of it and constantly ask myself questions like “Do I actually understand how a component works?” and “What is a prop?”. Although I still am not fully comfortable with React and Redux, asking the right questions and finding the answers to them allowed me to become familiar enough with Kepler to make changes and use it for our needs. To sum up, working with Kepler was difficult and came with many obstacles. However, I obtained the skills to approach solving problems and understanding code I am not familiar with: identify fundamental concepts you don’t know and ask questions around that topic so that you can gain a better understanding.
Software Development Kit (SDK)
A group of college students were about to start a project using our Telematics dataset. However, they had little to no experience with APIs, so I was tasked with creating a Python SDK(package) that abstracted away the intricacies of querying an API. All the students had to do is download the SDK, import it into their python file and call functions with certain parameters based on the data they needed. Before writing any code, I consulted my mentors to discuss the best way to design the SDK. It was helpful to get feedback on my approach to solving the problem and they suggested features that I did not even think about. I also learned it’s important to keep good communication with the project manager to make sure the project continues in the right direction as envisioned. I wrote documentation for this SDK which I believe improved my technical writing ability and understanding of my own code because I had to put myself in the perspective of a new user. I learned that my writing needed to be detailed while also being simple and concise so that it was easy to comprehend. After delivering this project to the college students, I received a lot of feedback throughout the duration of their semester. I realized that it is necessary to create a good relationship with your users because I ended up creating multiple iterations of the SDK and it improved in functionality each time which made it more user-friendly. In summary, having the responsibility of creating an SDK and maintaining the code for its users taught me how to prepare for a big project, write good documentation and improve a program over time for an overall improved user experience.
Integration/Unit Testing SDKs
Our team wanted to explore integration/unit testing, so I was given the opportunity to research and document my findings by applying a testing framework on Python SDKs we recently developed. I learned the unit test python framework and made many test cases. Through testing I learned that it can be time consuming. There needs to be a purpose for each test case, you should not write a test case just for the sake of testing. However, if testing is designed properly, many bugs in the code can be found. Thus, I developed skills in testing, reviewing and debugging code which I think is a very important skill to have when collaborating with a team.
Reflecting on the projects I’ve worked on as a whole, there are many key takeaways that I will remember from my internship. I have had to learn many new frameworks, languages and technologies and I realized over time my ability to learn new things has become quicker. As you continue to learn new things, you get better at searching for the right resources and asking the right questions. In addition to researching online, I found great value in asking team members a lot of questions. Often, people are very willing to help you and getting your questions answered helps your understanding and ensures everyone is on the same page. Taking good notes when getting answers to questions, performing research into new software, and etc. is necessary when you are assigned many projects. Context switching can be difficult so having great notes allows you to refocus quicker from one task to another. Notes can lead to documentation which is extremely helpful for yourself and your team. It allows you to review the material later if you haven’t worked with it in a while and also saves your team time from having to do their own research on the same topic. Your previous work can be reused and even improved upon. Lastly, when working on projects that are exploratory without well-defined tasks or deadlines, I have found it useful to set goals for yourself. This allows you to stay productive and satisfied in being able to track your successful progress. In short, these are just a few additional takeaways from my internship that have contributed to my growth as a software developer.
All in all, interning for the 99P Labs team has been an honor. The lessons and skills we’ve learned alongside the team are invaluable: what is required of a successful team, how to communicate effectively and the fundamental technical skills in our respective fields. Going into our internship we were beginners, but now we have a stronger foundation to begin our careers in software engineering and data science. We are extremely thankful for the learning opportunities we had at 99P Labs and we could not recommend a better place to kickstart your career. If you are interested in our internships please reach out to us at 99plabs.com.