Latest
Is graybox testing a myth?
The web is awash with advice advocating "gray box testing" as a solution to problems that testers face. However, when it comes to actually implementing one you are more likely to end up with a monstrosity. Charles Lowell explains why this happens and what you can do about it.
→ Read Article
Charles Lowell
February 4, 2025
All Posts
 - A look back at 2024 & a bold step into 2025!- 2024 was a year of breakthroughs, impact, and bold strides at Frontside. From structured concurrency with Effection v4 Alpha to revolutionizing testing with Interactors and Data-Driven Test Framework, to improving our Simulation Platform creating the Foundation Simulator. As we step into 2025, we're doubling down on empowering engineering teams and organizations to take bold steps and build with confidence. Here’s a look back at what we accomplished—and a glimpse into what’s next → Read Article - Elrick Ryan - January 1, 2025 
 - Announcing Effection 3.0 -- Structured Concurrency and Effects for JavaScript- A major milestone in bringing Structured Concurrency and Effects to JavaScript, Effection 3.0 has excellent TypeScript support, a powerful new context API, and harmonizes perfectly with the JavaScript APIs you know and love. → Read Article - Charles Lowell - December 18, 2023 
 - The await event horizon in JavaScript- Why async functions in JavaScript are insufficient as a Structured Concurrency primitive → Read Article - Charles Lowell - December 11, 2023 
 - Backstage: Unblock Innersource Development with Plugins and Code Owners.- Navigating the challenges of inner-source Backstage portals? Discover how successful adopters harness code owners to streamline contributions and maintain code quality. → Read Article - Taras Mankovski - October 24, 2023 
 - Backstage: How to fix linting errors without slowing down development- In this guide Min will show you a unique approach to tackling a mountain of linting errors without disrupting delivery → Read Article - Min Kim - October 16, 2023 
 - Deno is the best tool for maintaining NPM packages- Even if you primarily run your JavaScript in Node, Deno is a fantastic tool for building and distributing packages on NPM (and everywhere else). This article shows how to publish modules to both https://deno.land/x and https://npmjs.org using nothing more than the deno CLI. → Read Article - Charles Lowell - April 27, 2023 
 - Seven ways to build a single glass pane with Backstage- Learn strategies for integrating external services into Backstage that improve discoverability and lower congantive load for your users → Read Article - Taras Mankovski - January 22, 2023 
 - Dynamic Github Action Jobs- Ever wanted to run parallel jobs in Github Actions with a high level of flexibility? We have, and now you can too! → Read Article - Jacob Bolda - December 12, 2022 
 - Ingestion tests in Backstage Part 2: Safely refactoring an LDAP integration- To test whether the Backstage is setting up the Catalog properly, you must start a Backstage server, wait for a while, and assert. This feat is easier said than done. Here is part 2 in which Charles will guide you through it in this article. → Read Article - Charles Lowell - December 5, 2022 
 - Deno is "blazing fast" for humans- Every systems claims to be "blazing fast", but does that actually mean faster development? → Read Article - Charles Lowell - December 1, 2022 
 - What Is Spotify Backstage: a developer portal overview- What can Backstage do for your team? In this post, we are going to discuss how backstage can improve your organization. → Read Article- Javier Lainfiesta - May 16, 2022 
 - Tutorial: Using Github Webhooks with Backstage Entity Provider- In this short tutorial, Min will show you how to configure Github Webhooks for Backstage's Github Entity Provider → Read Article - Min Kim - May 3, 2022 
 - Testing Backstage Catalog's ingestion- To test whether the Backstage is setting up the Catalog properly, you must start a Backstage server, wait for a while, and assert. This feat is easier said than done, but Charles will guide you through it in this article. → Read Article - Charles Lowell - March 24, 2022 
 - Backstage tutorial: plugin integration tests with Cypress + Interactors- In this tutorial, you'll learn how to set up integration tests for your Backstage plugins using Material UI Interactors → Read Article - Jorge Lainfiesta - March 3, 2022 
 - Announcing GraphGen: the search for the graph factory- Creating fake datasets that resemble real ones is nearly impossible today. That's why Frontside is working on a tool that can generate graphs with coherent data and relationships → Read Article - Charles Lowell - February 21, 2022 
 - Tutorial: How to use your company’s component library with Backstage- In this tutorial, Taras will show you how to replace Material UI for your component library in Backstage without losing access to its API. → Read Article - Taras Mankovski - February 14, 2022 
 - When to use SemVer or CalVer: project type considerations- Choosing a versioning scheme helps you manage the understanding and expectations of your project over time. In this article, you'll learn about how to decide on whether to use SemVer or CalVer according to your project type. → Read Article - Jacob Bolda - February 9, 2022 
 - What is DX anyway: a chronological overview- You can only optimize for concrete indicators, that’s why having a clear understanding of DX is important to improve it. In this article, we review the main trends of the past decade. → Read Article - Jorge Lainfiesta - January 26, 2022 
 - Tutorial: Easier onboarding with Backstage and VSCode dev containers- In this tutorial, you'll learn how to set up dev containers to make it easier to onboard developers. → Read Article - Min Kim - January 24, 2022 
 - Simplified local development and testing with Auth0 simulation- Auth0 can be difficult to manage in local development and within testing environments such as CI/CD pipelines. An Auth0 simulator can save you from branching your code or maintaining mocks in your tests. → Read Article - Paul Cowan - January 13, 2022 
 - Effection: for when async/await is not enough- Everyone who has built a complex system in JavaScript has hit a critical moment when concurrent processes become unmanageable. But with Effection—an OSS async/await alternative—you'll spare memory leaks and headaches. → Read Article- Jonas Niklas - October 26, 2021 
 - Interactors: the design systems testing ally- Components from a design system make building UIs easy. It should be just as easy to test them. Interactors enable more robust tests for component-based UIs, and improve component libraries' maintainability. → Read Article - Charles Lowell, Jeffrey Cherewaty - August 4, 2021 
 - Relieve developers’ churn in your Cloud native strategy with Backstage- Adopting Cloud native strategies has proven to improve organizations' delivery performance, but the complexity brought in with them is making life harder for developers. Using the example of a unified Secret manager, I present how Backstage can improve DX in the Cloud native world. → Read Article - Taras Mankovski - May 14, 2021 
 - Unleashing the Genie: Helping both designers and developers with Storybook- Good documentation is key to design systems. However, what "good" means varies according to the reader. This article will go through tips to generate documentations for designers and developers from a single Storybook—keep everyone happy with minimum effort! → Read Article- Varya Stepanova - April 7, 2021 
 - There and Back Again: Testing and Stack Upgrades- Upgrading your application stack to new major versions can be terrifying, especially when you have a massive application with 75 developers working on features non-stop. However, a good testing strategy gives you confidence to make bold moves that take your organization to heretofore unexplored lands. → Read Article - Taras Mankovski - February 18, 2021 
 - Kubernetes: Dip your toes in this- Kubernetes is on the rise and having it in your toolkit can get you a long way. In this article, Min shows us how to set up a MicoK8s in your local machine. → Read Article - Min Kim - January 29, 2021 
 - The context dilemma: design tokens and components- Design tokens are used to keep a consistent look across an entire system. How do you name them semantically if they have to make sense everywhere but also respond to the inner logic of individual components which are independently developed? → Read Article- Varya Stepanova - January 15, 2021 
 - Renaming `main` with purpose- As generic default branch names like `master` for Git repos have gone out of fashion, possibilities emerge for more effective and informative naming conventions. Learn about the branch naming strategy Frontside uses for our Open Source libraries and how we name app project branches. → Read Article - Jorge Lainfiesta - December 11, 2020 
 - MirageJS: Choosing the right Serializer- MirageJS ships with four out-of-the-box serializers. In this blog post, we overview the basics of serializers in Mirage, and examine in detail the specific format of each JSON API, Active Model, Rest and generic serializers. → Read Article - Min Kim - August 31, 2020 
 - Beyond Mocking: Decoupling teams through Simulation- Decoupling front-end and mobile teams from the back-end makes organizations more effective. In this article we explain why using simulation is an ideal strategy for this purpose, and present important considerations for adopting such practices. → Read Article - Charles Lowell, Jorge Lainfiesta - July 29, 2020 
 - The Lesson of BigTest Interactors: never write a flaky test again!- To prevent flaky tests, BigTest introduces the Interactor API, designed around the lessons learned in Capybara. This article introduces the benefits of Interactors in BigTest and how to use them to write reliable tests. → Read Article- Jonas Niklas - July 16, 2020 
 - Github Actions: a deep dive into pull_request- We have put together specific behaviors and information that you’ll need to use pull_request as a trigger for your Github Actions workflow. → Read Article - Min Kim - May 26, 2020 
 - The Triple Threat to Testing — Part 2: Reliability- Flakiness: one of the biggest pain-points of any test suite. From app complexity to incident management, we explore some of the most common causes of unreliable tests. → Read Article- Robbie Pitts, Taras Mankovski, Jeffrey Cherewaty, Charles Lowell, Jorge Lainfiesta - April 30, 2020 
 - 7 reasons to write good Pull Request descriptions- A good Pull Request description can lead to better reviews, improved solutions, better documentation, and more. In this article, Taras surveys seven big wins of PR descriptions. → Read Article - Taras Mankovski - April 15, 2020 
 - The Triple Threat to Testing — Part 1: Speed- Speed, reliability, and relevance constitute the mains pillars of a robust testing strategy. The faster a test suite can diagnose an issue in its application, the more value it renders. In this article, we navigate through the most significant causes of slow tests and suggest ideas to deal with them. → Read Article - Charles Lowell, Robbie Pitts, Taras Mankovski, Jeffrey Cherewaty, Jorge Lainfiesta - April 6, 2020 
 - Case study — Facilitating the next generation of Bluetooth-connected apps- More and more teams are using Bluetooth for innovative products, but developing UIs for connected devices can be challenging: limited physical devices slow down development and make it nearly impossible to keep up a strong test suite. Our solution is simulation and Open Source power. → Read Article - Taras Mankovski - December 11, 2019 
 - Build a Family Tree maker using React Hooks and Microstates- If you use React, you probably know about the React Hooks RFC that was introduced at ReactConf. It’s an exciting proposal because it promises to bring the power of class components to function components. It also a convention for creating React extensions that feel like first-class APIs in the React ecosystem. React Hooks API and Microstates bring expressiveness of React function components to a whole new level. → Read Article - Taras Mankovski - November 6, 2018 
 - Four reasons to use append() instead of Object.assign() and Object spread- Object.assign is just a special case of a universal concept in functional programming. By opting to use a universal function to back this universal concept, you can inherit all kinds of awesome for free. → Read Article - Charles Lowell - September 18, 2018 
 - Kubernetes for the Kubernewbie - The Journey- Learning Kubernetes, especially with no background in Ops, is challenging but full of reward. This will take you along the journey of our k8s enlightenment and deployment → Read Article - Elrick Ryan - August 9, 2018 
 - JSConf 2018 Recap- JSConfUS is back after a three-year hiatus and Robert had the chance to attend. He covers his favorite talks he saw while there! → Read Article- Robert DeLuca - August 5, 2018 
 - WCAG 2.1: What does it actually mean?- WCAG 2.1 has officially been put in place as a standard but what does that mean? What was added? How does this impact my site or app? In this post we break down everything new in WCAG 2.1 and put in simple terms so you can walk away armed with the knowledge of making your site more accessibile. → Read Article- Robert DeLuca - July 14, 2018 
 - Functional Rephrasing Using an Async Function Functor- Once you know that they're there, Functors pop up in all kinds of surprising places. Here we take a simple exploration of how the JavaScript async function construct is actually a Functor and how we can use that for great good. → Read Article - Charles Lowell - July 3, 2018 
 - Big Testing in React- When we write and develop our applications, it's with the intent that somebody will use it. We write tests so we can be assured that everything in our app works as expected and is bug free. But how confident are you in your tests? → Read Article- Wil Wilsman - June 13, 2018 
 - Connecting a Slack Channel to Gitter- Slack communities for open source projects have become very popular over the past couple years. Slack has taken hold because it makes collaborative chat really easy and accessible for the masses. Something IRC wasn’t able to achieve. → Read Article- Robert DeLuca - April 30, 2018 
 - Math is Just Another Framework- Functional programming with typeclasses rooted in category theory may seem like some esoteric practice reserved for the truly pointy-haired. But guess what? You do it every day. → Read Article - Charles Lowell - February 19, 2018 
 - Quickly Build Component Libraries with Storybook- Design systems have become an effective way to maintain consistency and improve feature delivery time. What can developers on smaller teams do to apply design system concepts? → Read Article - Jeffrey Cherewaty - December 29, 2017 
 - How Healthy Is Your Build?- Staying healthy is a lot of work. Maybe you hit the treadmill before going into the office, and then on the way home you pick up some organic groceries. But be honest, you probably don't. Thankfully, maintaining your web application's build health is much easier, and the rewards can be huge! Take a few minutes to check your build health today: you might regret it if you don't. → Read Article- Joe LaSala, Ginger Whalen, Elrick Ryan - August 4, 2017 
 - Building a Continuous Integration & Deployment Solution for the IoT.- Smart homes, smart devices, smart vehicles. The Internet of Things is here! You want to be able to build software for IoT and deploy, maintain, and update it on your devices that may be located anywhere and within anything. This is the first part of our IoT setup connecting users to the Internet of Things. → Read Article - Elrick Ryan - June 21, 2017 
 - One Helpful Way to Think About JavaScript Decorators- JavaScript decorators are coming, but what are the class of problems which they're useful for? In this brief tour of decorators, we'll try to answer that question by contrasting them with comparable technology from other languages. → Read Article - Charles Lowell - June 1, 2017 
 - React Native and Chill: A tale of stupid made fast→ Read Article - Charles Lowell - January 16, 2017 
 - Building infinite scroll in React Native- Tackling infinite scroll can be hard on any platform. But thankfully React Native allows you to use base JavaScript libraries to solve problems in native apps. We're going to take Impagination.js and build an infinite scrolling list that is silky smooth and painless data management. → Read Article- Robert DeLuca - December 15, 2016 
 - The Ruby DCamp Experience→ Read Article- Stephanie Riera - October 27, 2016 
 - The Conjoined Triangles of Senior-Level Development→ Read Article- Brandon Hays - July 7, 2016 
 - Accessibility & Why it Matters→ Read Article- Stephanie Riera - May 19, 2016 
