Why did I intern at SingleStone?
During my freshman year of high school, I skipped school for a day so my dad and I could attend a Git course hosted by SingleStone. During that course, I got to see how friendly the Singlestone folks were, and I was able to connect with Ryan Shriver before the end of the day. After we talked for a little while, I joked about the possibility of an internship, and then, a few weeks later, Ryan called with my first internship offer. Since then, I've loved coming back year after year to help them on (mostly) internal projects.
Role:
- Intern
Primary skills used:
- AWS (Lambda, CloudFormation, ECS, ALB + APIGW, etc) & other serverless technologies
- Python
- CI tools (GitHub Actions)
- Vue 3
Timeline
Now (2020-)
Goal: Singlestone's recruitment process requires recruiters to manually send technical exercises to possible candidates in the form of tar files. This has proven to be a pain to manage and scale as recruiters need to keep track of each divisions current exercise and the associated reviewers. The goal for this year is to create a platform that will automate these manual tasks, and provide a "point of truth" for each division's current exercises.
To complete this goal, I am currently working with a small team to create a fully customized recruitment platform that assesses possible candidates through multiple employee-created exercises. These exercises are stored under a division-specific GitHub repository in a private organization. The platform is a serverless application that runs on AWS with Python lambdas + AWS Chalice in the backend, and a Vue 3 front end served using CloudFront + S3. I was also taught how to automate ephemeral environments for each pull request in our CI/CD platform, GitHub Actions, which allowed for multiple developers to concurrently work on different features without risking messing up someone else's environment.
During this project, my coworkers would also come and go as they could to help out. This gave me invaluable experience working in a highly dynamic environment, and taught me the importance of keeping documentation well-written and up to date, both in code & by utilizing external tools, like GitHub Wikis. Keeping up-to-date documentation increased the speed of onboarding new developers by giving them better details into complex features, deployment instructions, common FAQs, and more.
2019
Goal: Singlestone has a tradition where they bang a gong whenever they receive a sale, though they realized that they didn't have a good solution to do it in the remote world. I was brought in to create the solution with Jay Hogan.
To complete this goal, I looked into integrating with the Slack API whenever a sale was received in DynamicsCRM. This required creating serverless webhooks that could be called by D-CRM, which would end up sending a Slack message with information about the sale and a fun gong gif. Throughout the project, I also fully tested the code with Jest to ensure things worked as expected. Due to external constraints, this project never got finished, however it was still a very valuable learning experience and was my first real exposure to unit & integration testing.
2018
Goal: Work with Kevin Tuskey to update Singlestone's "Reverb" website.
To complete this goal, Kevin and I would regularly meet to go over the project. During our time together, we would review previous changes, go over impediments, and discuss the next changes (similar to an informal stand up). After the meetings, I would use Angular 6 to implement the changes requested and use GitHub for source code management. This internship also taught me the basics of AWS CodePipeline.