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's profile](/assets/img/authorsAvatars/charles.webp)
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 ArticleElrick 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 ArticleCharles Lowell
December 18, 2023
The await event horizon in JavaScript
Why async functions in JavaScript are insufficient as a Structured Concurrency primitive
→ Read ArticleCharles 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 ArticleTaras 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 ArticleMin 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 ArticleCharles 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 ArticleTaras 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 ArticleJacob 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 ArticleCharles 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 ArticleCharles 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 ArticleJavier 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 ArticleMin 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 ArticleCharles 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 ArticleJorge 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 ArticleCharles 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 ArticleTaras 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 ArticleJacob 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 ArticleJorge 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 ArticleMin 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 ArticlePaul 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 ArticleJonas 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 ArticleCharles 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 ArticleTaras 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 ArticleVarya 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 ArticleTaras 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 ArticleMin 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 ArticleVarya 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 ArticleJorge 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 ArticleMin 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 ArticleCharles 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 ArticleJonas 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 ArticleMin 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 ArticleRobbie 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 ArticleTaras 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 ArticleCharles 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 ArticleTaras 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 ArticleTaras 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 ArticleCharles 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 ArticleElrick 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 ArticleRobert 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 ArticleRobert 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 ArticleCharles 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 ArticleWil 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 ArticleRobert 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 ArticleCharles 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 ArticleJeffrey 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 ArticleJoe 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 ArticleElrick 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 ArticleCharles Lowell
June 1, 2017
React Native and Chill: A tale of stupid made fast
→ Read ArticleCharles 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 ArticleRobert DeLuca
December 15, 2016
The Ruby DCamp Experience
→ Read ArticleStephanie Riera
October 27, 2016
The Conjoined Triangles of Senior-Level Development
→ Read ArticleBrandon Hays
July 7, 2016
Accessibility & Why it Matters
→ Read ArticleStephanie Riera
May 19, 2016
So You Just Finished a Bootcamp, Now What?
→ Read ArticleStephanie Riera
May 17, 2016
Global Accessibility Awareness Day
→ Read ArticleRobert DeLuca
May 17, 2016
The Insider Track
A guide to using kindness to elevate your conference experience.
→ Read ArticleLydia 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 ArticleCharles Lowell
January 22, 2016
X-Select Status Update
→ Read ArticleRobert DeLuca
August 14, 2015
Reactive Modeling with Ember
→ Read ArticleCharles Lowell
September 21, 2014
Programming in the Wild West
→ Read ArticleBrandon Hays
May 16, 2014
Ember and the future of the web
→ Read ArticleBrandon Hays
February 24, 2014
Ember on Rails: #REALTALK
→ Read ArticleBrandon Hays
September 21, 2013
The Ruby Racer Rides Again
→ Read ArticleCharles Lowell
December 4, 2012
Implementing a Jenkins Extension Point with the Native Java API inside a Ruby Plugin
→ Read ArticleCharles Lowell
January 16, 2012
Ruby for Jenkins Goes Pre-Alpha
→ Read ArticleCharles Lowell
September 13, 2011
The Ruby Racer isn't threadsafe... yet.
→ Read ArticleCharles Lowell
June 13, 2011
What it takes to bring Ruby to Jenkins
→ Read ArticleCharles Lowell
May 12, 2011
Wrapping each Hudson distribution in its own RubyGem
→ Read ArticleCharles Lowell
January 6, 2011
We must come together to honor the command line
→ Read ArticleCharles Lowell
November 14, 2010
Accessing Javascript Objects from Ruby
→ Read ArticleCharles Lowell
October 25, 2010
RYE: Repeat Yourself Enough
→ Read ArticleCharles Lowell
June 29, 2009
In Search of a Better Autogrowing Textfield
→ Read ArticleCharles Lowell
December 16, 2008
Please Stop Using Global Variables in Ruby
→ Read ArticleCharles Lowell
June 25, 2008
Patiently waiting for JavaFX
→ Read ArticleCharles Lowell
June 5, 2008
mod_rewrite: Remeber that the version counts
→ Read ArticleCharles Lowell
June 11, 2007
Trans-Global Pair Programming
→ Read ArticleCharles Lowell
June 9, 2007
Taming the Rhino
→ Read ArticleCharles Lowell
August 4, 2006
Live Stylesheets
→ Read ArticleCharles Lowell
July 15, 2006
Learning Javascript from the Command Line
→ Read ArticleCharles Lowell
July 8, 2006