Aaron DeMille Resume and Portfolio

Desired Position: Jr. Developer

My Projects

Chargebackr

This project was my first large tool built using Javascript in Google Sheets. I was in Customer Loyalty at the time, and I had taken responsibility for redesigning the process and system we use to respond to payment disputes against renewals and purchases.

Up until that time, the person working Chargebacks would open up our Payment Processor account and pick a pending dispute to review. Using the information available, the user would then locate the account, determine if the transaction was really a result of fraud, and fill out one of four template responses. Relevant information such as account owner names, email addresses, and transaction dates would be placed manually in the template to help our case in the dispute. Once the response letter was attached to the case, a specific note would be left on the account with it's own variables. The entire process would usually take at least 20 minutes, and often more than half an hour.

Chargebackr helped automate this workflow, bringing that time down to around 10 minutes per case. Instead of putting information into each piece of the templates and notes, all information pertaining to the case would be placed in designated cells in a Google Sheet, and the user would click a button to submit the information. Once submitted, the script would then piece together the response letter, choosing the correct template and filling in the variables based off the selected settings. The script then created a new Google Docs document in the user's drive, named it according to convention, and pasted the link back in the Chargebackr tool for easy access. The account note was also automatically created.

This project was largely built in Google Sheets, as the interface, response template pieces and note templates were stored in the spreadsheets themselves. However, the script decided how to fit the pieces together, built the needed information, and placed it where it needed to be for easy access. This automation removed the manual work that took up so much time, and allowed us to not only catch up with a queue that had been consistantly full, it let us stay ahead of the disputes so we could respond immediately when they appeared.

KPI Email Tool

This project is a more recent one. I developed it while working in Operations, and by this time I had much more experience and knowledge about Javascript. This tool allows Supervisors to send historical performance data to specific agents for help filling out Self-Evals.

Up until this tool was built, we in Ops needed to compile the past few months of data for each agent and send it to the appropriate supervisors during Eval season. Unfortunately, this took a lot of time, because the data was seperated by month instead of by agent. We had to manually copy and paste each row of data so that it was seperated by agent instead. Additionally, sometimes the rows were in different spreadsheets due to recent team changes.

To help with this, I built a Google Sheets script that was added on each Supervisor's dashboard to gather and send historical performance data automatically. This script used some HTML as well as the normal Javascript, and created a modal interface when run. In the interface, a Supervisor sees a dropdown list of all the agents on their team. Additional dropdown lists can be added or removed to select multiple agents at once. When the supervisor clicks "Submit", the script gathers the performance data for each selected agent directly from our database sheet and emails it to that agent, cc'ing the supervisor as well.

Now that this tool exists, Ops no longer has to compile any performance data for Evals. Supervisors can have the data gathered and sent fully automatically, regardless of team changes. Additionally, the data can be sent at any time, and does not need to wait on other departments to be compiled.

gSQL

This is my largest project as well as my favorite, but it never came to completion. Unfortunately, the need and opportunity for this tool faded before we could use it.

gSql was intended to be a library and interpreter for use with Google Sheets scripting to allow spreadsheets to be used as relational databases. It would have provided many functions for array manipulation (a huge part of spreadsheet scripting), as well as a lightweight SQL-like query functionality. It would have had the ability to consider spreadsheet documents as databases, and tabs within documents as tables. The functionality would have included basic SQL commands such as select, where, join, and order. It would have handled expressions where relevant as well as sub-queries.

In order to prepare for this project, I spent several days learning about interpreters, Abstract Syntax Tree data structures, recursive descent traversal, and about SQL. The project itself went through several phases. I got select and from functionality set up, where the user could define whether they were pulling the entire spreadsheet tab or just a range within it. I also got basic arithmetic expression functionality set up. However, when I started adding conditionals, boolean logic, and the where clause, I hit a block, because I had set up the interpreter to execute commands as it walked through the AST.

At this point, I rewrote the nodes and parser so that instead of executing code directly, they filled a State object that would then be executed all at once. I also heavily documented my code as I went, to keep myself in order. This time, the parser could handle not only Select and From, but also Where, Join, As, and expressions with arithmetic, boolean logic, identifiers, and strings. All of the syntax implemented so far was processed and ordered correctly, but the Interpreter itself posed some problems. I kept having trouble storing expressions for later use in the State variable, or else executing them once stored. It was during this block that the project was placed on indefinite hold.

While it was not something that I was able to finish (or likely ever will), gSQL is still my favorite programming project to date. For one, it ventures away from just scripting into actual Programming and design. Additionally, I loved the opportunity to learn more about how programming languages themselves work. This project not only taught me about languages, however. It also taught me (sometimes rudely) about how important it is to stay organized and documented, and was a big step forward for my project management skills. One of the biggest lessons I learned, however, is that you can always learn and grow from what you do, especially from projects that never get finished or that seem to not matter.

Home