Logo
    Search

    Podcast Summary

    • Web Development Horror StoriesLearn from mistakes, understand root cause, and take necessary precautions to prevent similar incidents in the future. Importance of having a good backup system in place and regularly testing it.

      Even in the spookiest corners of web development, there's always a lesson to be learned. On this episode of Syntax, Scott and Wes share some of the most cringeworthy web development stories they've received, from accidental database deletions to putting swear words in the wrong place. These tales may be spooky, but they serve as reminders of what not to do. Just as we're drawn to news stories of accidents or mishaps, these web development stories can help us avoid making the same mistakes. Scott shares his fear of ATV accidents, and how he's careful to understand the cause of any incident. Similarly, in web development, it's essential to learn from mistakes and understand the root cause to prevent similar issues in the future. The episode is sponsored by three companies: Sentry for error exception and bug tracking, Prismic for headless CMS, and FreshBooks for cloud accounting. The hosts discuss each sponsor in detail. The first story shared is from a long-time listener and fan of the show. The developer, while working on an education technology company using React, accidentally deleted a database. The takeaway from this story is the importance of having a good backup system in place and regularly testing it. These stories may be spooky, but they serve as valuable reminders for web developers to be cautious, learn from mistakes, and take necessary precautions to prevent similar incidents in the future.

    • Improving performance with windowing instead of infinite scrollImplementing windowing instead of infinite scroll can significantly improve performance and prevent lengthy render times in React applications dealing with large datasets.

      When dealing with large datasets and rendering lists in React applications, using windowing instead of infinite scroll can significantly improve performance and prevent lengthy render times. This was highlighted in a project involving a database of practice questions for schools, where the use of infinite scroll led to unacceptably long render times for exams with hundreds of questions, causing issues during timed exams for multiple classes of students. The solution was to implement windowing, which only renders the items in the current viewport, improving performance and preventing lengthy render times. Two popular libraries for implementing virtualized lists in React are React Virtualized and React Window. This experience serves as a reminder of the importance of considering rendering performance, especially when dealing with large datasets, to ensure a smooth user experience.

    • Managing notifications effectively to prevent overwhelming situationsUnchecked notifications and alerts can lead to inconvenience, distress, and financial consequences. Effective management includes limiting the number of notifications (throttling) and utilizing services that group or throttle notifications.

      Unchecked notifications and alerts can lead to overwhelming situations, causing distress and potential financial consequences. The first story shared involved a legacy web application that sent push notifications for 404 errors, resulting in thousands of notifications during a penetration test. This experience earned a "4 pumpkins out of 10" rating due to the inconvenience it caused. The second story, named "Dark Friday," described accidentally deleting hundreds of orders during Black Friday instead of fixing errors in the queue. This mistake led to the loss of those orders and the inability to correct the issue. Both stories highlight the importance of managing notifications effectively and being aware of the potential consequences of unchecked alerts and errors. Throttling, or limiting the number of notifications, can help prevent such situations. Additionally, services like Twilio offer solutions to group or throttle notifications, which can be beneficial in preventing overwhelming situations and saving costs.

    • Misconfigurations and Neglected Testing Can Lead to Significant Financial LossesThorough testing, attention to detail, and maintaining good coding practices are crucial, even under pressure to meet deadlines or maximize conversion rates, to prevent significant financial losses.

      Even small oversights or negligence in development processes can lead to significant financial losses for large companies. In the first instance, a misconfigured auto-incrementing ID field in a database prevented hundreds of people from receiving a Black Friday deal. In the second case, a rush to implement quick AB tests in a ticketing company resulted in neglected testing and code maintenance, leading to a disorganized and potentially risky codebase. These incidents highlight the importance of thorough testing, attention to detail, and maintaining good coding practices, even when under pressure to meet deadlines or maximize conversion rates. Additionally, the consequences of such mistakes can be severe, potentially costing thousands or even millions of dollars. It's essential to prioritize these tasks and ensure they are not overlooked, even in high-pressure environments.

    • Costly mistakes from neglecting testing and code reviewsNeglecting testing and code reviews can lead to financial losses, as demonstrated by a podcast listener who inadvertently changed a button's visibility and lost $1,000,000 in sales. Always prioritize testing and reviews to prevent costly mistakes.

      Neglecting testing and code reviews can lead to costly mistakes with significant financial consequences. The story shared by a podcast listener, Weston Scott, illustrates this point perfectly. He made a seemingly minor change to bring a confirm purchase button up on a checkout page, but because there was no testing or review process, he inadvertently moved the button out of an AB test and made it visible to all users instead of 50%. The result was a loss of around $1,000,000 in sales. This incident underscores the importance of having a testing and review process in place to catch and address potential issues before deploying changes. Additionally, using a service like Sentry can help collect errors and exceptions, making it easier to identify and address bugs. So, always prioritize testing and reviews to prevent spooky surprises in your code.

    • Data breaches caused by careless handling of sensitive informationNeglecting security protocols and best practices can lead to data breaches, affecting millions and requiring extensive remediation efforts. Always keep sensitive information private and use efficient tools to minimize risk.

      Neglecting security protocols and carelessly sharing sensitive information can lead to serious data breaches. In the discussed scenario, an employee forgot to keep a database file private, making it publicly accessible and potentially exposing millions of people's personal data, including email addresses, home addresses, and banking information. This mistake led to the company sending notices to all users, changing all database passwords, and dealing with the aftermath for an unknown duration. Another key takeaway is the importance of following best practices when working with open-source software. In the shared story, a developer worked on a learning management system (LMS) using Moodle, an open-source solution. While the LMS had a popular plugin, the developer encountered challenges when upgrading it due to the clunky codebase and limited access to lower-level APIs. This made calculating grades resource-intensive and slow, requiring the creation of a binary sorting function with significant iteration. Both incidents serve as reminders of the importance of security and best practices in software development and maintenance. By following established protocols and using efficient tools, organizations and individuals can minimize the risk of data breaches and improve overall system performance.

    • Neglecting performance optimization and testing can lead to major issuesFailing to optimize features and test for performance can result in significant slowdowns and disruptions for users, causing frustration and embarrassment for teams.

      Neglecting performance optimization and testing, even on seemingly insignificant features, can lead to major issues, especially during high-traffic periods. In this case, a university's grade reporting system experienced a significant slowdown due to excessive HTTP requests caused by unoptimized Ajax events. The developers were not involved in DevOps, preventing them from addressing the issue promptly. The result was a DDoS-like situation, causing frustration and embarrassment for the team. It took days to deploy a fix due to bureaucratic processes. This incident served as a reminder of the importance of considering performance and testing in development, even on smaller features, to prevent potential disruptions for users.

    • Testing is crucial to prevent major issues, especially for large user basesNeglecting testing can lead to significant consequences, such as a DoS attack and inability to access an app for large user bases.

      Thorough testing is crucial to prevent major issues, especially when dealing with applications that will be used by a large number of people. A simple oversight, such as not testing an application's performance with a large user base, can lead to significant consequences. In the case discussed, a scheduling app for a major conference failed due to an infinite scroll feature that caused a Denial of Service (DoS) attack. This resulted in the conference attendees being unable to access the app and one developer having to spend the conference troubleshooting instead of enjoying it. This incident serves as a reminder that testing should not be overlooked and that it's essential to consider the potential impact on a large user base.

    • Using unprofessional filler text can lead to serious consequencesUsing inappropriate filler text, even from beloved sources, can lead to unintended consequences in professional settings. Use professional filler text or none at all.

      Using unprofessional filler text, even if it's from a beloved source like Doctor Who, can lead to serious consequences in a professional setting. In the given story, a developer used Doctor Who quotes as filler text on a mobile-friendly website for a state department of education, only to have it mistakenly shared with state legislators and higher-ups, who believed the site had been hacked. The incident resulted in the developer facing potential employment consequences. This incident underscores the importance of using appropriate and professional filler text or none at all when working on projects for clients or organizations. It's a valuable reminder to maintain a level of professionalism in all aspects of our work, even when it comes to seemingly insignificant details like filler text. Additionally, the discussion also highlighted Prismic, a content management system that allows developers to build websites using their preferred tech stack while providing APIs for easy integration. It offers a no-code solution for building pages by connecting different slices of content together, making it a versatile option for developers looking for a streamlined website building experience.

    • Mistakes Happen, But Support from Team Can Turn the Situation AroundEven small mistakes can have big consequences, but having a supportive team can help recover from the situation and build trust. Clear communication and understanding are essential in the workplace, especially when dealing with technology which can sometimes create challenges in data processing.

      Even the smallest mistakes in the workplace can lead to unexpected outcomes, but having a supportive team can help turn a negative situation into a positive one. In the story shared, an employee accidentally sent out payments to customers instead of holding them for a merchant who was still completing legal paperwork. The team had to quickly recollect the payments, and the employee responsible for the task was initially confused by the formatting of the data in an Excel file. However, with the help of her team, she was able to successfully parse the data and complete the task. The story also highlights the importance of clear communication and transparency in the workplace. The employee could have been reprimanded or even fired for the mistake, but instead, her boss showed understanding and even shared a story of his own past mistake. This created a sense of camaraderie and trust among the team. Another interesting aspect of the story is the use of technology and how it can sometimes create challenges in data processing. In this case, the precision of Excel caused the transaction codes to be rounded and appear as exponent values, leading to initial confusion. Overall, the story serves as a reminder that mistakes happen, but how we respond to them and the support we receive from our team can make all the difference. It also highlights the importance of clear communication and the potential challenges of working with technology.

    • Effective communication and attention to detail during financial transactionsStay organized, communicate effectively, and utilize efficient tools to manage finances and daily tasks. Identify and resolve payment issues promptly, and consider using a reliable cloud accounting service like FreshBooks for invoice and payment management.

      Effective communication and attention to detail are crucial when handling financial transactions, especially during critical periods like the end of a fiscal year. This was emphasized in a story shared about a payment processing issue that was identified and resolved due to a test payment and careful double-checking. Additionally, using a reliable cloud accounting service like FreshBooks was highlighted for its convenience and transparency in managing invoices and payments. Another key point discussed was the importance of finding tools that simplify daily tasks and improve productivity. A magnetic pop socket wallet for an iPhone was mentioned as a game-changer for the speaker, combining a wallet function with the MagSafe feature and eliminating the need to carry a separate wallet or keys. Overall, the importance of staying organized, communicating effectively, and utilizing efficient tools was a recurring theme throughout the conversation.

    • Exploring the Latest Advancements in Car Keys and Dental Care ToolsFrom car keys that sync with smartphones to efficient water flossers and convenient lithium-ion batteries for electric toothbrushes, the speaker shares his experiences with the latest technology advancements in everyday items and the importance of user-friendly design.

      Technology is constantly evolving, whether it's in our cars or our dental care tools. The speaker shares his experience with the latest advancements in car keys, which are now becoming smartphone compatible, but the updates are not always reliable. He then talks about his recent purchase of a water flosser and how impressed he is with its efficiency and long-lasting battery. The speaker also expresses his frustration with the old-fashioned charging dock for his electric toothbrush and praises the convenience of modern lithium-ion batteries. Overall, the conversation highlights the benefits of embracing new technology and the importance of efficient and user-friendly design.

    • Engage with podcasts for support and discoveryBy subscribing, reviewing, and exploring new podcasts, you can support creators, spread the word, and enhance your personal growth and knowledge.

      Importance of actively engaging with the content you consume, especially when it comes to podcasts. By subscribing and leaving a review, you're not only showing your support for the creators but also helping to spread the word about valuable and informative shows. Additionally, this conversation highlighted the benefits of listening to podcasts for personal growth and staying informed on various topics. Whether you're looking to learn a new skill, expand your knowledge, or simply be entertained, podcasts offer a convenient and accessible way to do so. So, keep exploring new shows, leave feedback, and continue to make the most of this powerful media format.

    Recent Episodes from Syntax - Tasty Web Development Treats

    789: Do More With AI - LLMs With Big Token Counts

    789: Do More With AI - LLMs With Big Token Counts

    Join Scott and CJ as they dive into the fascinating world of AI, exploring topics from LLM token sizes and context windows to understanding input length. They discuss practical use cases and share insights on how web developers can leverage larger token counts to maximize the potential of AI and LLMs.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    CJ: X Instagram YouTube TwitchTV

    Randy: X Instagram YouTube Threads

    788: Supabase: Open Source Firebase for Fullstack JS Apps

    788: Supabase: Open Source Firebase for Fullstack JS Apps

    Scott and CJ chat with Paul Copplestone, CEO and co-founder of Supabase, about the journey of building an open source alternative to Firebase. Learn about the tech stack, the story behind their excellent documentation, and how Supabase balances business goals with open-source values.

    Show Notes

    • 00:00 Welcome to Syntax!
    • 00:30 Who is Paul Copplestone?
    • 01:17 Why ‘Supa’ and not ‘Super’?
    • 02:26 How did Supabase start?
    • 08:42 Simplicity in design.
    • 10:32 How do you take Supabase one step beyond the competition?
    • 12:35 How do you decide which libraries are officially supported vs community maintained?
      • 15:17 You don’t need a client library!
    • 16:48 Edge functions for server-side functionality.
    • 18:51 The genesis of pgvector.
    • 20:59 The product strategy.
    • 22:25 What’s the story behind Supabase’s awesome docs?
    • 25:26 The tech behind Supabase.
    • 35:46 How do you balance business goals with open source?
    • 42:01 What’s next for Supabase?
    • 44:15 Supabase’s GA + new features.
    • 48:24 Who runs the X account?
    • 50:39 Sick Picks + Shameless Plugs.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    CJ: X Instagram YouTube TwitchTV

    Randy: X Instagram YouTube Threads

    787: You Should Try Vue.js

    787: You Should Try Vue.js

    Scott and CJ dive deep into the world of Vue.js, exploring what makes this frontend framework unique and why it stands out from React and Svelte. CJ gives a comprehensive tour, covering everything from getting started to advanced features like state management and Vue’s built-in styles.

    Show Notes

    Vue.js: The Documentary.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    786: What Open Source license should you use?

    786: What Open Source license should you use?

    Scott and CJ dive into the world of open source, breaking down its meaning, benefits, and the various types of licenses you’ll encounter. From permissive licenses like MIT and Apache 2.0 to copy-left licenses such as GNU GPLv3, they’ll help you choose and apply the right license for your project.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    785: What’s Next for NextJS with Tim Neutkens

    785: What’s Next for NextJS with Tim Neutkens

    Scott and Wes dive into the world of Next.js with special guest Tim Neutkens from Vercel. They explore the latest updates, including the React Compiler and React Server Components, discussing their impact on developer workflows and the future of Next.js development.

    Show Notes

    • 00:00 Welcome to Syntax!
    • 00:30 What does the React Compiler do?
    • 05:04 Will React Compiler help with managing Context?
    • 06:39 What happens if you’re not using a React Compiler?
    • 09:30 Will this work on any NextJS version?
    • 12:18 What are React Server Components?
    • 16:28 Shipping all the data inside an encapsulated component.
    • 20:17 Clearing up the frustrations around retrofitting server components.
    • 23:13 Handing migration.
    • 28:30 Is this just a fetch request with props?
    • 36:41 How closely are the NextJS and React teams working?
    • 41:53 Will we ever get Async Client Components?
    • 43:52 Async Local Storage API.
    • 45:31 Turbopack.
    • 57:51 Sick Picks & Shameless Plugs.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    784: Logging × Blogging × Testing × Freelancing

    784: Logging × Blogging × Testing × Freelancing

    In this Potluck episode, Scott and Wes tackle listener questions on modern blogging, website environmental impact, and using LangChain with LLMs. They also cover CSS hyphens, unit vs. integration testing, and balancing web development with new parenthood.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    783: How We Built a Netflix Style “Save for Offline” Feature Into Syntax

    783: How We Built a Netflix Style “Save for Offline” Feature Into Syntax

    Scott and Wes dive into the world of browser caching for audio files, exploring the File System API and the Cache API. They discuss size restrictions across different browsers, how tools like Riverside.fm leverage IndexedDB, and walk through code examples for creating, retrieving, and managing cached audio data.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    782: The Developer’s Guide To Fonts with Stephen Nixon

    782: The Developer’s Guide To Fonts with Stephen Nixon

    Scott and CJ are joined by Stephen Nixon of ArrowType to delve into the world of fonts and type for developers. They explore the intricacies of font creation, the utility of variable fonts, and offer tips for making visually appealing typography on the web.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    781: Potluck - The Value of TypeScript × Vue vs Svelte × Leetcode

    781: Potluck - The Value of TypeScript × Vue vs Svelte × Leetcode

    In this potluck episode of Syntax, Scott and CJ serve up a variety of community questions, from the nuances of beginner vs. advanced TypeScript to the pros and cons of SvelteKit. They also discuss falling out of love with React, shipping private packages via NPM, and the eternal struggle of always starting but never finishing projects.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    780: Cloud Storage: Bandwidth, Storage and BIG ZIPS

    780: Cloud Storage: Bandwidth, Storage and BIG ZIPS

    Today, Scott and Wes dive into cloud storage solutions—why you might need them, how they use them, and what you need to know about the big players, fees, and more.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    Related Episodes

    Own Your Financial Future: A Guide for Women

    Own Your Financial Future: A Guide for Women

    Picture this-- you are living the lifestyle that you desire, you have business systems in place that keep your business running profitably smooth, you have the ability to take a vacation whenever you want, and you’re happy.

     

    Isn’t that the dream? Well, for some badass women entrepreneurs, that kind of scenario is their reality. What most people don’t realize is that a secure financial future is just at an arm’s reach. All we need is knowing what the exact next steps to take and having the guts to actually do them. Spoiler alert: it requires a lot of hard work and stepping out of your comfort zone.

     

    Get behind the scenes of how being part of Achievers Club, Daily Success Routine’s mastermind, can impact how you successfully run your business, have the time freedom that you’ve been craving, and enjoy life at the same time. This special Daily Success Show episode is for every dreamer who wants to stop just dreaming and start actualizing their goals.

     

    If you’d like to work directly with me and my team to setup the systems to scale to your first or next $100k, let’s chat.  Tell me a little about your business and what you’d like to work on together. Book a call with our team to learn more.


    The Daily Success Show is available on iTunes, Google Podcasts, Soundcloud, Stitcher, Spotify, Player FM, iHeartRadio and Listennotes.

    E046 - Jerry Sergeant: How To Let Go and Step Into Your Power

    E046 - Jerry Sergeant: How To Let Go and Step Into Your Power

    He made a successful business, made millions, but still was never happy. As a founder of Star Magic Healing and Maximum Life Group and a very powerful individual, he is today one of the most sought after life enhancement coaches and modern day healers in the world. He has a vision, strives towards continual improvement and conquers huge goals with his knowledge, experience and kindness. His ability is to rapidly transform your health, finances and relationships by using what he refers to as “Star Magic Codes of Consciousness”

    Each peak mindset episode will be dedicated to providing you with an inspiring message from world class athletes & entrepreneurs in fitness, business, sports & life, to find out how these amazing people think, what drives them, their habits and routines and what their biggest challenges were and how they overcame them. Mathew will also be sharing solo power messages directed towards empowering, motivating and inspiring you on your next level of being epic!  Get ready for massive motivation, rocking inspiration and valuable lessons from some of the biggest names today in how to step your life to the next level, bust through any obstacle and rock your dreams!

     

     

    Spooky Web Dev Stories — Part 2

    Spooky Web Dev Stories — Part 2

    In this episode of Syntax, Scott and Wes are back for another episode of spooky web dev stories — listener-submitted stories about web dev gone wrong.

    LogRocket - Sponsor

    LogRocket lets you replay what users do on your site, helping you reproduce bugs and fix issues faster. It’s an exception tracker, a session re-player and a performance monitor. Get 14 days free at logrocket.com/syntax.

    Netlify - Sponsor

    Netlify is the best way to deploy and host a front-end website. All the features developers need right out of the box: Global CDN, Continuous Deployment, one click HTTPS and more. Hit up netlify.com/syntax for more info.

    Show Notes

    03:28 - Jack Rhysider Story

    06:28 - Dirty Dicks JSON

    08:23 - CMS Disaster

    10:58 - Oh No Hotel

    11:19 - FTP

    12:19 - Push Notification Hell

    13:16 - DVD Nightmare

    15:15 - Bad Words Again

    16:23 - Mo Money

    17:01 - Bass Ackwards

    18:17 - Taxi Coding

    19:36 - Bad Env

    21:30 - Login As

    21:50 - Email Subscribers Plugin

    22:33 - 1 in 300 Chance of the C-Word

    24:24 - Production Target

    26:12 - A Happy SEO Ending

    28:26 - Just Oof

    29:48 - I’ve Fallen and I Can’t Get Up

    30:54 - Crypto

    32:34 - rm -rf

    33:42 - Never Deploy on Fridays

    35:31 - Million Dollar Scramble

    36:22 - Deleting Production

    37:11 - 500,000 Concurrent Problems

    39:14 - Deleting a Government Website

    40:36 - You Ruined the Surprise!

    45:23 - Mr. D Hole

    46:48 - One Expensive Race Condition

    48:43 - Yikes

    51:11 - Always Be Closing

    51:44 - Adidas - All Day I Delete A Site

    Links

    ××× SIIIIICK ××× PIIIICKS ×××

    Shameless Plugs

    • Scott: Level Up Pro - Sign up for the year and save 25%!
    • Wes: All Courses - Use the coupon code ‘Syntax’ for $10 off!

    Tweet us your tasty treats!

    Horror Web Dev Stories - 2021

    Horror Web Dev Stories - 2021

    For episode 400, Scott and Wes talk about web dev horror stories - 2021 edition!

    LogRocket - Sponsor

    LogRocket lets you replay what users do on your site, helping you reproduce bugs and fix issues faster. It’s an exception tracker, a session re-player and a performance monitor. Get 14 days free at logrocket.com/syntax.

    Mux - Sponsor

    Mux Video is an API-first platform that makes it easy for any developer to build beautiful video. Powered by data and designed by video experts, your video will work perfectly on every device, every time. Mux Video handles storage, encoding, and delivery so you can focus on building your product. Live streaming is just as easy and Mux will scale with you as you grow, whether you’re serving a few dozen streams or a few million. Visit mux.com/syntax.

    Linode - Sponsor

    Whether you’re working on a personal project or managing enterprise infrastructure, you deserve simple, affordable, and accessible cloud computing solutions that allow you to take your project to the next level. Simplify your cloud infrastructure with Linode’s Linux virtual machines and develop, deploy, and scale your modern applications faster and easier. Get started on Linode today with a $100 in free credit for listeners of Syntax. You can find all the details at linode.com/syntax. Linode has 11 global data centers and provides 24/7/365 human support with no tiers or hand-offs regardless of your plan size. In addition to shared and dedicated compute instances, you can use your $100 in credit on S3-compatible object storage, Managed Kubernetes, and more. Visit linode.com/syntax and click on the “Create Free Account” button to get started.

    Show Notes

    02:54 - Hi guys, love the show. I wanted to share with you something that happened just the other day (Oct 4th), I was starting my new job today at a large tech company. They use React for everything (even DNS!, don’t ask me how, it’s complicated). I figured I’d celebrate my first day and push some code to prod, (how hard could useEffect be right?) Next thing you know, they ended up bringing in a guy with an angle grinder to get access to the server cage.

    04:15 - No one from Denver can buy

    06:38 - Bug accidentally gives $90 million to users

    08:34 - Share Pointy Knives

    • Hi! I’m a developer at a consulting firm in Sweden, writing C# on the backend and using React with either JavaScript or TypeScript and hosting things in Azure 99% of the time (and 1% in SharePoint). I was in my last week at my last job before I was due to start my new job. Worked 12 h/day to keep up with all the handovers etc. to colleagues so they would have a chance to continue working on the solutions I have taken care of. One project was a process tool hosted in SharePoint Online. The guy who would oversee it had -1% experience with SharePoint (which I pointed out to my bosses). But to make things a bit easier, I wrote a deploy script to ease things a bit. Starts the terminal and runs the script towards the acceptance environment. Umpteen million errors appear… Which is strange, because there would only be about 20 commands (which can cause errors like these). I log into the environment to double check if I now accidentally entered the wrong values in the script (which looked okay according to me). But I get a 404 error when I try to reach the environment… I log into the admin interface; I discover that the site is gone… Also checking the trash can, there are no things there. Very strange. I find that I’m in a different folder than the one where I saved my script… In that folder there is an old deploy script that was used when the project was started a thousand years ago (which was not used after the project was “finished”). The first thing the script does is force delete the site and then try to create a new empty site… The site is gone with lists and everything (lists are a SharePoint thing, think of it as sql-lite), there are no backups of the acceptance environment (although it is very important). I just feel a little panicked about how I’m going to solve this. However, I remember testing a tool six months ago to copy entire environments. Where the first attempt was made on the acceptance environment. Finds the cloned environment and can use the same tool to clone it back. It took only 8-12 hours of work to create all the new things done in the environment in the last 6 months instead of X number of hours to build everything from scratch.
    • Once I updated a feature that saves accessories on orders (same solution). However, I failed to add all the new fields to the production environment. Which meant that accessories were not saved at all… Which was discovered after a week… I fixed the error in 5 minutes and the sellers had to contact x number of customers to double check what kind of accessories they would have for their orders…

    11:22 - External HD

    • One time I needed to format a server. It was an outdated Windows server. I selected all the files and copied and pasted to an external hard drive. My drive was pretty fast and it took like a minute. I was like: “Wow! That’s a great external hd”. Formatted the server and, as soon as I realized it didn’t copy 10% of the files, I had that face. We all know that face. Anyways. Tried to restore the files using some HD recovery tools but they were all corrupted, not by the formatting itself but for the installation of the new OS. My boss was pissed! I was very young so I blame it on the server. I’m not proud of it. But why the heck they would ask a developer to format a server in the first place? By the way, my birthday is on Halloween. Spoooky.

    13:07 - Hey Loser

    • I was testing new code to automate mass-mailings to our customers. Who knows what demon drove me but I wrote the “test” mailings like ransom notes: “Dear loser! Fork over all your $$$ or else!” Well, all was looking great and I wa s feeling pretty pleased with myself. Progress bars were sliding and counters were spinning. But I could hear a rising commotion from the marketing guys behind me. Phones ringing, voices raised. Turns out I had moronically wired myself to the production database! Even worse for me, I’d only been at the company a month or two. I thought my goose was cooked and the Big Boss was plenty mad, but I owned up right away and apologized. We put out a cover story that we’d been hacked and all was forgiven.

    15:01 - HE HATE ME

    • I was part of the developer team that accidentally leaked the 8 cities the XFL, an alternate football league, a week before their press conference. ewrestling.com/article/wwe-ac… We were using Contentful and Gatsby. A junior dev entered the information into the prod space instead of the UAT space and when we released some bug fixes, it picked up the contact us content update. I found out after seeing stories pop up in Google News when I was about to go to sleep. Was taking the content down when we started getting calls from the CIO of the WWE. The league went bust because of COVID.

    19:23 - I Don’t Have Memory of This

    • I had two pretty bad code changes that only showed their problems when they went live in production. Around 6 years ago, I was running into a large performance issue with some of our queries running slowly against this giant DB. We were using JPA/Hibernate and we had a bunch of joins that were done lazily. I switched a few of them to eager so that they would create a single SQL statement instead of a bunch (or thousands). The change worked fine on my dev environment, QA, and staging. Staging was supposed to be representative of production. So we went live and within minutes the entire system went down because of out of memory errors. We quickly switched back to the lazy joins. We found out that staging had more memory and fewer DB records than production though they were supposed to be exactly the same.

    21:05 - Your Performance is Slowing us down

    • Back when VMWare was becoming a thing, like 2010 or so. I was working at an ecomm site and we were seeing slow performance between the app server and some data services. I decided to build a little multithreaded logger that could track when a query to Oracle Financials was running too slow and generate a warning. Oracle Financials was doing the credit card transactions, orders, and all the rest of the sites DB work. The code had no impact on my dev, QA, and staging environments. We were hitting well over our minimum number of concurrent users. We deployed it to production and then the system got slower and slower, but never crashed. Again, production and staging were set up differently. Staging was a bare-metal server. Production was running on an ESXi server on a host that was split 4 ways. The multi-threaded code meant to detect performance degradations was slowing the whole system down when it tried to synchronize data across threads. I was pretty embarrassed by both these two issues. It went to show that production is its own special thing and that you really don’t know if your server-side code is really going to work until it starts running there.

    23:15 - Dead Button

    • Way back when mainframes were king, a guy I worked with pushed a button in, that if released, would immediately take down the entire company. He stood there for 4 hours, holding the button in, until we could let it crash after business hours. We gave him a chair after 2 hours.

    25:12 - No Deploys on Fridays

    • I was a junior dev working on our company’s website. They were HTML + nunjucks templates that were later being integrated with the backend using some Python witchcraft. There was also a metric ton of JS libraries added (like Babra for page transitions, threejs for a cool interactive animation on the landing page etc.). Didn’t really get much of all this package.json stuff at that seniority level. So after running yarn or npm or whatever, and seeing some warnings about a couple packages being outdated, I decided to update some of them. It ran great locally, but I didn’t build the prod version, as I didn’t know there could be any differences. I was working on some minor feature (or maybe even some minor bug) and the PM decided there’s no time for code review. So I pushed it to the repo, the backend guy did his integration, and launched it on prod. As it turned out, there were some breaking changes in one of the libraries I decided to update. It crashed the entire site. On Friday. At 4:30PM. And that, kids, is why you don’t deploy on Fridays.

    27:33 - Stupid Selfie

    • Horror story for you Wes. I work for one of the biggest retailers in the UK and we were working on an app that would go on a ‘media wall’ in their flagship store in London. Basically a giant 200-inch screen in the middle of the store that social content can go on. Turns out that I left my local Dev version connected to the production API when I uploaded a couple of stupid selfies of my big head in the office. Get a call the next day to ask why my face is on the medial wall.

    28:37 - Soda

    • I was a computer operator back in the late 1960’s, operating a Honeywell mainframe. The consoles were huge, about the size of a dishwashing machine, with the console typewriter and printer inset in the middle, on top. I had a soft drink on the console, next to the typewriter mechanism. We were told never to bring a drink into the room but we all did it, especially on third shift. Long story short, someone called my name, I turned around and knocked the glass of soda into the console. Had to be completely replaced – machine was down for two days. My boss was not happy.

    31:22 - Oof

    • A bigger horror story. I had my own software company in the 90’s and was in Singapore, customizing my software package for Johnson & Higgins Insurance Brokers – I had their Asian contract for my Insurance Broker/Accounting package. I spent a good 40 hours on Saturday and Sunday, making all the changes they asked for, getting ready for a demo on Monday morning. I finished up about 4am on Monday morning and was cleaning up my files. All this work was done on a Novell server. Print files had an extension of .prt and I had a ton of them in the main directory from all of the testing I had done. I was cleaning out old files, getting ready to back everything up and I thought I would delete all of the print files. I mistakenly keyed in erase *.prg, instead of erase *.prt (or whatever the delete command was – can’t remember it now). Programming files have a .prg extension – I had deleted all of my updated files from the weekend. In desperation I called Novell in Utah, hoping they could help me recover the files, but no-go. The demo Monday morning was not fun.

    33:24 - Young Dev

    • I was a young dev right out of college. My first job was at a child support company where we had desktop apps that would handle case information more efficiently than using Excel. My first project was to write a POC that would later be implemented into a new, bigger app that consolidated all the “POCs” for various parts of the child support process. For some odd reason, I still don’t know why to this day, my boss wanted me to write this “new” app on top of an old app with a bunch of legacy code. I never understood why but as a young dev fresh out of school, you tend to just do what you’re told. In school, I mainly used PHP/HTML/CSS for learning how to work with a database; this job however used C#/.NET for their desktop apps so I was doing a lot of learning as I went. I remember finally learning how to connect to the database and run some SQL after fighting with this old pile of legacy code. In early versions, I chose to handle creates/updates for these records in the same function. My young, dumb self wrote a try catch statement that would attempt to create the record and if it failed, it would try to update the record. Before the first production release, I updated the flow to handle creates/updates in separate functions - but never removed the update in the catch block of the original function now used for creates only. Somehow I, or any PM/QA, never failed on a create and hit this catch block while testing. Fast-forward probably 9-12 months later, I got a ticket to investigate why every case’s data looked the same in Production. I login to the app, search a few case numbers and sure enough, every case’s data is the same. I began freaking out as I had no clue how this could’ve happened. I mean it had never happened in all the dev work, testing, and months of live Production use. After I investigated with a senior dev, we realized the try block had failed and the update query in the catch block ran for that record - we also realized that I left off the where clause in the related SQL query to specify which record needs updating - so ALL records got updated with this data. Thankfully, we kept regular back-ups and were able to restore the data to a recent timeframe without users losing a ton of work. We commented out that database update call and redeployed the code ASAP. Also the senior dev was cool about it and was like “hey, it happens to all of us at some point”. Let’s just say I’ve learned a ton since then and definitely steer clear from writing code like that. You live and you learn I suppose.

    38:40 - Where Wolf

    • Here’s my development tale of terror: One night I was burning the midnight oil trying to get caught up on a never-ending workload. At the time I was working for an online travel booking site. It was after 11, and the last thing I had to do for the night was to rename one of the hotels in our production database. So I wrote my query: UPDATE hotels SET name=‘Some Hotel Chain’; One problem, I FORGOT THE WHERE CLAUSE. Suddenly, over 5,000 hotels in our production database all had the same name. This was around 2003, so well before the time of point-in-time restores, and we were only backing up the database every week at that point. I was panicking. Fortunately, I had a dump of the production database that I had created only a couple of hours earlier sitting on my local hard drive. So thankfully, I was able to restore almost all of the hotel names, save for a couple that signed up after that data dump, and my boss was none the wiser. That’s when I learned that working late hours is not worth it, because at some point you are so tired that you can no longer make good decisions.

    41:19 - I Want Your Job

    • When I first started out I worked for a consultancy and they trained us in sales meetings to help managers get promoted because we were coming in to make them “look good”. This was okay b/c obviously, we were coming in as a contractor; however, after being laid off due to 9/11 (yes, this was about 20 years ago), I was looking for a new job and during an interview when asked where I’d like to be in X years, I mentioned to the hiring manager that I wanted to eventually do what he was doing. Well, I guess he didn’t take it that I wanted to make him get promoted to then take his spot. Safe to say I didn’t get hired. 🤦‍♂️😜

    ××× SIIIIICK ××× PIIIICKS ×××

    Shameless Plugs

    Tweet us your tasty treats!