Image for post
Image for post

At Adobe, I work on the engineering team responsible for building Adobe Experience Platform Web SDK. This SDK supersedes some legacy libraries that Adobe provided customers to implement on their websites. One of the primary goals of the new SDK was to make it faster than the legacy libraries. Once we gathered and crunched the numbers, we published a blog post communicating these performance improvements to customers.

I wanted to use our benchmark data to declare that the SDK was, for example, 60% faster than the legacy libraries. As I started to calculate the exact percentage, I caught myself wondering…


Image for post
Image for post

My earliest memory of a computer was watching a series of circles appear on an old computer screen, falling in line one by one to form a crooked smiley face. I was fascinated. By pushing some buttons, my brother, sisters, and I could bend the behavior of this device to the extent of our creativity. We could express pictures or ideas using the BASIC programming language and, with a little work, make it beep at just the right moment.

This was an unlikely scenario for the time and place. I was born in 1983 and grew up in the small…


Image for post
Image for post

Have extra money you’d like to invest? Congratulations! You’re on the first step to securing your financial future. Now that you’ve decided to invest, it’s time to decide which type of investment account to put your money into. If you have sufficient money to invest, you may need to choose several. But which accounts are best? And in what order?

The strategy I outline below is compiled from my own research and experience. I’m not a financial advisor, but I hope you’ll find this valuable.

Decisions, decisions

As a modern employee, you likely have several types of investment accounts at your disposal…


Image for post
Image for post

I originally wrote this on November 5, 2015, when our daughter Brinley was six years old. I shared it on Facebook and am now sharing it with the rest of the world. Brinley is now ten years old. Most everything described below still applies; she’s just older and bigger now with a newer set of spinal rods and on oxygen 24/7.

With all that’s been going on with our daughter Brinley, I’ve had a lot of people ask about her condition and background. Since Brinley is now sleeping soundly I figured I would take a moment to write it up…


Image for post
Image for post

In a prior article, I wrote about how the Adobe Experience Platform Launch team ❤️ open source. We strongly believe that open source matters to the community for three reasons: transparency, ease of implementation, and continuous improvement. In an effort to continue our open sourcing efforts, we’re happy to announce that we’ve open sourced the Core extension (see the code repository).

What is the Core extension?

Adobe Launch allows companies to deploy marketing technologies onto their websites. As part of the process, marketers build rules to define how marketing technologies react to events that happen while a user is on their website. …


Image for post
Image for post

Let’s get this out of the way: Much has been written about why a full software rewrite is a bad idea. I largely agree with the sentiment. It typically is a bad idea. It brings with it high risk and a high rate of failure. You should spend a meaningful amount of time considering the risks involved in a software rewrite before taking the plunge.

For me, I don’t particularly enjoy talking in absolutes and I’m unconvinced that rewriting software is a clear-cut issue. …


Image for post
Image for post

This post is the fourth in a four-part series:

  1. An HTTP Caching Strategy for Static Assets: The Problem
  2. An HTTP Caching Strategy for Static Assets: Generating Static Assets
  3. An HTTP Caching Strategy for Static Assets: Configuring the Server
  4. An HTTP Caching Strategy for Static Assets: Testing the Implementation

For this, we’ll use the Chrome browser. First, we’ll clear our browser cache. Next, we’ll open the Chrome developer tools and show the Network tab. Then, we’ll load up our site. In our case, that’s https://launch.adobe.com. Once we get past the Launch login screen, we should see something similar to this:


Image for post
Image for post

This post is the third in a four-part series:

  1. An HTTP Caching Strategy for Static Assets: The Problem
  2. An HTTP Caching Strategy for Static Assets: Generating Static Assets
  3. An HTTP Caching Strategy for Static Assets: Configuring the Server

Now that we’re generating files according to plan, we need to start serving them with the appropriate cache headers from our server.

For Launch, we use NGINX for our HTTP server. Let’s take a look at our NGINX configuration (I’ve trimmed it down to the important parts):

server { ... location ~ \.cache-[a-z0-9]+\. { etag off; add_header Cache-Control "public,max-age=31536000,immutable"; } location ~…

Image for post
Image for post

This post is the second in a four-part series:

  1. An HTTP Caching Strategy for Static Assets: The Problem
  2. An HTTP Caching Strategy for Static Assets: Generating Static Assets

In Adobe Experience Platform Launch, the absence of a caching strategy is a bad caching strategy. We want most of our files to be cached as long as possible. Even so, when we release an update, we want to make sure the user gets the update. These goals might seem somewhat contradictory. If the files are always pulled from cache after the initial load, how will the browser ever know if there…


Image for post
Image for post

This post is the first in a four-part series.

In Adobe Experience Platform Launch, we provide a web application where our users manage their marketing technologies. To power the user interface, a number of assets (HTML, JavaScript, and CSS files, for example) must be shipped from our servers to the user’s browser.

Caching, in this context, is the technique of storing a copy of these assets on the user’s machine so when they use our application again or navigate to different pages that use the same files, the user’s browser doesn’t have to load the files from our servers again…

Aaron Hardy

I am a software engineer at Adobe working on the Launch product, primarily focusing on the Launch runtime library and extension development ecosystem.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store