5 WAYS TO DEFEAT BUYER APATHY WITH MARKETING VIDEOS

Apathy is a lack of interest, enthusiasm, or concern. It is synonymous with indifference. For B2B sales, apathy is a deal-killer. For B2B marketing, apathy is a non-starter.

Apathy may just be one of the greatest threats facing any B2B organization. Consumers have an abundance of other things to read and watch, and a plethora of other vendors to choose from in nearly every industry.

From where I sit, apathy is so scary because it threatens our core responsibility as marketers to create engagement, capture attention, drive interest, build loyalty, and ultimately drive action and change. None of that is possible unless a buyer is willing to lean in, engage with, and consume our content.

In short, we have to make buyers give a damn.

HOW DO MARKETERS USE VIDEO TO DEFEAT BUYER APATHY?

The antidote to apathy is curiosity. Curiosity is what makes human beings give something their attention, engage with it, and ultimately take action because of it. Curiosity is what ignites change.

For marketers, video has become a standard tool in our toolkits to drive curiosity among buyers. Eighty-seven percent of businesses now use video as a marketing tool, and more than ever (83%) say it gives them a good return on their investment. However, 90% of video marketers feel the level of competition and noise has increased in the past year.

How do we ensure our videos stand out? How do B2B firms use video marketing to break through to indifferent buyers?

A couple of weeks ago at PLAY 2019 in Boston, I presented a few ways to defeat buyer apathy using videos. Below, I’ve included five of these tips and some relevant examples, and my take on why they’re so effective.

1. KNOW YOUR NICHE, SERVE THEM WELL

Sixty percent of B2B brands admit they don’t understand their buyers, according to SiriusDecisions. Yet, buyers are 50% more likely to buy when they see personal value for them, or a positive impact on their career.

Before Eloqua was bought by Oracle for its marketing automation capabilities, it ran a video series about Modern Mark. It demonstrated exactly how well this brand understood its audience, and allowed potential buyers to see personal value through the eyes of this character, who was personally benefiting from the advantages Eloqua’s marketing technology delivered.

2. TALK LIKE A HUMAN BEING

One surefire way to make a buyer stop listening to your video is to speak the way our company boilerplates do, that is, heavy-handed and full of buzzwords.

A product demo from Lucidchart shows us the power of simply talking like a human being.

A customer testimonial from Slack achieves the same simple, approachable, engaging tone that makes you want to watch to the end. (When was the last time you wanted to watch a customer testimonial video through to the end?)

3. DRIVE URGENCY

Sure, we’re familiar with FUD: fear, uncertainty, and doubt. It’s a standard tool in the security and risk industry as we try to drive urgency among buyers. But fear-mongering gets old when every vendor in the space uses it. It also has a tendency to feel hyperbolic.

A video from Cisco took a ransomware attack storyline and flipped it on its head, exploring the attack from the perspective of the hacker themselves. It’s a script that makes your heart pound as you watch for its conclusion, and demonstrates how well Cisco understands each angle of this threat.

4. EARN TRUST

Forty-two percent of buyers don’t know which companies to trust, per Edelman. This was especially true in the world of SEO consultants before Rand Fishkin came along. The founder of Moz became known for being a transparent, educational resource among a sea of agencies keeping their SEO knowledge closely guarded.

To them, trade secrets were their secret sauce. To Rand, it became the foundation for a thought leadership platform that earned trust in an industry of secret tactics and shady business. His honesty led him to become the go-to authority on SEO, and his whiteboard Friday videos became a weekly example of this transparency.

In his book, Lost and Founder, Rand describes:

“We were called crazy and foolish for oversharing so much about the mechanics of the business. But we also became trusted, and, especially because the field of SEO and the broader world of tech startups are so often impenetrably secretive, it paid off.”

5. BE WHERE CUSTOMERS WANT YOU TO BE

One major driver of apathy is simply invisibility. Why would I watch your video if it takes remarkable effort to find it in the first place?

Are you gating all of your video content? Relying too much on email to promote it? Putting all of your eggs in the YouTube basket? Hiding it below the fold on some obscure page on your site, or blog post? Liberate your video content!

According to the Content Marketing Institute, 70% of B2B marketers use sponsored content on social media to promote their content. In their study, this was the #1 paid content distribution method.

