Dejia Tang's CPT Project
During the Summer of 2016, I worked as an Engineering Practicum Intern at Google, in Mountain View, CA.
The Engineering Practicum (EP) internship is a 12-week program for first and second-year undergraduate students, especially students from historically underrepresented groups. I applied online and the materials I submitted include my resume, transcript and three short essay questions. Then, I did two rounds of technical interviews.
After I got my offer, I talked with several engineers from different teams and at last joined the payment pipeline team. During the internship, I worked with another EP intern and two full-time software engineers (my hosts.)
More information about EP program of 2018 can be found here.
According to statistics of 2016, Google has about 123,000 dormant (inactive) user accounts with total values of more than $10 million. Google has legal obligations to manage these dormant accounts and under certain conditions, Google can take the money as its own property. Google used to outsource this job to an external firm and that firm will do this job manually. In order to improve the accuracy and costs of this process, Google decided to develop a Dormant Account Processing Pipeline to automate this work.
My teammate and I collaborated on adding features requested by the support team and compliance team to improve the dormant account processing pipeline.
Features and Technologies
The pipeline is composed of two parts: detection and workflow. Detection is where inactive users are filtered out. Workflow is where Google tries to contact the users to inform their situation and process the accounts accordingly. All these steps should differ according to the account type and the state that the user's in.
To add the missing pieces, I self-taught SQL(Structured Query Language) to add new logic and to introduce additional data needed. I went through the tutorials by w3schools before I started and then learned additional details needed during the project.
I also worked on data migration to remove the dependency on deprecated Dremel tables and to improve query efficiency. At last, I wrote unit and functional tests for all features added and refactored the existing ones to improve readability.
Overall, I think this program is a great learning opportunity for me in many aspects. It allows me to learn from doing and also to experience how working in the industry is different from coding for classes at school.
For instance, as a sophomore back then, I had no experience with databases, version control nor working with any large code base. The learning curve of the first few weeks was quite steep, but there was a lot of support provided and I learned a lot in the end.
And also, code standard in the industry is also different. I had to follow strict code-format requirements and will experience code review before checking in any code. Testing is another example. When I wrote programs for my classes at school, I usually tested my programs manually except when my professor explicitly required me to do so. For companies, unit tests are required for all features added. This can not only catch bugs for the new codes but can also help to prevent future developers to break existing codes.