It’s only been only three months, yet, I can say I was privileged to touch a few applications at Ping: User Utility Count, OAuth Playground, and DaVinci:
I started working on the User Count Utility (UCU). The UCU is a tool that provides our customers with the number of unique users that perform a sign-on transaction (SSO, STS, OAuth). The session aggregation logic used to identify unique users across apps have shown to incur performance issues for some of our customers and my responsibility was to add a mode that reports the user count on a per-application basis. This project was fairly independent so I had the opportunity to do quite a bit of self-learning since I did not have any prior experience with Apache Log4j.
I submitted my code within the first two weeks and one of our QA engineers conducted tests with extensively large amounts of data on a Windows 2016 environment.
Soon enough, I was told the pre-existing performance issue was still not resolved and CPU usages are still very high. I was alarmed because I seemed to have not properly completed the work assigned. Interestingly, my manager and tech lead were very supportive and encouraged me to look into the issue more.
So, I analyzed the algorithm in order to see which object(s) were consuming more space than expected, while examining the time complexity for each algorithm. During this time, I had the chance to work with IntelliJ’s Profiler to see which methods in the code were causing high CPU usage and memory allocations. Fortunately, I had a mentor who was there to provide me support and suggestions with any questions I had. In the end, the UCU performance test showed CPU usages dropping to 50% and memory usages reduced by 10%.
This experience taught me that mistakes happen, and you can always learn something from them. It’s also okay to ask for help if and when you need it, but it’s important to also attempt to solve the problem yourself.
A month into my internship, I switched gears into working with the OAuth playground. I didn’t know anything about OAuth so it was a whole new learning experience for me. Here, I learned about clients, resources, authorization servers, resource owners and how they all connect. The OAuth Playground is essentially a “simulator” that allows our customers to experiment with different OAuth flows and OpenID Connect, acting as both a client and a resource server, can simulate authorization requests, handle responses, and validate tokens.
To add to the learning curve, one of our senior development engineers then added JARM (JWT Secured Authorization Response Mode) support to the playground. The list of new terms just never ends! JARM—simply put—is another layer of security that our customers love. It provides benefits like signing and encryption and sender authentication along with protection from replay, credential leakage, and mix-up attacks.
Just when I thought I was going to be doing more OAuth playground work, I was invited to a meeting with a bunch of interns for building DaVinci connectors. Though I had familiarized myself with Ping’s products, this was still new territory for me.
DaVinci promotes identity orchestration where users can design their own automated workflows for different identity use cases in a no-code, drag-and-drop interface. We interns were given training videos on how to navigate the DaVinci platform and design our own flows. Orchestration is made easy with DaVinci. If you can whiteboard it, you can orchestrate it!
After completing the training, I was assigned to build a SendGrid connector. Twilio SendGrid is a cloud-based SMTP service that provides email delivery at scale, allowing you to send email without the cost and complexity of maintaining your own email servers. The SendGrid connector enhances a registration flow by enabling multiple capabilities for contact creation and email delivery.
DaVinci strives to eliminate complexity, enabling its users to focus on the business logic, security, user experience, and more. Anyone can create their own connector and design their own flows using this low-code orchestration.