For B2B firms, I strongly recommend investing in video on LinkedIn. The platform now boasts 500 million members, 260M of which log in monthly. Forty percent of those users are on the platform every day. Note: These are not just job-seekers; 61M are senior-level influencers.

Per LinkedIn, these users spend almost 3X more time watching video ads than with static sponsored content. “Video is the fastest growing format on our platform right now, and the one most likely to get people talking,” said Pete Davies, LinkedIn’s director of product management.

Leverage this engagement to give your videos a boost, and consider trying their new live video broadcast service, LinkedIn Live. It’s a beautiful interface on both desktop and mobile—and is a great way to be exactly where your audience is.

Overcoming buyer apathy is one of many challenges B2B marketers face over the coming months. But, it’s at the core of what makes our job so exciting. It just takes creativity and empathy in our video marketing strategy.

BRIGHTCOVE PRODUCT UPDATES: JUNE OF 2019

This year has been busy at Brightcove HQ, between our trip to Las Vegas for NAB and our ninth Brightcove PLAY here in Boston. Not only have we been attending and hosting major video industry events, our product team has been busy behind-the-scenes, making updates and improvements to our products. These new features give you the power to collect richer insights, provide custom subscription options, and more.

LIVE TO FACEBOOK

Brightcove Live to Social now enables Brightcove Live jobs to be streamed to Facebook, with other social destinations soon to follow. This feature enhances Brightcove as a hub that connects multiple sources (cameras, encoders, etc) and multiple destinations from one place. Learn how to start streaming live to Facebook right from your Brightcove dashboard.

OTT FLOW MULTI-TIER SUBSCRIPTIONS

OTT Flow customers can now provide their subscribers with multiple content pricing and packaging options in-product—meaning content creators can now introduce unique content packages to potential buyers at different price points, or even blend AVOD/SVOD strategies as a means of upselling users.

UI FOR SSAI

Users of Dynamic Delivery and SSAI enabled can now create and manage ad configurations in the Admin module. Dynamic Delivery users with SSAI and Live enabled also have the appropriate controls available for Live SSAI. This update improves workflow by allowing you to see all ad configurations in a single view. Learn how to implement server-side ads within Brightcove Live.

AD METADATA

Using the Live Program and Ad Metadata API, customers can now integrate into their broadcast playout system or pass specific data for ad targeting. Providing more granular details makes your ad inventory more attractive to advertisers, increasing demand and CPMs.

IMA SDK NOW INCLUDES OPEN MEASUREMENT

The IMA SDK for Android now includes the Open Measurement SDK, an industry standard developed by the IAB and designed to enable third-party viewability and verification measurement for ads served to mobile and desktop environments. The open measurement SDK makes provisions for video controls to be considered friendly obstructions that are essential to the user’s experience, thus excluding them from ad viewability measurement.

3 REASONS WHY BRANDS NEED TO LIVE STREAM ON SOCIAL MEDIA

In the past few years, the evolution of video on social channels has skyrocketed. We started with only being able to host videos on YouTube with no live streaming capabilities at all. Now, not only can we can post videos to every social network, but we can live stream to almost all of them.  In fact, according to CMSCMedia’s Social Media Trends to Watch and Capitalize on in 2019 report, video accounts for 85% of total internet traffic in 2019 so far, with the live streaming market expected to double by 2021. Live streaming to your brand’s social profiles is incredibly powerful and here are three reasons why you should start now.

1. LIVE STREAMING ON SOCIAL MEDIA EXPANDS AUDIENCE REACH

Each social channel has a unique audience. Twitter is the go-to place to see real-time content, whether it is breaking news or a great moment in sports. Live streaming to Twitter captures the audience that wants to get the most timely information. Facebook is where viewers go to connect with brands, friends, and family. When streaming to Facebook, you’ll capture an audience who is looking to engage with you and your brand directly. And finally, YouTube is where many viewers go for long-form content. From how-to pieces to chaptered stories, YouTube is the platform for learning new skills and product enhancements.

2. LIVE STREAMING ENHANCES BRAND AWARENESS

A natural benefit of expanding your audience reach across the various social platforms is that your brand will reach new people. In addition, live streaming to social channels brings a sense of authenticity to your brand. Anything can happen when you’re live, giving your audience a reason to tune in and a sense that they’re watching real people.

3. LIVE STREAMING BUILDS UNIQUE CONTENT

