Bitovi's team shares best practices, thoughts, and ideas for building enterprise web applications. UX & JavaScript blog.
Jira’s Advanced Planning tool (the artist formerly known as Advanced Roadmaps) allows users to manage work across multiple projects, products, and teams. However, if you try to use Advanced Planning at scale, it is impossible to set up plans that give each organizational unit what it needs—a plan that shows their work and how it relates to other teams' work.
Artificial Intelligence (AI) is revolutionizing software testing by enhancing efficiency and effectiveness through automation and intelligent insights. However, **AI** as a term has been applied broadly across various technologies in the tech industry, and it can be challenging to discern what each tool truly offers. This article aims to demystify AI-powered test automation tools by providing a thorough evaluation of some of the leading options available today.
AI is the hottest topic in the tech industry, and there's no shortage of tools claiming to leverage AI for test automation. Given this trend, we decided to explore and evaluate several of these AI-powered tools to see if they truly deliver on their promises. Using our evaluation system, we assess each tool's accuracy, ease of use, cost, and integration with our existing systems.
Businesses heavily rely on IT infrastructure for smooth operations and security, but what happens when that infrastructure breaks? Thousands of companies were blindsided by a sudden CrowdStrike outage on Friday, July 19th, leading to a projected cost of $1 Billion. With an estimated 8.5 million devices impacted by the outage, over 5,000 canceled flights, and hundreds of hospital computer systems offline, you’re probably wondering: *What can I do to prevent a CrowdStrike-level business disruption?*
As of 2024, Vitest is all the rage for testing. But can we apply what we learned about mocking modules in Jest to Vitest? Absolutely!
Welcome to part three of our series on using Temporal to improve the reliability of applications built around LLMs like the one that powers ChatGPT. In part one, you learned how to use Temporal to clone a repo and ingest its documentation into an RAG Database for use with your LLM. Part two taught you how to use context injection to give users more accurate answers to prompts made against that documentation. In this post, you’ll use Temporal and another LLM to automatically test the accuracy of your application’s answers to the prompts from part two.
Throughout my DevOps consulting career, I've realized that the true value of our work lies in optimizing processes to free up developer time. A key part of optimizing DevOps processes is understanding the difference between manual (on-demand) and automated (triggered) processes.
In this post, we’ll dive into both manual and automated triggers, exploring their roles and integration in CI/CD pipelines. We’ll also tackle the differences between Continuous Delivery and Continuous Deployment, and why one might be a more realistic goal than the other. By understanding these mechanisms and exploring automation opportunities, you can streamline workflows, reduce errors, and boost productivity in your development process.
When you’re seeking improved manageability for your web application, the idea of breaking down traditional monolithic frontend architectures into smaller, more manageable segments conjures visions of enhanced efficiency and seamless deployment.
Continuous Integration (CI) and Continuous Delivery & Deployment (CD) are pivotal concepts in modern software development, facilitating rapid and reliable delivery. By frequently integrating code into a shared repository, detecting issues early, and automating deployments, CI/CD ensures that software can consistently be released to production with high confidence.
In the fast-paced world of DevOps, it’s challenging to produce and test high-quality software without sacrificing efficiency. But what if we told you there’s a better way?
Welcome to part two of our series about using Temporal to improve the reliability of applications built around Large Language Models (LLM) like the one that powers ChatGPT. Part one explained how to build a Temporal Workflow to process a series of documents and make them accessible to your LLM. This post will show how to develop a Temporal Workflow to find documents relevant to a user’s query and supply them as context to a prompt sent to the LLM using Context Injection. You’ll also learn how Temporal's abstraction will make your application more reliable and make it easier for you to extend it with new features.
Taking advantage of the burgeoning AI trend, many of today's applications are built around AI tools like ChatGPT and other Large Language Models (LLMs). AI-optimized applications often have complex software pipelines for collecting and processing data with the LLM. Temporal provides an abstraction that can significantly simplify data pipelines, making them more reliable and accessible to develop. In this post, you’ll discover why you should use Temporal to build applications around LLMs.
Last week, Bitovi Hatchify officially left the nest! Hatchify is a suite of low-code libraries that provides a powerful scaffold to build CRUD-heavy applications, eliminate boilerplate, and enable your team to focus on domain-specific functionality from day one. Hatchify empowers you to build admin views, dashboards, and B2B apps faster, all while retaining uncompromising flexibility.
We are pleased to announce Hatchify - a tool that helps developers build React, NodeJS, and Sequelize apps swiftly. Hatchify provides the speed of a low-code development while enabling complete customization in the patterns familiar to React and Node developers. ![]()
Implementing Temporal Cloud can present challenges for organizations offering cloud services that may be used by the federal government. One of the largest buyers of cloud technology, the federal government requires cloud services to be certified by the Federal Risk and Authorization Management Program (FedRAMP®). Each Cloud Service Offering (CSO) must have an independent authorization.
In the dynamic realm of technology, innovations evolve from cumbersome initial concepts to streamlined solutions. This journey of continuous enhancement parallels the shift in system administration from manual, labor-intensive setups to the elegant processes of the DevOps era, emphasizing automation and efficient application delivery.
StackStorm is an open source automation platform that allows you to integrate and automate workflows across your infrastructure. Monitoring StackStorm and its dependencies, such as MongoDB, RabbitMQ, and system metrics, is crucial for ensuring its availability, performance, and reliability. In this blog post, we'll explore how to monitor StackStorm using Prometheus and Grafana, along with exporters for various components, such as:
The world of product design is ever-evolving. It’s essential to stay up-to-date on the latest conversations happening in the industry. No matter what phase you are at in your UX and Product journey, the web is full of free resources for UX Design and Product Management.
The accuracy of content out there can be a bit confusing. With so many choices, how do you know which content, authors, and sites are worth discovering? We polled our Product Design Consulting team to curate a list of trusted resources for design news and innovation.
Six months ago, one of our Angular Consulting clients needed help with their web app. The frontend was too complicated to test, and they weren’t sure how to fix it. Bitovi presented three approaches to help simplify the frontend code and make testing it easier.
Are you tired of relying on Directed Acyclic Graphs (DAGs) for your workflow orchestration? Consider transitioning from Apache Airflow to Temporal. With a focus on scalability and fault tolerance, Temporal is the perfect solution for complex workflows. Migrating from Airflow to Temporal can improve error handling and even solve looming tech debt.
You’ve probably heard of ChatGPT, the natural language processing tool that can generate human-like responses and save time when writing code. However, the data used to generate ChatGPT’s responses is gleaned from all over the internet, making it difficult to influence what sources the model will use to produce a response. This can be an issue when using ChatGPT for a specific task, such as in a CLI application built for a specific purpose.
Creating reusable components is often hindered by excess code accounting for each use case the components need to support. For example, a dropdown that supports text, links, buttons, and even complex components, or a text component that supports multiple different types of HTML tags, in addition to reusable components as well. In both cases, a variety of props will exist for each type of component we pass in that may need to be shared between the parent and child.
You've probably heard of a content management system (CMS), even if you’ve never used one. In short, a CMS is a piece of software that allows users to create, manage, and share website content without knowing how to code.
This document outlines the requirements for blog post images following best practices from HubSpot and general content marketing.
Bitovi’s Backend Consulting team has had the pleasure of working with Temporal for several different use cases over the last few years. Temporal has greatly simplified complex distributed systems and helped our team focus more on achieving business goals and to spend less time handling errors, among many other things. Temporal isn’t a silver bullet, but it is helpful in a variety of different situations.
Most applications leverage API requests to fetch data. Considering data fetching is crucial for Angular testing. Consequently, it's common to include HttpClient in your unit tests.
So you think you know Agile? You’re probably doing it wrong. As a full-service React Consulting team, we’ve seen it all—rigid processes, never-ending sprints, and clogged QA pipelines. These “Agile” teams suffer because of a disconnect between what they think Agile is and what Agile should be. In this post, we’ll break down the mistakes we see when teams aren’t using Agile properly and how to solve them to improve software delivery and developer morale.
You’ve probably found your way to this post because you're trying to create mock code for tests that use the Jest framework and are having difficulty getting your mock to work the way you want. This post focuses on why you might choose one Jest method over another to create a mock—and how to use it—so you can work and write tests more quickly.
Authentication is a critical part of any web application. It's important to ensure that user authentication is secure, scalable, and easy to manage.
In this blog post, we'll explore how to set up authentication with Auth0 in a React project. The @auth0/auth0-react SDK was recently updated to version 2.1.0, so that is the version we will be walking through. The process is the same for previous versions, but some of the props in the Auth0Provider have changed.
Many developers (myself included) were excited when Vue.js version 3.3 introduced several functionalities from Vue Macros, the collection of proposed additions to Vue.js that extend its basic functionalities with syntactic sugar.
![]()
Vue.js is a popular JavaScript framework that provides developers with various tools to create dynamic and reactive web applications.
![]()
Greetings, dev community! The highly-anticipated release of the new R2WC (react-to-web-component) API is here! We have been thrilled by the level of adoption version 1.0 has attained within the developer community. From our various online community forums, you have provided great feedback on your pain points and the ways in which we can improve R2WC. And we listened!
![]()
There is a common misconception among frontend developers that you should not unit test the template of a component. This is incorrect. Not only can you test your components' templates, but you should.
![]()
With the upcoming Vue.js version 3.3, the community once again doesn’t disappoint. Vue.js 3.3 includes many useful features that improve productivity and developer velocity.
![]()
The Angular team just released an exciting new major version of Angular that comes with many new features. One of these features has been something that the Angular community has wanted for a long time, and we've inched closer and closer with each major version. I'm talking about the takeUntilDestroyed operator.
![]()
While on the surface creating specific roles, goals, and expectations for a new project sounds simple enough, it can be challenging to implement effectively without a proper plan.
![]()
The other day I was uploading a lot of content, including images, to a 3rd party service. I put together all my objects and mapped through them to fire off requests. Nearly immediately, I blew past the API rate limiter, and my requests started failing. Oops.
![]()
A retrospective refers to the last stage in a development cycle—reflection. Retrospectives present an opportunity to assess the process based on the experience and inform future practices.
![]()
Clearly defining the roles, goals, and expectations for a project is an important step in becoming a trusted workplace leader. A clear vision of the project and the steps you and your team will take to get there are invaluable. But it’s only one side of the proverbial coin.
![]()
Your team has defined roles, attainable and measurable goals, and clear expectations. So why is there still conflict?
![]()
Clashing visions, unclear expectations, and team members who don’t pull their weight—issues arise in every industry and on projects of all scales. But they tend to be especially common in large-scale, highly complex software projects. With so many moving pieces, nuanced tasks, and tight deadlines, it’s tempting to dive into a new project and build the plane as you fly it. However, conflict thrives when teams operate without a strong foundation.
![]()
A skill our Node.js Consulting team practices often is the process of breaking down new product requirements into actionable technical requirements. This is one of the most critical capabilities for a developer to learn in order to help their organization swiftly deliver new features to their users. In this post, we’ll talk through the process we use on our projects.
![]()
Can two Angular components communicate without the @Output event emitter using only the @Input parameter? Yes, they can, and we will go through the perfect use case of this uncommon approach.
![]()
Are you curious about using React Native for your next project? Whether it's an enterprise solution or a To-Do app, React Native might fit you. React Native is your one-stop solution for building applications for iOS and Android platforms using JavaScript while leveraging the benefits of React.
![]()
With the phasing out of the popular datetime library Moment.js, one of our Node.js consulting clients wanted to prioritize finding a replacement. We ultimately chose to migrate to Day.js, a minimalist JavaScript library. Among the alternatives, Day.js offered many advantages, chief among them being that it is lightweight and the most syntactically close to Moment.js.
![]()
As an Angular developer, you understand the importance of building high-performing web apps. Slow loading times, sluggish UI, and poor user experience can all harm your website's reputation and deter users from returning.
![]()
Accessibility was front and center in my previous article, 3 things every product design team needs in 2023. People seem to be passionate about ensuring designs are accessible. There’s a lot of talk of it online, but how many product design teams have a designer on their team with lived disability experiences?
![]()
This is a continuation of a past blog series. Though the instructions are generalized, it does assume you’ve completed preliminary work, such as prepping your application repo to be deployed by the deploy docker to ec2 github action.
![]()
Remix might be the hottest new framework in the React world right now. We’re ramping up on it and expecting to use it for more clients in the future. We like Remix for its speed and simplicity, but if that title drew you in, you probably already know that.
![]()
As experienced product design consultants who onboard everything from multi-year engagements to quick and dirty month-long projects, we know that no two design projects are alike.
![]()
As a Bitovi Node.js consultant on the backend API team, I‘ve had the opportunity to work with various architectures, including Model-View-Controller (MVC) and Aspect-Oriented Programming (AOP).
![]()
Did you know you can use the catchError RxJS operator to catch errors without unsubscribing? It’s true! It all depends on where you plan to use the operator.
![]()
This blog will explore how you can use Github Actions to deploy Stackstorm to AWS in just a few clicks!
![]()
ChatGPT is hot right now, so I thought I should experiment with letting it write a blog post. It did surprisingly well. The following is more than half AI-generated. For the most part, the first paragraph in each section is ChatGPT, and the more in-depth explanation and code examples are from me for added clarity. I also reordered the sections to flow better. Enjoy!
![]()
For the last few years, several members of my team and I have been working with a Fortune 500 global company to help build a Node.js ecommerce platform. We learned many valuable lessons along the way. Lessons we feel are too valuable not to share.
![]()
There are some things you just have to prioritize for product design excellence. Retaining great talent and building incredible products in 2023 requires intentionality. But where should you focus your intention?
![]()
Is your Agile team moving from task to task without much awareness of the bigger picture? You need a Product Requirements Document.
![]()
Looking for a way to increase developer productivity and improve your code review process? Try Review Buddies.
![]()
Lots of things change year over year, especially in backend development. GraphQL, as well as Node.js, are no exception! We’ll cover some background context for the changes leading up to 2023 and then highlight the most relevant changes that happened last year. Without further ado, let’s hop in!
![]()
Are you thinking about designing a backend API? You probably already know about REST architecture. You might even know that the REST architecture doesn’t handle complex applications very well.
![]()
Product design projects involve many moving parts. Between design requirements, roadmaps, research findings, and design documentation, there’s a lot of information floating around.
![]()
Bitovi has created a new GitHub action that makes hosting any Docker-based project in your own AWS account a snap. It’s possible with a combination of Terraform + Ansible wrapped in some scripts with some of our tools.
![]()
Have you ever wanted to create your own AI-powered chatbot for Slack? Wouldn't it be great to be able to prompt AI straight from a Slack message? Well, this blog is here to show you how you can easily do just that in minutes!
![]()
Do you often find yourself shuffling between Jira boards and calendars, hoping this sprint, you’ll get the workload balance right? TPOs and Scrum Masters managing multiple teams know the struggle all too well. It’s difficult to know whether a team is at capacity until they’ve already exceeded it.
![]()
Lately, I’ve seen a lot of conflicting talk in React forums around class components and hooks. For junior and more advanced React devs, I would like to clarify by answering some of the most commonly asked questions around hooks vs. class components.
![]()
Node.js is one of the most popular languages for web servers, even though JavaScript is single-threaded. This might seem contradictory at first—don’t web servers need to handle simultaneous connections?
![]()
Incorporating white space into your UI design gives users a break from visual overload and makes their experience more relaxed and enjoyable. Reducing visual load helps increase task completion rates and keeps your users coming back for more.
![]()
Employee recognition matters. But in a time of tightening tech budgets, it’s tough to find free ways to recognize your team. Most remote team recognition options are either a steep investment or, worse, a complete flop that leaves employees feeling underappreciated.
![]()
At Bitovi, we embrace the concept of a design system. Global patterns and components provide standard look, feel, and reusability across a suite of applications. We have our own, and we often build them for our clients. Ideally, a design system is fully developed and available before building applications that will use it.
![]()
Is your frontend project suffering from too many cooks in the kitchen? Is deployment mind-numbingly slow? Are you becoming locked into an obsolete technology stack? You might need micro frontends and module federation.
![]()
Overwhelmed by the options for schema validation? Comparing tools can be confusing. With so many options, how do you know which one is best for your needs? In this post, we’ll compare AJV, Joi, Yup, and Zod in their functionality and usability.
![]()
Defined design processes improve consistency, quality, and efficiency. However, rigidly adhering to design processes makes it difficult to scale across scope and quality. What’s the happy medium? Pragmatic Design.
![]()
If you’re working with software, you’ve probably come across the terms “Continuous Delivery,” “Pipeline Runners,” and “Infrastructure as Code (IaC).” Or perhaps you’re already benefiting from automated deployments in your organization and want to learn more about the inner workings of these magic boxes.
![]()
Wondering how to create a roadmap for your static website project? You’re in the right place! Whether you're just starting out or looking to improve your skills, we've got you covered. In this post, we’ll share valuable information and tips to help you navigate the static website roadmapping process and ensure a successful outcome.
![]()
If you’ve found this guide, odds are you’re considering taking the CKA exam, or you’ve already been preparing and are looking for final review material. Regardless of which position you find yourself in, here is some advice on how to approach the CKA exam in ways that aren’t included in the excellent killer.sh exams.
![]()
What if your frameworks could work together? Well, with a single-spa Angular application, they can! When you build a single-spa Angular application, painless migration, independent deployment, and effortless scalability are all in store.
![]()
The Bitovi design team recently gathered for a retreat in Miami, FL. During our many discussions between flooded hotel beds and broken escape rooms (it was an eventful week), the question arose: "what is design?"
![]()
Upgrading an RDS database to a newer version in AWS via Terraform is a straightforward process. I learned a few lessons along the way, and I hope my lessons save you time and energy. Let’s jump in!
![]()
This post is focused on how a team can build an effective process around code reviews. If you want to know how to conduct an effective code review, check out What Does a Good Code Review Look Like?
![]()
This post is focused on the code review itself, but a great team must also build a process around reviewing code. Check out Improving Team Velocity With An Efficient Code Quality Process
![]()
It’s been a while since BitOps v2.0.0 introduced extensibility via plugins and a core platform rewrite with Python. Since then, we’ve been working hard—experimenting and gathering feedback, exploring the project's future, adding new features, fixing bugs, and improving the tool.
![]()
Design Systems make product development faster and easier for everyone involved. Products can be spun up, tested, and launched in weeks with the most basic design system in place. With a more robust design system, enterprise ecosystems avoid tech debt, duplicated work, and inconsistent designs across dozens of product lines. No matter the size of your company, designers and developers are coming to expect access to an internal design system.
And where there is not one, they will build one.
![]()
Apollo-client might be a go-to library for connecting a frontend application to a GraphQL server; however, it was originally built as a comprehensive state management library. Apollo client’s cache allows persisting local data both with reactive variables and client cache queries and also can extend server-side objects with local properties.
![]()
React is the most popular frontend web development library in use today. However, there’s a problem. Competing frameworks undermine what could be a ubiquity—React, as far as the eye can see, an ever-flowing landscape context and declarative UI. This is the dream of React developers. All awaiting the day our awe-inspiring idea becomes reality. Well, rejoice, for the day is here! I have come before you to lay the groundwork for fulfilling our vision.
![]()
If you're looking for a database for your Node.js application, Postgres, DynamoDB and MongoDB are all great options.
![]()
At Bitovi, receiving feedback and iterating on design work is integral to our daily operations. Collaboration is essential to improve our work, whether we're performing an internal review amongst our designers or discussing projects with clients.
![]()
If you’re using GitHub Actions as your Pipeline Runner, Bitovi has created a new GitHub action that makes publishing your Storybook to GitHub Pages a snap. It’s using a new feature in GitHub pages to help keep your repositories clean.
Continuous Integration (CI) automations are a vital part of DevOps and Cloud Engineering that simplify software delivery by helping ensure all code deployed to a hosted environment is bug-free and secure.
We’ve all been there—a complicated project, under-resourced and under-documented, with little continuity or direction. Luckily, Bitovi does things differently.
Teamwork makes the dream work! But in this new age of remote work, how can creative teams collaborate to make their dreams work when they’re spread out across continents and various time zones? At Bitovi, we’re experts when it comes to working remotely, and we can help your product design teams level up in this arena.
A data pipeline is a series of data processing steps. Data pipelines consist of three key elements:
One of the advantages of using the Angular ecosystem is that it never forgets about you. If Angular can’t solve your request right away because the current technology doesn’t allow it, they often return to it. An example of this is issue #8785, which was open for 6 years but was finally solved in 2022.
It’s always exciting for developers when languages release new versions—whether they fix issues, introduce new features, or both! The release of TypeScript 4.9 on November 15th, 2022 introduces a new operator, performance improvements, plus a variety of new features and capabilities. Allow us to introduce 3 of our favorites:
Local development environments allow you to speed up both development and the feedback cycle for your Serverless apps. The LocalStack plugin gives you the tools to build local development environments quickly, accessing mock AWS services without credentials.
GraphQL servers are becoming more and more popular. Backend developers recognize the added value of switching from traditional REST architecture to GraphQL, despite the higher application complexity.
A static interface works fine most of the time. But wouldn’t it be better if you added animation? You’ve seen animation used so spectacularly elsewhere. It will improve your product too. Right? Not always.
Bitovi has created a new GitHub action that makes publishing a React site to GitHub Pages a snap. It’s using a new feature in GitHub pages to help keep your repositories clean.
Pipeline Runners, and the automation pipelines they run, simplify software delivery by providing a hosted mechanism to automate running tests, building packages and artifacts, and performing deployments. In other words, Pipeline Runners run Pipelines, which are the foundation of your Automated Delivery process and your overall DevOps or Cloud Engineering approach.
While writing React apps, we often run into scenarios where we might need a component to render as different elements. These elements could be different HTML tags or other React Components. Have you ever run into any of the following scenarios :
Think Event Sourcing and CQRS are just new buzz architectures that can’t be put into practice? Think again! This post will show both the theory behind Event Sourcing and how to implement Event Sourcing and CQRS in your project.
We went to Next.js Conf on October 25th, 2022, to bring you our key takeaways and thoughts on the future of React and Next!
Monorepos are hot right now, and not for the wrong reasons. This blog will try to demystify the trend of grouping all your applications and libraries into one single repository and see why using a Monorepo in your next project is worth consideration.
While there are many tools available that assist with mocking, at least when it comes to GraphQL, none of them supports a very desirable feature: statefulness. We at Bitovi went on a mission to create a tool to mock with ease and speed while using XState to maintain stateful flexibility.
The @bitovi/querystring-parser library helps to parse query parameters into a moderately complicated database query. It could help the client query the database directly via query parameters.
We have been versioning products for ages. Some products use a basic numbering scheme starting at one and incrementing the changes. Other products, such as cars, use the year to indicate a version. A version is “A particular form of something differing in certain respects from an earlier form or other forms of the same type of thing.”
Ever wondered what memoization really means when working in React? Have you used useMemo or useCallback hooks or even React.memo countless times without actually understanding their particularities?
In our last MQTT blog post, we got a basic proof of concept MQTT broker up and running. Now let’s get it one step closer to being something useful: a home automation server.
When considering building a server-side application, you might be overwhelmed by the vast majority of technologies you can choose from.
We visited fast food restaurants to test how real-life users experience ordering through their websites.
Continuous Integration (CI) is the process of automating the stages of testing, building, and publishing. It is considered one of the first steps toward creating a truly automated end-to-end deployment process. The aim of CI is to create an artifact that can be deployed into one or more systems, preferably with a Continuous Deployment (CD) pipeline.
Temporal is a great tool for batch processing—in this post, we’ll show you all of the solutions that Temporal provides for when you need to handle tens, hundreds, or even thousands of operations.
RxJS is a library that combines the Observer pattern—where Observables or Subjects notify Observers of state changes—with functional programming to handle data changes over time.
Expand your workflow horizons with some Jinja processing techniques you may not have tried!
If you’re working in technology, you’ve likely heard the term DevOps, and may even have benefited from the assistance of a DevOps team.
How much should you trust your APIs? Trust between the frontend and backend is fundamental—in most modern web applications, both sides are ultimately accountable for the application.
Understanding how your app functions is just as important as understanding how to build the app. Having a foundational knowledge of Node.js apps gives you the tools you need to build successful APIs. From Packages to ORM, Routers to Tests, each element of a node.js application has a specific function.
You are starting your VueJs project and you get stuck on a question: how am I going to share data across multiple components? While there are a variety of lightweight state management libraries for Vue, Pinia is the one officially recommended by the Vue team, that solves sharing data across components intuitively.
Are you developing reusable components for your Angular application? Creating buttons for your new enterprise design system? Adding a popover to a table? If so, you’ll almost certainly find yourself reaching for one of Angular’s most powerful tools: Content Projection.
Designers often overlook users with disabilities. While it’s natural to view things from our perspective, one major part of product design is viewing design from the user’s perspective. Users with disabilities make up a more significant portion of your user base than you might expect, and accommodating their needs can go a long way in both creating an inclusive brand and growing your audience.
ICYMI, BitOps v2.0 is here and better than ever! We’ve introduced new features and improvements like support for plugins and a more powerful engine.
If you work regularly with React, chances are you are already familiar with at least the concept of React Suspense. Suspense is a useful tool provided by the React library that allows developers more control over UI loading states. If, however, you work all day with legacy code, refuse to let your React version budge past 16.5, or are simply new to React, allow us to give you an introduction!
It cannot be emphasized enough—the structural model of your data will set the foundation for the rest of your app. Sometimes we spend so much time focusing on the next great library, utility, or framework that we forget foundational principles that have a huge financial impact on our company. Understanding database normalization will save your company money, and save your team from future headaches.