- So You Just Finished a Bootcamp, Now What?→ Read Article- Stephanie Riera - May 17, 2016 
 - Global Accessibility Awareness Day→ Read Article- Robert DeLuca - May 17, 2016 
 - The Insider Track- A guide to using kindness to elevate your conference experience. → Read Article- Lydia Guarino - March 18, 2016 
 - Functional Templating in Ember- See how easy it is to build a fully formed image upload widget complete with preview and progress bars when you apply functional programming techniques to your handlebars templates → Read Article - Charles Lowell - January 22, 2016 
- X-Select Status Update→ Read Article- Robert DeLuca - August 14, 2015 
 - Reactive Modeling with Ember→ Read Article - Charles Lowell - September 21, 2014 
 - Programming in the Wild West→ Read Article- Brandon Hays - May 16, 2014 
 - Ember and the future of the web→ Read Article- Brandon Hays - February 24, 2014 
 - Ember on Rails: #REALTALK→ Read Article- Brandon Hays - September 21, 2013 
- The Ruby Racer Rides Again→ Read Article - Charles Lowell - December 4, 2012 
 - Implementing a Jenkins Extension Point with the Native Java API inside a Ruby Plugin→ Read Article - Charles Lowell - January 16, 2012 
- Ruby for Jenkins Goes Pre-Alpha→ Read Article - Charles Lowell - September 13, 2011 
- The Ruby Racer isn't threadsafe... yet.→ Read Article - Charles Lowell - June 13, 2011 
- What it takes to bring Ruby to Jenkins→ Read Article - Charles Lowell - May 12, 2011 
- Wrapping each Hudson distribution in its own RubyGem→ Read Article - Charles Lowell - January 6, 2011 
- We must come together to honor the command line→ Read Article - Charles Lowell - November 14, 2010 
- Accessing Javascript Objects from Ruby→ Read Article - Charles Lowell - October 25, 2010 
- RYE: Repeat Yourself Enough→ Read Article - Charles Lowell - June 29, 2009 
- In Search of a Better Autogrowing Textfield→ Read Article - Charles Lowell - December 16, 2008 
- Please Stop Using Global Variables in Ruby→ Read Article - Charles Lowell - June 25, 2008 
- Patiently waiting for JavaFX→ Read Article - Charles Lowell - June 5, 2008 
- mod_rewrite: Remeber that the version counts→ Read Article - Charles Lowell - June 11, 2007 
- Trans-Global Pair Programming→ Read Article - Charles Lowell - June 9, 2007 
- Taming the Rhino→ Read Article - Charles Lowell - August 4, 2006 
- Live Stylesheets→ Read Article - Charles Lowell - July 15, 2006 
- Learning Javascript from the Command Line→ Read Article - Charles Lowell - July 8, 2006