By live streaming to social channels, you build new video assets that you can use again once the event is complete. For our recent Live to Social launch at NAB, we did seven show floor interviews live on Facebook, including two interviews with Brightcove Partners, four separate interviews with Brightcove’s C-Level staff, and Product Managers. Because we covered the evolution of video and where we think it will go in the future—a topic that’s timely and evergreen—we can use that content in future campaigns. In fact, you can check out our Live from NAB Showfloor videos on-demand now, in Brightcove’s NAB Facebook Live playlist.

Launching a TV Program Catch-up Service – Nippon Television Pt 1

The history of video distribution in the television, newspaper and internet media industries has not been a smooth one, from the dawn of the industry to the present day. There is a history of unknown challengers, the “Video Addicts”, overcoming various trials and errors and failures. In this series of articles, our interviewer Tsuchiya will look back over the history of various challengers over 12 articles.

THE MULTI-TIERED OTT MODEL: GIVING AUDIENCES THE POWER OF CHOICE

When launching an OTT service, one of the first major decisions you must make involves determining how you will monetize your content.

While some older, more established revenue models continue to be popular choices for OTT content providers, a few newer options are becoming increasingly prominent.

By leveraging a multi-tiered OTT revenue model, you can leave this decision up to your audience and give them the flexibility to choose how they want to pay for your content.

Read on to learn more about different monetization models, and the benefits of the multi-tiered approach.

COMMON MONETIZATION MODELS

Ad-supported video on demand (AVOD), subscription video on demand (SVOD), and hybrids are some of the primary revenue models commonly used by OTT content providers today.

Here’s a brief explanation of how these models differ:

  • AVOD. Viewers receive access to free content in exchange for watching ads.

    • Among some of the best-known ad-supported video services are YouTube, Pluto TV, Crackle, and many publisher sites, such as Conde Nast and Vice Media.
  • SVOD. Within this model, viewers pay a subscription fee in order to watch content.

    • Subscriber-supported video services make up the largest segment of the OTT universe and include some very big players, like Netflix, Amazon Prime Video, HBO Now, and Showtime. But SVOD also is home to hundreds of other providers, like Hallmark Movies Now and WWE Network—as well as a plethora of very small, niche providers, such as Curiosity Stream and Crunchyroll.   
  • Hybrid. Some OTT services have begun to adopt a hybrid approach—providing both a free, ad-supported service and a premium subscription offering. This creates a soft transition for converting an audience over to a subscription model. Providers can take this strategy a step further by offering tiered subscription models and gating certain content so that only users who are willing to pay a premium can access it.

    • Hybrid offerings are getting a lot of attention as the cost of content continues to soar, with smaller services looking to programmatic advertising as a potential incremental revenue stream. In APAC, telco PCCW has had success with its Vie OTT service, offering consumers a large selection of lower-value content that’s ad-supported, as well as more premium content on a paid subscription basis. In The United States, CBS All-Access and Hulu are good examples of a truncated hybrid model—offering a service based on a subscription PLUS advertising, or a higher priced subscription package with no advertising. As the name suggests, hybrid models can be quite flexible.

Both AVOD and SVOD come with their own unique benefits and challenges. For those viewers who cannot or will not pay to consume video content, the traditional AVOD option remains a popular and successful monetization model. AVOD allows for precise user-level targeting based on a wide array of attributes and online behaviors—making it an increasingly attractive option for advertisers. AVOD is also a good option to drive audience acquisition and combat subscription fatigue. For services with more established audiences, SVOD offers a more linear, predictable stream of income. SVOD is also an ideal business model for smaller services with tightly focused content and a willingness to gradually build their audience over time.

OTHER MONETIZATION MODELS

Today’s OTT service providers seek flexibility in their go-to-market approaches, and want to experiment with additional revenue models, including:

  • TRANSACTIONAL VIDEO ON DEMAND (TVOD). This model allows users to sign up for or download the service at no cost, but requires the purchase of content on a per-title basis. TVOD is popular for long-form movie content or live pay-per-view (PPV) content, such as sporting events and other live events, like concerts. Apple and Amazon, for example, offer customers the option to buy or rent titles, while WWE, UFC, and professional boxing are all using PPV extensively.

  • AUTHENTICATED VOD (AUTHVOD). This model often requires users to log in using credentials from another platform, service, cable (TVE), or cellular subscription in order to access content. For this reason, AuthVOD is valuable when coordinating with partnerships or managing multiple properties or branded services. However, AuthVOD can also refer to a free, ad-supported service that requires a viewer to create a login to view. The benefit to the end viewer is the ability to do things like make “watchlists” of content and “pause and resume” across devices. The benefit to the service provider is the ability to know more about the end viewer for marketing and advertising purposes.

