These are some of the highlights working at USCIS's myAccount identity provider:
myAccount - Helped build and maintain the modern version of myAccount. myAcount is an Identity Provider providing accounts and authentication to public facing sites and apps across USCIS. Built as a Single Page Application in React, myAccount loads the UI once and then only loads data when pages change. The means for faster page loads and less network traffic leading to smoother user experiences. Section 508 of the Rehabilitation Act mandates that Federal agencies must ensure that their technology is accessible to employees and members of the public with disabilities to the extent it does not pose an “undue burden.” This requirement creates an additional challenge when developing the user interface. Some of these requirements include making sure the site is fully keyboard accessible and designed with color blindness, screen readers, and people with physical impairments in mind.
Rewrote site Navigation - Navigation on the site had many flaws. It required loading data under certain circumstances, there were many rules and exceptions, and many exceptions to those exceptions. We were constantly needing to fix it. One day I took it upon myself to tack this problem. I broke down the problem in to two simpler problems. They were:
- What assumptions can I make about a user that will determine where they belong on the site?
- Should a user be directed to a specific page?
By breaking down the problem, I was able to find a clean solution. To the first question, I was able to make sure that all the relevant user data was loaded before any navigation takes effect. With that in mind, I only needed to tackle the second problem. Although that was more complex, I was able to break down that problem as well. All I needed to do was go through each page that a user can be directed to and simply list the conditions under which they would be redirected there. If they were under those conditions, they would be redirected, if they weren't they'd move on the the next page in question. If they weren't redirected to any of the pages, that meant they were allowed to be where they tried to go in the first place. This simple system allowed us to add in many more conditions since it has been implemented and hasn't failed since.
Created performance testing suite - myAccount is used by every immigrant filing forms online. In order to make sure it would hold up to such usage, I was tasked with creating a performance testing suite that we can run to simulate such usage. I used JMeter for the task. Although it was able to accomplish 90% of the job. Since we need to confirm emails as part of account creation, I couldn't simulate that with JMeter alone. To solve this problem, I wrote a Node.js script to generate the new account and confirm the account. Then before we ran the JMeter scripts, we would run the Node.js scipt and use the confirmation tokens from those emails. This allowed us to fully simulate a user creating a new account.
Created smart reusable components - One of the things I love most about coding is building things that last. One specific thing that I had the opportunity to code while working on myAccount, was a smart table component. The was a table that was meant to allow for easy formatting of columns as well as sorting, pagination, visibility and useability. I designed it to work directly from an api response, so you can send the information straight to the table with the correct column structure and formating rules. Making the lives of myself and my fellow developers that much easier.