View on GitHub

Stephanie Gawroriski (Xer)

I develop SquirrelJME! I love squirrels, they are adorable and cute 🐿️!


The IOpipe Java agent allows you to measure and observe how your Java lambdas are running on Amazon Web Services.

I developed the IOpipe Java agent which allows those who are using Java in AWS Lambda to view metrics on their invocations such as the duration of execution and errors. I implemented the agent along with its features such as profiling and logging following the direction of the other agents, which have previously implemented said features. I managed all of the project releases. I additionally provided technical support for the Java agent as well.

Any source code I wrote is fully documented with comments and is intended to be as concise as possible so that anyone, including myself, can go back into any part of the project and continue working on it. For each pull request made for any of the code that I write or have contributed to, I sometimes have paired with my manager to review that code. I have additionally created and/or reviewed other pull requests which were generally written in JavaScript, Go, and Python.

To ensure quality across the dashboard and the various agents I spearheaded what at the time was called QA Test Day which is a process that allows others to submit tasks to be tested along with general testing. I developed this process completely which includes how to submit tasks to be done and how to execute the tasks on the actual day in question. Other than QA Test Day, I regularly tested the dashboard and agents so that they can move into production.

While on the Engineering Team, I have been involved in a number of meetings on the architecture and direction of our product. My involvement in these meetings has never been specifically limited to my Java expertise, non-Java specific suggestions and thoughts have been iterated over and some of my ideas have been selected.

I have additionally written articles related to Java and AWS Lambda development on Medium. My most popular articles were Java Libraries are Your Lambda Enemy, and Optimizing AWS Java Lambdas, both of these are available in my list of publications.

Technology Experience

This section contains specific experiences with technologies and is more fine grain than my general experience.

Amazon Web Services (Lambda, S3, SQS, etc.)

IOpipe itself was made for Amazon Web Services and as such I learned how to configure and operate the various services. This mostly involved Lambda with API Gateway being the most common event, however other services such as S3 (file storage) and SQS (queue) were used as well.

CircleCI (Continous Integration)

CircleCI was used very heavily at IOpipe which performed everything from testing, to releases, and to deployment of various parts of the service. I was responsible for making sure that CircleCI continued to work with the Java agent. There have been issues with CircleCI that I was able to resolve.

Customer Support

I have provided customer support for the Java agent and other parts of IOpipe.

Maven (including Maven Central)

The Java agent itself used Maven to build and test the project.


My usage of Gradle was mostly limited to making sure that one is able to use the IOpipe library in their Gradle projects, which of course an example was provided.


I do have a working knowledge of JavaScript and I am able to review code that is written in JavaScript. I also am able to write small programs. I have written programs in JavaScript which are for internal use only and cannot be revealed.


The entire IOpipe organization for the most part exclusively uses JSON, so this was very much often used. The agent itself generated JSON reports and sent them to the IOpipe service.

JUnit (Testing)

The Java agent itself was tested using JUnit which was made available through Maven.


The Java Agent itself used POST and PUT operations. The POST operation was used to upload the invocation record in the JSON format, this record would then be made available on the dashboard so that the user can use it. The PUT operation was used for accessing the signer which was capable of receiving log files and profiler snapshots. Both of these do use an authentication token to prevent masquerading as another user.

To perform releases of the Java agent, shell scripts were written which utilizes the BinTray API to create new versions, upload all of the various files, publish the new version, then finally have it sync to the central Maven Repository. The calls were essentially just performed using curl since the various operations were simple.

Additionally, I have created a Squirrel Facts demo (there is a live request you can test).

Serverless API

The Serverless API was used setup the Amazon Web Services so that any generated Java or Javascript programs would be uploading and ready to execute as needed. Since IOpipe only runs on Amazon Web Services, this was the only service which was used.

Shell Scripting

I have written a various number of shell scripts which for the most part have performed various repetitive tasks such as testing and performing releases. One of the larger scripts I have written is the one that is used to perform releases of the Java agent and this script was used to build and publish new versions.


I used VisualVM to view the profiler snapshots which were generated by the agent along with performing profiling of the agent on my local system. This was used to determine which areas of the code needed improvement.


Although I do not prefer using XML, I have experience using it by creating the various project files for Maven.


Releases were uploaded to BinTray which would sync to Maven Central allowing any developer to use them easily.

Java Agent

These are releases which I have personally performed once I was hired as full-time:

These releases were performed by Pam Selle during the time I was a contractor:

Log4J2 Plugin

TinyLog Plugin


This is a listing of all the articles I have written while working at IOpipe, note that articles which are not specific to IOpipe are my most popular articles:

Logging your Java Invocations with IOpipe

Want access to your AWS Java Lambda logs without leaving the IOpipe dashboard? We now support this in Java if you are using Log4j2 and TinyLog!

Quick And Easy Observability for AWS Java Lambda, No Code Changes!

Now you can add observability to your AWS Java Lambdas using IOpipe without needing to modify any of your code! It just takes a few steps!

Optimizing AWS Java Lambdas

If your Java lambdas are running slow, it can be a nightmare to find the culprit! This article will cover a bunch of tried and true tips that you can utilize to optimize your code so that it runs faster, or uses less memory.

Monitoring your Spring Cloud Function with IOpipe

If you use the Spring Cloud Function framework, you can monitor executions of it using IOpipe. Starting with version 1.8.0 of the IOpipe Java agent you are able to wrap Spring Cloud Functions using the Generic Entry Point handler without making any modifications to your code!

Java Libraries are Your Lambda Enemy

So you are using AWS Lambda and your invocations seem to be running a bit slow, especially in the cold start area. Have you ever thought that this is caused by the libraries you are using? Java can be expensive on AWS Lambda, but it does not have to be at all.

Recommendations Received

These are the recommendations which I have received while working for IOpipe. In last-name alphabetical order:

Adam Johnson (CEO of IOpipe)

Stephanie worked with us at IOpipe to build out our Java instrumentation library for AWS Lambda based serverless applications. She built out the library from scratch and was very self driven the entire time. Throughout the project, Stephanie delivered incredibly high quality code. She has deep knowledge of Java and and the JVM, and was able to solve numerous technical hurdles with the project. Stephanie was able to work autonomously on the project with little oversight, while keeping the quality and attention to detail high.

If you’re looking for a self driven engineer to work on any complex Java/JVM based work, look no further.

Pam Selle (Director of Engineering, Direct Manager)

I worked with Stephanie on a project that was not only critical to our business, but where the source code would be open sourced, no small matter. Stephanie took direction well, received feedback very well, and was very responsive during the entirety of the project. I knew that when I asked Stephanie to work on something, or gave feedback for modifications, I could trust her to execute on it and she’d promptly let me know when things were ready for re-review. She worked well within our process, and I’d recommend working with her.

Erica Windisch (CTO of IOpipe, Direct Manager)

Stephanie is a fast and efficient developer that has exceeded our expectations. I began working with her when she was a junior engineer, but she quickly began solving difficult and complex problems as well as any of our senior staff.


Some screen shots of the information captured by the agent visible in the IOpipe dashboard.

Functions Page

How any running program will appear on the functions page.

Functions page

Function Page

A single function being executed, showing all of the invocations.

Function page

Single Invocation Page

A single invocation, which is the lowest level of information.

Single invocation page

Old Logging Record

An old logging record that I made during development.

Old logging record

Old Profiling Screenshot

This is a screenshot I made of the profiler output when I first started working on it in March of 2018.

Old profiler screenshot