BENEFITS OF A MULTI-TIERED PRICING MODEL

Offering a multi-tiered pricing model lets content owners give audiences the flexibility to choose which package works best for their viewing needs and cost limitations. By providing your audience with the power to decide how they want to pay for your content (and how much), you can make your OTT service engage more viewers—and optimize your revenue by leveraging more points along the demand curve.

This evolution from the high-priced, stacked-with-channels model into more custom-build viewing seems quite natural—as we’re currently witnessing the golden age of video entertainment. Today’s viewer has a lot of options to choose from, is more price sensitive, and is willing to pay for the content that he or she is passionate about. Many of the most popular channels are major networks; however, the bulk of the paid services consumers are willing to pay the most for are niche. Therefore, multi-tiered pricing will give more freedom and flexibility to the modern viewer in choosing a video service.

BRIGHTCOVE BEACON

At Brightcove, we see the value of a content owner being able to price and package their content in different SVOD tiers. In partnership with Accedo and Cleeng, we’ve added our new Multiple Package SVOD offering to Brightcove Beacon, which empowers our customers to provide varied levels of access to their content through different subscriptions. These multi-tier subscription capabilities add sophistication to our market-leading solution at no additional cost for our customers.

With this feature, Brightcove customers will be able to offer vertical or horizontal subscription tiers. Vertical tiers allow customers to sell separate subscriptions for different types of content, which they can bundle as they wish. For example, they can offer one bundle for movies and one for sports content. Horizontal tiers are broken out by volume of content—often referred to as Gold, Silver, or Bronze packages.

If viewers do not have access to a particular asset, they will receive a message that they aren’t entitled to that content and be prompted to click through to the associated purchase page for the asset in question—driving upsell opportunities.

In today’s crowded OTT marketplace, content providers must build and scale their offerings with their target viewer’s interests in mind. As today’s viewers value choice and seek an attractive, relevant value proposition, the multi-tiered OTT revenue model is an exciting new option for service providers to consider.

HOW TO LAUNCH AND GROW YOUR OTT SERVICE

Today, more video is being consumed online than ever before. In fact, according to the findings from our 2018 Global Consumer Streaming Habits Survey, 58 percent of global consumers stream content at least once a week via a connected TV—while 51 percent stream at least once a week on a mobile device, and 50 percent do so on a computer or laptop.

In order to thrive in this increasingly crowded OTT landscape, you must understand your audience well enough to deliver the ideal user experience—with an attractive, relevant value proposition.

Are you ready to be a leader in the OTT space? Download our first OTT Essentials whitepaper, the ultimate guide to launching and growing an OTT service. Read on for a preview of what the white  paper covers; then download the asset for more insights and inspiration on how to provide the optimal user experience—and keep viewers coming back for more.

LAUNCH WITH CONFIDENCE

When launching an OTT service, you must establish your own compelling content and distribution strategy.

Ask yourself the following types of questions to define your strategy—and determine how you will execute on it to achieve the best results:

  • Which genre(s) of content will you offer?

  • Who is your target audience?

  • What is your budget?

  • How will you program an efficient, scalable screen experience on connected TVs, smartphones, tablets, and desktop computers?

  • How will you get your content in front of your target audience?

Once you define your overall strategy, you’ll need to determine how you will monetize your content. Some of the most popular business models used by OTT content owners are ad-supported video on demand (AVOD), subscription video on demand (SVOD), and the Hybrid approach, which involves providing both a premium subscription offering and a free, ad-supported service. When deciding which model works best for your business, you should consider factors such as your content catalog, audience’s location, and marketing budget.

DRIVE AUDIENCE GROWTH AND PROFITABILITY

Once you have an established network of viewers, you’ll need to continually work to grow your audience. And, in order to do so, you must understand different OTT churn metrics and how to reduce your churn rate. After all, it doesn’t matter how many new users you acquire if they churn early or often. As a best practice, you should compare your churn rate with your conversion rate on a monthly basis. Using this data, you can determine where to focus your efforts: acquiring new users or retaining current ones.

