<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"> 
<channel>
<title>The Official Site of Adam McFarland</title>
<link>https://www.adammcfarland.com/</link>
<description>Recent updates about me and my businesses</description>
<item>
<title>Leveling Up Our Wholesale Program</title>
<link>https://www.adammcfarland.com/#post31</link>
<image>
<url>https://adammcfarland.com/images/detailed-image-wholesale-home-page-black.png</url>
<title>Leveling Up Our Wholesale Program</title>
<link>https://www.adammcfarland.com/#post31</link>
 </image>
<description><![CDATA[<p>Some of our best customers are members of <a href="https://www.detailedimage.com/Wholesale/" target="_blank">our wholesale program</a>. One of the downsides for those customers has been that our shopping experience has been designed for retail consumers, meaning that the advertised sales and pricing on the site didn't apply to our wholesalers. For many years, wholesale customers wouldn't see anything different until they reached the checkout page, where they would then see their custom discounts applied.</p><p>Over the years we've chipped away at this, first by updating item pricing throughout the site to reflect their custom pricing, and then by wholesale-specific sale items that we call Price Drops. We've also separately improved our login flow by adding multi-factor authentication and "keep me signed in" functionality, which results in our wholesalers now being logged in most of the time. This created the opportunity to give our wholesalers and entirely distinct shopping experience.</p><p>As of yesterday, we now customize the entire site to show our wholesale customers only the promotions relevant to them. This is most pronounced on our home page. At any given time, our wholesalers have a handful of different promotions available to them, but in the past they might not have known about them.</p><p>But the biggest change is visual: we created a different site theme for them. They now have what we're calling a "DETAILER Black" theme, based on the <a href="https://www.detailedimage.com/Detailer-M102/" target="_blank">DETAILER brand</a> that we've created and promoted to our wholesale customers for many years. They can of course switch back to the standard blue theme, but we hope this gives them a sense of exclusivity. I know that I now prefer the black theme when using the site!</p><p>We're hoping that these improvements really help boost our wholesale program as we enter our 2026 peak season.</p>]]></description>
<pubDate>Tue, 10 Feb 2026 00:00:00 -0500</pubDate>
</item>
<item>
<title>Learning to Focus on Our Core Competencies</title>
<link>https://www.adammcfarland.com/#post30</link>
<description><![CDATA[<p>Coming out of the pandemic our business had scaled up considerably to a size that seemed both unattainable previously and somewhat undesirable to us. And while we were able to solve the initial "problems" that come with unplanned growth - additional warehouse space, inventory management, scaling the website - we were left with a lot of internal systems that worked great when we were less than 10 people with little turnover, but became increasingly difficult to manage when we hit the 20 employee mark and saw considerable turnover in our warehouse staff. </p><p>In particular, our in-house HR and payroll systems that served us so well early on (and saved us a fortune) became more and more time consuming and stressful for us as owners and for our key managers. </p><p>Over the past six months we've hired both an outside HR firm and a payroll company, and have begun to integrate anything that falls under those umbrellas into software that we license from the payroll company. On the HR side of things, they created an improved employee handbook for us, they're monitoring the ever-changing state and national laws so that we don't have to, and they're available to answer any questions that we have when inevitably we encounter a situation that we haven't seen before. </p><p>The payroll company integrates our time tracking and payroll into a single piece of software, which we'll also be using for things like PTO requests, benefits management, and onboarding new employees. </p><p>At a smaller scale we prided ourselves on "doing everything in house", whereas now we're really trying to focus on our core competencies and hire the experts to handle the rest. It's a natural evolution for sure, but also a change in mindset that wasn't necessarily obvious to us despite it being one that we're very happy with now and that makes the business stronger.</p><br />
]]></description>
<pubDate>Fri, 10 Jan 2025 00:00:00 -0500</pubDate>
</item>
<item>
<title>Strengthening Our Newsletter Infrastructure</title>
<link>https://www.adammcfarland.com/#post24</link>
<description><![CDATA[<p>We recently made a big improvement under the hood to our newsletter system. As was the case with most aspects of our business, when we started we didn't like what was out there when it came to newsletter software. For a short time we used the open source phpList, but eventually decided to build our own system, which we did in 2012. We became experts in SPF, DKIM, DMARC, feedback loops, bounce management, and the like. </p><p>For a long time, this was perfect. In a relatively low-margin industry, our email bill was $0. We continued to integrate the system into our shopping cart in ways that would be extremely difficult or impossible with the newsletter services that most companies use. For instance, we can duplicate a previous promotion on the backend by clicking a button and in turn it would schedule products to go on sale, our website to update, a Google Merchant Center promotion, schedule the newsletters, and much more. </p><p>However, over the past several years it became increasingly problematic to send increasingly large volumes of email from our server. One example - if our IP was blocked by a service from sending newsletters, it was also blocked from sending transactional emails such as order confirmations. </p><p>We set out for a service that would allow us to keep all of our existing systems in place, but send the newsletters themselves through an API call. This proved to be much more difficult to find, and even more difficult to execute. </p><p>We chose Elastic Email's Email API and warmed up two dedicated IPs for our newsletters. After months of issues, the system is finally stable. It's now completely separate from our server and our IP that we use for transactional emails. We're much more effective at processing bounces because of how Elastic Email is able to categorize the bounce type prior to passing the information along to our webhook. Monitoring, debugging, and dealing with provider blocks are all much more efficient and straight forward. </p><p>Of course, this comes at a cost. But email deliverability is not our core competency or a market differentiator, and lots of companies are now great at it, so it made perfect sense as a small team with limited resources to utilize a partner like Elastic Email so that we can focus on what we do best. </p>]]></description>
<pubDate>Mon, 05 Feb 2024 00:00:00 -0500</pubDate>
</item>
<item>
<title>Matomo Analytics + No More Ad Trackers</title>
<link>https://www.adammcfarland.com/#post22</link>
<image>
<url>https://adammcfarland.com/images/detailed-image-privacy.png</url>
<title>Matomo Analytics + No More Ad Trackers</title>
<link>https://www.adammcfarland.com/#post22</link>
 </image>
<description><![CDATA[<p>The end of Google's Universal Analytics presented us with an opportunity: is this how we would do analytics and ads if we were starting the business today? The easy choice would have been to upgrade to GA4, keeping third party ad tracking cookies from Google and leaving ad trackers from Meta and Bing untouched. </p><p>But with Safari and iOS leading the way, most major browsers now block third-party tracking cookies. Chrome is the lone exception, presumably to protect Google Ads, but even they will be at some point in 2024. Ad retargeting isn't nearly as useful as it was a few years ago, and ad companies have done a poor job with privacy protections, making retargeting from third-party cookies less ethical in my opinion.</p><p>For us, all options were on the table, and thankfully we found what we were looking for with the privacy-focused <a href="https://matomo.org/" target="_blank">Matomo Cloud</a>. Matomo isn't just a 1:1 replacement for Google Analytics - there are <a href="https://matomo.org/matomo-vs-google-analytics-comparison/" target="_blank">a ton of useful features that GA does not have</a>. Of course, Matomo is paid software, but the prices are very reasonable and they're a company we're happy to support.</p><p>The big question was: could we still run successful ad campaigns? Matomo's <a href="https://matomo.org/guide/manage-matomo/advertising-conversion-export/" target="_blank">advertising conversion export</a> solved the problem. When you click an ad on Google, for instance, Google puts a gclid parameter in the URL. Matomo then exports a list of the gclid's that converted into sales nightly along with the revenue associated with the click. Google knows what clicks convert, but nothing more.</p><p>We recently added Matomo to our site and removed tracking code for Google Analytics, Meta, and Bing. Now, when you load our site in a browser like Firefox and click on the privacy shield, you see the glorious message "No trackers known to Firefox were detected on this page." We also got the fringe benefits of improving page speed, simplifying our code base, and an updated and <a href="https://www.detailedimage.com/Privacy/" target="_blank">improved Privacy Policy</a>.</p><p>This is one of those moves that I really feel good about. We took Google's closure of Universal Analytics and turned it into an opportunity to make a series of improvements that are better for us and better for our customers.</p>]]></description>
<pubDate>Tue, 27 Jun 2023 00:00:00 -0400</pubDate>
</item>
<item>
<title>Overhauling Our Shipping Rates System</title>
<link>https://www.adammcfarland.com/#post20</link>
<description><![CDATA[<p>We recently completed an entire overhaul of our system for quoting shipping rates during checkout. Unlike (literally?) every e-commerce store I am able to study, including major platforms like Shopify, we were not pulling shipping quotes in real-time directly from shipping providers (USPS and FedEx in our case). Originally we did this, but a prolonged FedEx outage on Cyber Monday in 2014, combined with a slower checkout experience while waiting for the rates to load, led us to reconsider our system. </p><p>At the time, we decided to "reverse engineer" FedEx's rate quotes and build our own rate quoting system that regularly pinged the API for rates by zip code range and then adjusted for DIM weights, surcharges for residential or rural delivery, and the like. When we added USPS in 2015, we did the same thing. </p><p>The system served us well for years, but eventually became unsustainable during the pandemic. The code was already complex, the database tables were massive, and yearly updates were difficult for me and impossible for anyone else. But then both providers started updating their rates and surcharges and formulas much more than once per year for peak time periods and sometimes "just because." </p><p>There was also the major downside of lock-in. Adding another service like UPS or DHL or LaserShip would have been extraordinarily difficult because we'd need to first reverse engineer their system as well. </p><p>At the same time, my big initiative right now is modernizing and simplifying our 15+ year-old platform to set us up for success in the next decade. </p><p>So last year I started working on a system to replace our custom system. The upsides are clear: less code, simpler maintenance, more accurate rates, the ability to add other providers relatively easily. The downsides are also clear: slower load times and reliance on multiple 3rd party services at a critical stage of checkout. </p><p>I overcame the biggest hurdles by progressively loading the checkout page - meaning that most of the page still loads immediately, and then 1-2 seconds later the shipping rates and totals fill in - as opposed to waiting for the rates to load first. I also utilized cURL multi-handles in PHP to allow for asynchronous API requests - FedEx and USPS at the same time instead of FedEx first, then USPS as most code would execute - which not only speeds up times now from 2-4 seconds to 1-2 seconds, it allows for multiple services to be added in the future without any loss in speed. And, most importantly, if rates aren't returned within 3 seconds we load rates from a backup system, which is a significantly scaled back and less-accurate version of our prior system, while still being reasonably accurate for our most popular services. </p><p>I estimate that the new code base is about 10% of the old system, we'll be able to slim down the database by about a dozen tables, and I was able to eliminate several automated processes that ran all day long on the server. </p><p>This week, after almost six months of work, the entirety of the new system went live. So far I'm thrilled. It's working great, our customers should barely notice (I can barely notice even when I'm testing and paying attention to page speed!), and it sets our business up for shipping success in the coming years no matter how we change or the industry changes.</p>]]></description>
<pubDate>Fri, 03 Feb 2023 00:00:00 -0500</pubDate>
</item>
<item>
<title>A Smarter Approach to Black Friday</title>
<link>https://www.adammcfarland.com/#post18</link>
<description><![CDATA[<p>For over a decade Black Friday and Cyber Monday were a celebration for us. We'd set sales records. We'd take photos of the towering piles of packages. We'd work weekend shifts and have weekend pickups to make sure everything got out the door on time.  I'd often write a blog post celebrating all of this. </p><p>As our business has evolved and retail in general has scaled back and spaced out the holiday shopping season (remember when stores would open on Thanksgiving?), we've adjusted our approach to similarly be a little more measured, a little more balanced, a little less chaotic. </p><p>Our volume has grown disproportionately in our spring and summer peak season, meaning a huge spike on Black Friday is out of the ordinary for the fall/winter and also less necessary.  By starting our promotions earlier and dialing back the biggest ones (in particular combining huge discounts with free shipping), we've solved a bunch of problems all at once. </p><p>While our customers still get great deals, we're no longer shipping a ton of volume at low margins. We don't need to staff up, work late, work weekend shifts, or coordinate weekend package pickups. We also don't need to overstock inventory heading into a slower period over the winter. </p><p>The result is that we can all enjoy our holidays and set up the business for greater success heading into the winter and next year's peak season.</p>]]></description>
<pubDate>Fri, 02 Dec 2022 00:00:00 -0500</pubDate>
</item>
<item>
<title>Bringing Package Tracking Data to Detailed Image's Shopping Cart</title>
<link>https://www.adammcfarland.com/#post16</link>
<image>
<url>https://adammcfarland.com/images/detailed-image-tracking-delivered-example.png</url>
<title>Bringing Package Tracking Data to Detailed Image's Shopping Cart</title>
<link>https://www.adammcfarland.com/#post16</link>
 </image>
<description><![CDATA[<p>We recently launched a really nice feature for Detailed Image's shopping cart that filled in some holes in the customer experience and greatly improved our internal shipping data.  We're now tracking the status of packages after they leave our warehouse using the FedEx API and USPS API.</p><p>Previously, our shopping cart's interaction with a customer's order ended after it was shipped.  We'd send them an email with a link to the tracking number on FedEx.com or USPS.com.  Their order status pages would show "Shipped" with the tracking number, and that would be the end of it.</p><p>Over the years it has become more common place to manage tracking and delivery information on the retailer's site (or using a third-party like Narvar).</p><p>Our system now checks on undelivered orders every few hours and updates the latest status and a few other details in our database, which enables us to do a bunch of cool things:</p><ul><li>Update those order status pages to show "Delivered" once a package has arrived.</li><li>Display real-time tracking data on our website (we do a live API call when the page is loaded to ensure the latest information is present).  This keeps customers on our site and allows us to prevent the tracking events in a clean, consistent manner along with added information from our system such as when the order was processed and picked up.</li><li>Improve our contact form workflow so that certain types of issues, such as an incorrect item in a package, can only be submitted after delivery.</li><li>Proactively reship orders when there's a damage, exception, or a package is lost.</li><li>Study delivery speeds by service and/or geographic location with a simple query of the database.  This missing piece of information can help us with everything from our checkout page delivery estimates to negotiating better rates with shipping providers.</li><li>Send delivery emails when a package has arrived (we haven't done this yet).</li></ul><p>We all shop online a lot.  This was one of the few things lacking in our core shopping experience that we all felt we needed.  When we mapped out the project and saw just how many "wins" there would be, it became much more of a priority.</p>]]></description>
<pubDate>Tue, 20 Sep 2022 00:00:00 -0400</pubDate>
</item>
<item>
<title>Playing Defense</title>
<link>https://www.adammcfarland.com/#post15</link>
<description><![CDATA[<p>One of the things that I've noticed about our business lately is that we're spending quite a bit more time on "defense" these days than on "offense".  The result is that we haven't really had any exciting announcements this year, but it doesn't mean that we're not doing great work.</p><p>On the tech side of things, we've been adding more sophisticated layers of security to our website to improve how fraudulent purchases/attempts are handled.  As the person who usually responds to those types of issues, automating these systems has become a top priority for me over the past two years so that I can spare myself the on-call work.</p><p>Internally, we've taken steps to secure our workflows and migrate much of the team over to Chromebooks, which pair well with our Google Workspace account.</p><p>We've seen this in other areas of the business too: HR policies, accounting precautions, and insurances have increased in importance.</p><p>I'm pretty agnostic about this type of work: I'd be lying if it's as exciting as developing a brand new idea, but it's also satisfying in its own sense because you're protecting all of your hard work, protecting your employees, reducing future headaches, and hopefully reducing the chance of some catastrophic event crushing your business.</p><p>Still, you can see how "playing defense" all day can lead to a different type of business threat. You become susceptible to competitors playing offense, you miss out on changes in the market while you're playing defense, or your offensive skills become rusty.</p><p>So as we enter the second half of 2022 reasonably caught up from the two-year chaos brought on by the pandemic, I'm hoping that we can strike a healthier balance between the two and start playing a little more offense.</p>]]></description>
<pubDate>Tue, 21 Jun 2022 00:00:00 -0400</pubDate>
</item>
<item>
<title>Expanding Our Warehouse (Again)</title>
<link>https://www.adammcfarland.com/</link>
<description><![CDATA[We renewed our warehouse lease and agreed to our third (and likely last) expansion.  What started out as a 5,200 sq-ft space in 2008 will be over 22,000 sq-ft once construction is completed in 2022.  In addition to more space for products, we're adding another office, a new break room, new bathrooms, and an improved shipping dock.]]></description>
<pubDate>Thu, 02 Dec 2021 00:00:00 -0500</pubDate>
</item>
<item>
<title>The 2021 Detailed Image Design Refresh</title>
<link>https://www.adammcfarland.com/#post11</link>
<image>
<url>https://adammcfarland.com/images/detailed-image-before-after-comparison-design-refresh-2021.jpg</url>
<title>The 2021 Detailed Image Design Refresh</title>
<link>https://www.adammcfarland.com/#post11</link>
 </image>
<description><![CDATA[<p>We recently completed a project that we internally called a "design refresh" for <a href="https://www.detailedimage.com" target="_blank">Detailed Image</a>. </p><p>One of the big challenges with having an e-commerce store that dates back to 2007 is keeping it fresh and modern without breaking what works.  The design aesthetic of our 2013 launch, which included a fully responsive design, was largely intact.  After all of these years, it was starting to show its age.  So we decided to embark on our "design refresh" with the explicit goal of modernizing the aesthetic without changing the customer experience in any notable way. I've read plenty of tales of successful sites that launch a complete design overhaul, move a bunch of things around, and then are scrambling when sales dip by 25% or more. Our sales were strong, conversion numbers were good, customer retention right where we wanted it to be, and - like it or not - those returning customers have a familiarity with our shopping experience, and changing that carries enormous risk. </p><p>With that said, I couldn't be happier with the end result.  The site looks and feels like a modern site, while also still feeling like Detailed Image.  <a href="https://www.adammcfarland.com/images/detailed-image-before-after-comparison-design-refresh-2021.jpg" target="_blank">Here's an example of the header before and after</a>.  The background image has changed, everything is tightened up to get more content above the fold, less images are used, and the button/tab/nav design aesthetic is cleaner.  The first time that a long-time customer visits the refreshed site, they should notice that something feels cleaner or looks better without being able to put their finger on it. From a usability standpoint, everything is right where they remember it. </p><p>Executing on this took much more time than expected.  We combed through every page of the site, placing particular emphasis on important-but-long-untouched pages like our registration, cart, and checkout pages. Form fields have better spacing, buttons are larger and flatter (gradients are gone). Less bold text and less borders are used for a cleaner look. And a whole slew of other changes improved the responsive design usability at various sizes. </p><p>Early returns have been encouraging.  There haven't been any reported issues.  The few comments that we have received have been positive.  And after a full month the checkout page converted at a notably higher rate than the previous month despite it being a slower time of year for us.  That may normalize over time, but the main reason I track it closely is to ensure that it doesn't get worse, and we appear to be safe there.</p>]]></description>
<pubDate>Wed, 24 Nov 2021 00:00:00 -0500</pubDate>
</item>

</channel>
</rss>