Table of Contents
Areas of Interest
Performance
In software everybody wants to believe they deliver fast performing products. Measurements, with numbers, are the only way to know how fast something is and then comparing those measurements against something else. That comparison defines the performance gap, the difference. It makes for an interesting challenge to see just how fast a given piece of software can execute. I wrote a paper explaining how I am able to load a page in the browser with an operating system graphic user interface and achieve full state restoration within 75.7ms on older hardware.
Test Automation
Test automation is the best way to reduce regression. The most important quality of test automation is speed. If test automation takes hours to execute nobody will execute it unless they are paid to do so. If test automation takes only seconds to execute from the user's interface everybody will execute it many times a day, including the non-technical people, because it costs less of their time than manually testing different aspects of the software product under various conditions.
I wrote a lighting fast test automation utility from my operating system. The best part of it is the simplicity to execute and write tests for. It executes from a single command line instruction. The tests require some knowledge of walking the DOM, but are just a primitive data structure defined by a TypeScript type. Check out this old and out of date video I made about my approach to test automation in the browser.
Accessibility
Accessibility does not have to be an impossible dream for complex single page applications. With well formed HTML whose content flows in a logic order accessibility should come naturally supplemented with ARIA attributes as necessary to call out interactive states to screen readers. Accessibility is more than just screen readers it also needs to account for people with cognitive and motor response impairments. The best part of accessibility is that everybody wins. Even people without disabilities benefit from accessible applications as features become more usable with less interference and content is communicated more clearly in a logical order.
A/B Testing
A/B testing is quite possibly the most fun I have ever had as a developer. I found a technique to achieve A/B testing that worked well for me. The way it worked when I was at Travelocity is we used Adobe Omniture, which is just before Adobe spun out the Test and Target application, to inject a small JavaScript payload into the top of the page. That JavaScript payload would use a recursive setTimeout to look for specific areas of the page before the user could see them and those modify or replace those areas as necessary. With a solid knowledge of the DOM these test scripts could be flexible and durable to account for a variety of changes in the underlying page and frequently execute faster than many areas of the page.
Architecture
Architecture is the practice of planning and assembling the internal backbone of an application. I learned so much about architecture from writing an operating system in TypeScript and Node.js for 3 years. That application did not start out as an operating system or anything ambitious at all. It started as an experiment to see if I could provide full access to the local file system from an interface within the web browser before the standard file system API became available to the browsers. I made that work faster than expected and then asked the next question: Could I provide remote access to this interface from another computer? Then came permissions and security access, build tools, trusted certificates on different operating systems, an installation script, web sockets with authenticated permissions, and on, and on.
Quickly the application became too challenging for a single person to develop with ever increasing complexity and regression. So, I wrote various test automation components. The various test automation components provided insight into the performance of the application's various features that I did not have before, so then I could also monitor and solve for performance.
The application scales with ease, because the architecture is simple. I chose to write the application in TypeScript and define types for everything, most especially function arguments and return types. The application is written in an imperative functional style. Almost everything in the application is either a function or a collection of closely related functions. Despite being functional the code remains extremely imperative as abstractions exist to impose code reuse not suppress what the application code is actually doing internally. Keeping everything explicit eliminates assumptions and guess work that arises later allowing for rapid maintenance and discovery of flow control just from reading the code. Another thing that greatly helps is keeping documentation up to date piece-meal and using automation to port those documentation changes to all supported locations and formats.
One problem I encountered at one of my employers is that their cloud application used a different service end point for each and every micro-service and eventually exceeded the quota authorized by AWS.
In my operating system application I use a single end point for all microservices.
All service related messaging uses this pattern: { "data":jsonPayload, "service": "name of service" }
Everything in that application is a defined type that maps against a named service identifier.
Since all messaging uses a universal structure all messaging may flow through a single end point, which then routes the data to the correct function based upon the service identifier provided.
Selected Personal Projects
Pretty Diff
When I first became a developer at Travelocity I would sometimes needs to compare code in different environments where some code existed in its original condition and in other cases was minified. Existing diff tools could not solve for that sort of comparison, and at that time existing JavaScript beautifiers had trouble with complex data structures. So I integrated a web-based diff tool with an existing beautifier and minifier. As the features, capabilities, and requests upon the application grew I eventually wrote my own diff algorithm and beautifiers for the various supported languages.
Semantic Text
A small copy/paste tool to evaluate whether text in any page is well described by its wrapping HTML. Simply copy the application code, paste it into your browser's developer tool console, and execute. The output is a simple report announcing a first list of poorly described text and a second list showing all text content in order to determine if the order of text makes sense for accessibility.
colorContrast
A small web tool to determine all color contrast ratios for a given color scheme according to the WCAG standard for luminosity contrast. The default color scheme is the Southwest Airlines color scheme, because I wrote this tool to help them evaluate for accessibility. Any combination of colors is supported by the tool.
Mail Markup Language
An original markup language written in W3C XML Schema to fully describe an email thread in conversational context with superior accessibility by default.
Selected Writings
Easiness
Everybody claims to want things easy, but most people don't seem to understand the costs and risks involved. This paper explores the subject of easiness and offers more desirable alternatives.
https://github.com/prettydiff/wisdom/blob/master/Easiness.md
Performance Frontend
What it surprise you if I told you that an extreme focus on execution performance will vastly lower the complexity of your application in addition to making it faster? What if I also told that a focus on extreme performance will lower your stress and fatigue as both a developer and user? Check out this paper to see these subjects explored in detail.
https://github.com/prettydiff/wisdom/blob/master/performance_frontend.md
State Management
One of the most challenging things to get correct and fast in a component based framework is state management. This paper explores what state management looks like at its most simple. This concept of state management is used to manage the frontend of a browser-based operating system.
https://github.com/prettydiff/wisdom/blob/master/state_management.md
Web Education
This document exists to serve as a non-comprehensive road map for people to extend their education of web based technologies. The subject matter is divided into 10 domains inspired by the CISSP CBK, which in 2010 was based upon 10 domains of security knowledge.
https://github.com/prettydiff/wisdom/blob/master/Web_Education.md
Bio and Work History
Travelocity, Senior Analytics Engineer: Oct 2007 - Feb 2014
I started out with Travelocity as a creative designer. A few months into employment Travelocity came to the conclusion that designers were easy to hire, but qualified front end developers were rare. They involuntarily reassigned me to a developer position and told me to learn to program in JavaScript and accessibility.
In 2011 I applied for a position of A/B test engineer. I won the position and a promotion to senior developer. As the A/B test and analytics engineer for Travelocity I learned that you could squeeze almost anything into an A/B test and have it execute faster and with greater reliability than the actual production code even on slow Internet Explorer. My techniques centered upon recursive timeouts to account of variable delays in the page and walking the DOM.
In late 2012 the Army Reserves involuntarily selected me for a deployment to Afghanistan. When I returned to Travelocity a year later over a third of the employees left and found employment elsewhere. It looked like the business was imploding, so I followed the trend and found new employment.
Intuit, Senior Frontend Developer: Feb 2014 - Jul 2014
I picked up a contractor position with Intuit, the tax company. This proved to be a colossal mistake. The week I joined they company announced a major reorganization with 5 months of budget remaining. Had I started two days later after announcement of that reorganization I would have been without a job. I remained with Intuit until July near the end of the department's budget. Fearing loss of job on a contract without hope of renewal I again looked for and won employment elsewhere.
Razorfish, Senior Strategy Consultant: Jul 2014 - Apr 2015
Creative agency Razorfish needed somebody fulltime remote to work at the location of their largest regional client, Southwest Airlines. I became the first fulltime remote employee of Razorfish as I lived local to the Southwest Airlines corporate office but Razorfish sits 3 hours away in Austin, TX.
At this time Southwest was knee deep in a creative contract to completely refresh and rebrand their website. More than just a cosmetic overhaul all layers, except for the data layer, was being rewritten from scratch. Southwest also imposed an accessibility mandate of WCAG 2.0 AA compliance upon all aspects of the website. To complicate matters Razorfish's contract was with the creative team of the marketing department but the technology department was executing these changes and had no direct relationship with Razorfish. Worse, these sector's were at war with each other.
My responsibilities at Southwest were two-fold. First, I was there to help guide the web developers on how to better achieve accessibility. That included creative, technical, and measurement guidance. I also wrote some accessibility tools for Southwest that became widely used within the office, such as a color contrast tool for entire color schemes. My second responsibility involved keeping Razorfish informed of execution progress and strategy from the technology team and when necessary smoothing the relationship between Razorfish, Southwest, and even departments within Southwest.
After 9 months Southwest had what they needed from me. Razorfish was thrilled with my work, but without a need for me to work in Dallas I had to make a choice: relocate to Austin to work out of the Razorfish office or find another employer. Fortunately, at that very moment former Travelocity colleagues were asking me about joining Orbitz.
Orbitz/Expedia, Senior Frontend Developer: Apr 2015 - Jul 2017
When I first joined Orbitz I joined a business segment dedicated to building travel partnerships for other businesses. The largest client at that time was Bank of America and the team was fully dedicating on shipping a travel site using Orbitz technology with Bank of America branding. During this employment Expedia purchased Orbitz. After the acquisition it was all hands on deck to migrate Orbitz products onto the Expedia software platform.
Bank of America, Senior Frontend Developer: Jul 2017 - May 2022
At over 280,000 employees Bank of America is by far the largest employer I have ever worked for. Because of the massive size most work at the Bank is for products and services that exist only internally to the Bank. About half my time was spent working for CCVT (Contact Center Voice Technology) supporting web-based desktop applications call center agents used to view the multitude of products and services the Bank offers for a give calling user in need of assistance. Another significant portion of my time was spent working for AuthHub a team that managed authentication mechanisms both internal and external as used by users logging into the website.
There were numerous challenges at the Bank that I had not encountered at smaller employers due to the size of the Bank and the almost draconian security necessary to keep a major financial institution protected from external threats. Each of these internal teams executed their own choice of technology stack which proved complicating when various applications required sharing components or direct interactions. Another significant consideration is that some teams stuck on aging legacy technology while other teams were continuously refreshing to keep up with the latest technologies. Wanting to write code more rapidly than the environment of the Bank allowed I began looking for smaller employers.
Educe Group, Senior Fullstack Engineer: Jun 2022 - Apr 2023
Educe Group looked very attractive because of their work culture. My responsibilities were to write/maintain/extend a cloud application named Calculo which provides tracking of continuous education credits required for licensed accountants. I was hired to be a senior software developer for my experience working with Node.js. Most of my time was spent in SQL writing Stored Procedures. This was my first encounter with SQL and though I learned so much there it became quickly apparent I could perform as a senior developer focused on SQL with less than a year experience working in SQL. Multiple members of the team were eliminated to reduce head count.
US Army Reserves, Chief Warrant Officer 2: Jan 1997 - Present
I am a Signal Warrant Officer in the US Army Reserves. The corporate equivalent is an IT and business operations associate principle. My responsibilities including running large technical teams, advising senior leaders on technical matters, and coaching soldiers to solve challenging technical problems in the field.
I have deployed overseas 5 times with the Army, including 2 years in Afghanistan. I hold a Top Secret clearance and maintain a CompTia CASP certification.