.. _docs-mission:

======================
Mission & Philosophies
======================

-----------
Our Mission
-----------
.. pull-quote::

   Create both *software* and *process* foundations for *sustained*,
   *robust*, and *rapid* *embedded* product development with *large teams*.

Each component of our mission has additional meaning:

- **Software** - Our modular components and surrounding tooling are our
  primary deliverable. The software is the product of our philosophies.
- **Process** - Developing robust software processes is hard, and not something
  all teams have time for. Our mission is to create reusable processes that can
  save time and increase team happiness. Our approach is to offer tooling and
  standards. For example, our integrated code formatting, module directory
  structure, style guide, test processes, and more are all designed for reuse.
- **Sustained** - Products often live a long time or are part of a series of
  related products; and over time the requirements change. Our mission is to
  make these sustained development situations easier. Our approach is to create
  flexible and reusable foundations to gracefully handle changes. For example,
  our porting abstractions make switching a microcontroller vendor easier.
- **Robust** - Creating robust products is hard, yet important for finding
  market and product success. Our mission is to assist teams in creating robust
  products. Our approach is to:

  #. Invest heavily in software reliability tooling and processes (unit testing,
     sanitizing, formatting, etc)
  #. Comprehensively apply said tooling and processes to Pigweed, making Pigweed
     a robust foundation
  #. Make said tooling available for downstream use, so teams can ensure code
     they write is robust

- **Rapid** - Creating products quickly is critical in today's market. Our
  mission is to make shipping products faster with Pigweed. Our approach is to
  accelerate product development by offering reliable foundations (less bug
  hunting), having great onboarding tooling (low engineer churn/setup), offering
  modules solving common but hard problems (RPC), etc.
- **Embedded** - Our mission is to support software embedded in products such as
  earbuds, watches, phones, thermostats, satellites, cars, drones, and related.
- **Large teams** - Developing software with large teams in the embedded space
  is increasingly frequent due to more capable embedded processors.
  Traditionally, teams were 1-5 people, but are increasingly much larger
  (50-200 person) teams. Our mission is to make developing larger products with
  correspondingly larger teams easier and faster, with an eye to support rapid
  prototyping where there is a chance to scale from an idea to production. Our
  approach is the investment in common abstractions, common practices, common
  standards, tooling around those standards, and a focus on automation and
  repeatability.