As audiences around the world become increasingly accustomed to a premium, TV-like viewing experience, it’s also crucial that you incorporate new functionality into your service on a regular basis. By doing so, you can keep your viewers engaged—empowering you to drive revenue and profitability. Whether you decide to enable advanced casting or incorporate live channels into your service, be sure to conduct regular A/B testing to develop a solid understanding of what is and isn’t working when it comes to your viewer’s experience.

WHEN A VIDEO CRASHES THE PLAYER AFTER 19 SECONDS

In any complex software, bugs exist, and when working on a large project you encounter them on a regular basis. The more memorable and interesting ones are the ones that have a simple cause, presenting in unusual and sometimes bizarre ways. This bug started with a single video causing a player to crash. This is by itself not that rare a report, however, the following details definitely stood out:

  • It only happened with a single specific video
  • It only happened on Android (but only on certain versions of Android)
  • It always crashed the player exactly 19 seconds into playback

The video itself was being served to Android devices using HTTP Live Streaming, Apple’s standard for fragmented video delivery based on the m3u playlist format. For content protection, AES-128 with PKCS#7 padding was used. This is generally referred to as HLS Encryption (or “HLSe” for short). Other formats available for the content, such as MPEG-DASH, didn’t present the issue, neither did HLS with FairPlay DRM (or even no drm). The issue was even more specific than “this video”, it was “this video, with HLSe”

Luckily for testing purposes this bug was easy to reproduce in Google’s ExoPlayer demo app, and with a respectable selection of test devices on-hand, it didn’t take long to get error codes and stack traces out of logcat for various major Android versions. The specific errors varied depending on the version of Android on the device, but they all shared a common theme; notably that there was some issue decrypting the media in one of the video segments. The primary exception, and the most interesting “Caused by” exception further down the stack trace, were all variants of these two (differing in wording among the Android versions tested):

java.io.IOException: Error while finalizing cipher
        at javax.crypto.CipherInputStream.fillBuffer(CipherInputStream.java:104)
        at javax.crypto.CipherInputStream.read(CipherInputStream.java:155)
        at com.google.android.exoplayer2.source.hls.Aes128DataSource.read(Aes128DataSource.java:96)

Caused by: javax.crypto.BadPaddingException: error:1e06b065:Cipher functions:EVP_DecryptFinal_ex:BAD_DECRYPT
        at com.android.org.conscrypt.NativeCrypto.EVP_CipherFinal_ex(Native Method)
        at com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER.doFinalInternal(OpenSSLCipher.java:568)
        at com.android.org.conscrypt.OpenSSLCipher.engineDoFinal(OpenSSLCipher.java:385)
        at javax.crypto.Cipher.doFinal(Cipher.java:1476)

Diving deeper here, code-wise, is a bit of a rabbit hole. The core cryptographic code is written in C and is pretty intimidating if you’re not used to it. Luckily, that “caused by” has a nice readable type, notably javax.crypto.BadPaddingException, so that helps us narrow down the issue further; the problem is with the padding. As per the specification from Apple, the padding algorithm being used in HLSe is PKCS#7, which is described in RFC-5652 Section 6.3:

6.3.  Content-encryption Process

   The content-encryption key for the desired content-encryption
   algorithm is randomly generated.  The data to be protected is padded
   as described below, then the padded data is encrypted using the
   content-encryption key.  The encryption operation maps an arbitrary
   string of octets (the data) to another string of octets (the
   ciphertext) under control of a content-encryption key.  The encrypted
   data is included in the EnvelopedData encryptedContentInfo
   encryptedContent OCTET STRING.

   Some content-encryption algorithms assume the input length is a
   multiple of k octets, where k is greater than one.  For such
   algorithms, the input shall be padded at the trailing end with
   k-(lth mod k) octets all having value k-(lth mod k), where lth is
   the length of the input.  In other words, the input is padded at
   the trailing end with one of the following strings:

                     01 -- if lth mod k = k-1
                  02 02 -- if lth mod k = k-2
                      .
                      .
                      .
            k k ... k k -- if lth mod k = 0

   The padding can be removed unambiguously since all input is padded,
   including input values that are already a multiple of the block size,
   and no padding string is a suffix of another.  This padding method is
   well defined if and only if k is less than 256.

