🎉
Welcome to Bit's new open-source website!

Thinking in components

As you might have noticed, this site was built in components. As we built the new documentation we started hiring more people to work for our company and we needed an internal wiki site to be a single source of truth for all information internal at Bit to keep everyone in sync. We decided to document the process to demonstrate thinking in components.

Welcome to .bit

Welcome to your component-driven wiki app!

This is the first component-driven wiki! Content pages are MDX components, and you can use any type of component from inside any wiki page.

Here is an example using our What is Bit component:

What is Bit?

Bit is an open-source tool for composing component-driven software.


Bit stands at the intersection between product and engineering. It helps you take complex product requirements, and break them down into independent, and reusable pieces called "components". It allows you to create components and compose them with each other. Components are described by names and APIs, and contain source code implementation. They can be of different kinds like apps, pages, UI components, backend services and even content. You can think of almost anything in components.

People tend to think of components like apps as "bigger" and components like a button as "smaller", but for us they are the same size. Both Button and App are components, with different responsibilities. An App is the most "concrete" component with a dependecy graph and minor amount of dependents, and button is the most "abstract" component with just few dependencies and a lot of dependents, indicating higher reusability. They have different responsibilities but they are equal in size and importance.

Bit does not prescribe how you build your entire application. It helps you define and compose components and allows for every component to adopt the dev tools that best fit its nature. A React component might be compiled, tested and sometimes even deployed with a different composition of tools than a backend-service component, or a generic function. Bit comes with native support in various dev tools like TypeScript, Babel, Jest, Webpack, ESLint and ready made development environments for React, NodeJS, Angular and more. New tools can be easily integrated by adding one more component into Bit!

What can you do with Bit?

Anything is possible with Bit! We built Bit and bit.cloud entirely using Bit. These are complex systems which includes infrastructure tools, cloud products and multiple user interfaces.

People use Bit to create all kind of applications, from user interfaces with component-driven frameworks like React, Vue and Angular, to complex micro-service architectures, serverless functions, CLI utilities, desktop applications, native mobile applications and even IoT. You can do with Bit about anything you can do with JS and even beyond.

What Bit supports?

Bit was built with TypeScript and supports it natively. It was designed to be language-agnostic, and can support other software languages in the future! For now, our development environments use official TypeScript by default, to compile both JS and TS components and you can easily change to use Babel as a compiler or anything else, Bit has no opinion regarding your tech stack.


Monolithic thinking

Thinking even of this simple product as one piece, keeps us further away from initial value creation. This approach focuses on a single point of value that can only ever serve a single purpose; the bigger the piece gets, the bigger the problem becomes.

Persisting with this pattern of thinking compounds the problem; work is repeated infinitely. As more people join a team and continue this pattern, even more repetition takes place.

This amounts to unnecessary amounts of duplicated code, design sketches and product specs, with slight differences that makes them a lesser whole together. This is an ever growing debt that decreases the pace of value creation and the quality of work produced.

Even worse, repeating work is repeating decisions, reducing productivity, ending up with teams diverging to different paths for similar problems. Diverged decisions pile up to a growing burden that divides teams further apart, where collaboration is discouraged and morale deteriorates.

For a developer, that means building tightly-coupled code that is hard to reuse and limiting .

Value creation is exponentially decaying over time, ending up in silos of stagnation. For a startup, that means bounding yourself to just a few paths, creating very specific value, limiting a company's ability to pivot or adapt to change.

For an enterprise, that means every dollar spent in value creation is decreasing the value of total dollars invested. The more the enterprise invests, the less value it can create. This equation applies on the entire range, from the smallest system all the way up to the biggest one.

Components

A component is an independent, reusable product that provides an interface for using it. Components should serve a single purpose; you begin by designing its interface to suit your own needs, increasing support for new needs from users as they come.

Components are described by names and APIs, and contain source code implementation. Components come in all shapes and sizes. They can be of different kinds like apps, pages, UI, backend services and even content. You can think of almost anything in components.

In fact, everything you see on this page has been created with components.

Ready to give Bit a try?

If you are ready to give Bit a try, head back to Quick start and kickoff you component-driven journey!