March 21, 2024
READING TIME6 min

Case Study: Cover Procurement

Cover Technologies — or Cover — is one of the leading ADU manufacturers in Los Angeles, California. They’ve raised over $73MM to democratize the housing industry by producing affordable but luxurious homes at scale.

$60MSeries B
$73.3Mtotal raised
50+employees
Los AngelesCalifornia, USA

We began our partnership with Cover in January 2021 and have since developed a suite of software to support their manufacturing, procurement, and production teams in constructing ADUs more affordably, efficiently, and to a higher standard.

One project we hold in high regard is Cover Procurement, designed to avoid woes with the existing ERP. It didn’t entail replacing that ERP but rather supplementing it. Chief among our goals was to provide:

  • A simplified UI for interacting with the ERP
  • Responsive design for on-site workers, which the ERP lacked
  • Streamlined workflows for procurement, meaning a simple button press may replace several actions users would manually perform in the ERP.
  • Dead simple data entry for long forms
  • New features that would otherwise take months to integrate into the ERP properly
  • User alerts for pending action items
  • Consistently accessible UI components for ADA employees

How We Facilitated Procurement

Traditionally, inputting detailed information for each item in their ERP was tedious and time-consuming. For example, entering 500 items would require manually entering various details such as the purchased unit of measure, name, description, UPC, and uploading an image for each item. With approximately 20 or more interactions per item, this task could take hours or even days to complete, not to mention the potential for user input errors.

To streamline this process, we implemented several core features:

  1. Autofill item information: Instead of manually entering each detail, users can scan the barcode or provide a vendor URL for the item, and the system automatically populates the required information. This feature significantly expedites the procurement process, saving valuable time and reducing the risk of errors.
  2. Data de-duplication: Detect early on if the user is inputting data already in the system, with overrides in case the user is doing so deliberately (always allow for an escape hatch).
  3. Receipt and invoice scanning: A powerful scanning function that allows users to snap a photo of their receipt or purchase order using their phone or tablet to automatically extract relevant information such as line items, subtotal, and total. This feature is particularly valuable for users working on job sites or in remote locations with limited access to a desktop.
  4. Spreadsheet-like UI: This interface behaves like a spreadsheet, complete with type-aheads giving context to each field. It eliminates users' need to search the ERP for related documents. The interface also includes auto-saving forms, inline calculations, and shortcuts.

While continued development has brought more features, these are the ones that proved to be the most valuable in saving users’ time.

Purchase order form (desktop)
Advanced type-ahead demo with document context
Purchase order form (mobile)

Overcoming ERP Integration Hurdles

Early in the project, we were confronted with the question: Do we integrate directly into the ERP or maintain Cover Procurement as a separate app? After careful consideration, we pursued the latter path. More or less to avoid potential unknowns and technical constraints inherent in the ERP.

We introduced an intermediary backend between the ERP and the frontend to implement features not supported by the ERP, such as drafts, user preferences, and single sign-on (SSO) for Google. This design allowed for greater flexibility and extensibility in the future.

Unfortunately, nothing comes without a cost in software engineering. We encountered several challenges when integrating with the ERP. The ERP provided an RPC and REST API, which seemed promising, but upon closer inspection, it became evident that it needed to be more robust.

In particular, bulk API operations were needed but lacking. It hindered our ability to efficiently handle some of the larger operations we had in mind. Since certain operations were required to be atomic and may involve modifying several hundred database rows, we needed to assist Cover’s ERP team in implementing these atomic bulk API endpoints.

Tech Stack

We selected our tech stack based on our guiding principle of “replaceability.” The goal was to ensure a seamless transition for Cover should they decide to integrate their in-house team. With this in mind, the choice of technologies was simple: Use the technologies we and their in-house team are familiar with. Therefore, Vue, Python, Django REST Framework, and Redis were our picks.

We like to impart some wisdom to any teams we work with as a favor for them sharing their knowledge with us. Two such cases were in their continuous integration pipelines and developer environments on their ERP and Cover Procurement.

Tightening Feedback Loops

A tight developer feedback loop is crucial for delivering new features efficiently and effectively. The sooner a developer is made aware of an issue in the code, the sooner they can address it. Quickly finding errors is especially true when working with a dynamically typed language like Python, which benefits massively from type hinting with static type analysis. For that reason, we incorporated checks in our continuous integration pipeline against MyPy and Pylint, along with the usual unit and integration test runner checks.

Containerization for Ease-of-Use

As Cover had yet to undertake projects requiring heavy modification to the ERP, developer environments were manually set up on virtual machines and company machines. To address this challenge and create a reproducible and easy-to-set-up development environment, we containerized these projects using Docker Compose. By containerizing the infrastructure stack (Postgres, Redis, Nginx, etc.), developers could focus more on the codebase rather than spending time on environment setup.

Nailing Procurement, Together

This was a fun foray into a manufacturing company's procurement process. Cover’s team was extremely helpful in teaching us, and we look forward to continued collaboration with them!

Need a few more eyes on your project or idea? Drop us a message.

FIN.