If you’re anything like me, that description is a little hard to picture in your head. So here’s a few examples (all padding to a 16 byte block size):

  • 88 7c 46 66 9a 2f a2 59 4d 1e would be padded with 06 06 06 06 06 06
  • 63 would be padded with 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f
  • f5 5c 6b 13 cf 54 f8 45 c1 ca 67 ec 50 20 12 would be padded with 01

Simple enough then; in plain English, the value of the padded bytes is the number of bytes being padded, up to the block size being used.

Armed with an understanding of how the padding should work, and an error indicating incorrect padding, the next step was to check the code handling the padding for the video. The service in question is written in Go, which doesn’t have an implementation of PKCS#7 in its standard library, so the service has it’s own implementation. Here it is:

PKCS7Pad(in []byte) []byte {
    padding := 16 - (len(in) % 16)
    for i := 0; i < padding; i++ {
        in = append(in, byte(padding))
    }
    return in
}

Short and simple… and no obvious mistakes. There are even unit tests which seem to assert exactly the behaviour we’re expecting. So perhaps we need some more clues. It was at this point a detour was taken to compare what our code was producing to other implementations. Luckily the AES-128 encryption applied to HLSe segments is applied to the entire segment file, rather than just to parts of the file contents, as can happen with other content protection schemes. Producing alternative encrypted segments was easily done with OpenSSL, and we could use our dynamic media packager to get a non-protected copy of segments to encrypt. With a segment downloaded in both clear, and AES-128 encrypted, an alternative encrypted segment was generated using the following command:

openssl aes-128-cbc -K $KEY -iv $IV -in clear.ts -out alt_protected.ts

Doing this revealed a new and interesting piece of information, the output of the encryption from OpenSSL was exactly 16 bytes larger than the output from our Go app (ie. one block). Perhaps the issue wasn’t in the padding, but some strange edge case where a final block wasn’t being added. Reviewing the Go code again with this new piece of information in mind, the following conditional started to look suspicious:

// If this block does not match the AES block size we need to pad it out
if bytesRead != aes.BlockSize {

At face value, the algorithm simply reads data from the input buffer in chunks of length equal to the block size. It then checks how many blocks were read and pads to 16 bytes if necessary. Finally it passes the 16 byte buffer into the cipher and streams the output to an output buffer. So realistically, we only expect this conditional to trigger on the final block, because that’s the only one that will need padding. After some back and forth, something started to become obvious; there’s a scenario that isn’t explicitly being handled…. what if the final block is equal in length to the block size? The Go code will simply do nothing, asserting that no padding is required. To be sure, let’s check the spec again:

the input shall be padded at the trailing end with k-(lth mod k) octets all having value k-(lth mod k), where lth is the length of the input.

So if k is the block size, and lth is the length of the intput, then a block of length 16 would need 16-(0 mod 16) bytes of padding. 16-(0 mod 16) equals 16… So actually this is supposed to have an entire block of padding at the end, with the value of each padded byte set to 16! Finally, a lead! Our Go code isn’t spec compliant!

Skipping forward somewhat through testing a patch against the same content presenting the issue, we finally get working playback past the 19 second mark in the video! Ultimately the fix was to rewrite the flawed conditional to instead pad the last block regardless of how many bytes were read. This resolved the issue once and for all!

In summary, all the odd characteristics of this bug report stemmed from the the unlikely reality that out of all the content we’ve tested with our system, this is the first time that a video (stored as a fragmented mp4, muxed into transport stream segments) has resulted in a segment having a length (in bytes) that was perfectly divisible by 16. Why 19 seconds into the video? Well the segments are 10 seconds long and it was the third segment with the incorrect padding. Why did the crash only occur on some versions of android, and seemingly no other devices? Well it seems like the majority of implementations are resilient to this mistake. The older versions of Android were susceptible, but more modern versions could handle it.

With all questions answered, and the bug fixed, there’s nothing left to cover except a few lessons learned:

  • Use existing, battle-tested implementations of standardised algorithms whenever possible.
  • If you do end up implementing one yourself, you need to be pedantic with the spec. Missing an edge case will cost you!
  • Even the really fun and weird bugs can have boring solutions.