Move Fast, Don’t Break Things: An Inside Look at Cadre’s Engineering Operation

From architecture simplicity to continuous delivery, take a peek into our development environment and process.

Published on Jul 10, 2019
Listen on:

One of the biggest challenges for any software engineering organization is figuring out how to maximize development velocity. Some organizations can afford to prioritize velocity over quality. At Cadre, we can’t. We treat quality as the highest priority — users trust our technology and we can’t compromise their trust.

We believe that, when done correctly, development infrastructure can allow engineers to move as quickly as possible while also not breaking production, sacrificing users’ data integrity, or introducing security vulnerabilities. Here’s a brief summary of our development environment and process.

An Inside Look at Cadre’s Engineering Operation

Production Isolation

There’s a simple rule in reliability engineering: you can’t avoid mistakes but you can avoid the consequences of mistakes. Our AWS environment follows this rule. We have three separate VPCs: Corporate, Development and Production. The only two addresses exposed to the global internet are our production website and corporate VPN. Peering between VPCs allows very limited types of traffic. We continuously validate this isolation through internal testing and by engaging 3rd-party network penetration testers.

This isolation extends beyond networking. No changes made in our development environment can influence production in any way. Changes to our production environment are only done through automation that’s been code reviewed, rigorously tested, and continuously audited. This allows us to eliminate any possibility of human operator error.

Architecture Simplicity

At Cadre, we don’t build software just for the sake of building it — we build software that serves our needs. New proptech companies emerge daily, so we know it’s important to move fast to maintain our first-mover advantage. Therefore, simplicity of development is a very important aspect of our engineering process. Cadre is written as a monolith Django application, we have a React.js frontend, and all of our software is running in AWS.

We’re a small team of about 30 engineers and don’t see much value in overcomplicating our stack by introducing a multi-language micro services architecture. We don’t rule-out the possibility of creating separate services in the future, but at our current size and load, a Django monolith allows us to move fast and keep things simple.

We like to benefit from — and contribute to — the open-source community. We sponsor Django Software Foundation, Django Rest Framework, and last year we sponsored DjangoCon in San Diego. We’ve made numerous contributions to upstream dependencies and are maintainers of a popular Django model-version-tracking library called Django Simple History (which we also use at Cadre).

Automated Testing

We leverage a lot of automated testing to ensure our code is high quality. Before hitting production, every change goes through an extensive pipeline of unit, regression and end-to-end tests. We have a custom end-to-end testing framework tightly integrated with the Django ORM, and built with pytest and the official Python Selenium bindings.

Branch Previews

Even with rigorous automated testing, a human touch is needed to validate new features or designs. For every pull request created by a developer, we automatically spin up a separate version of cadre.com, complete with generated production-like fixture data. These lightweight environments are only accessible within our corporate network. A developer can send a link to this site to designers, product managers, and business owners so they can test the feature and provide feedback. Not only does this increase development velocity because it shortens the feedback loop between the various stages of development, it also simplifies the process of manual testing and helps us maintain the quality of the code we’re shipping to production.

Continuous Delivery

We ship to production all day, every day. Here’s why:

  1. First and foremost, we’re continually improving and enhancing our customer experience, internal tools, and data platform. We want these changes to hit production as soon as possible.
  2. We believe that every developer should be responsible for shipping quality code. Developers take this responsibility seriously — especially when hitting “merge” means their code is going straight to production. We also think it’s substantially easier to catch bugs by shipping often and in small chunks, as opposed to large daily or weekly deployments.
  3. Our team of designers, product managers, and engineers are motivated by seeing how their work contributes to the company’s success. Seeing our changes hit production within an hour after they’ve merged is exhilarating. Plus, it encourages the completion of tasks in smaller increments, at a faster pace.

Remote Work

One of our Platform Team’s values is to build tools and an environment that are useful for the entire company — including the ability to work remotely. We’re a relatively small team and understand that from time-to-time, colleagues may need to work from home or from remote destinations. We’re okay with that. We try to build all of our tools and frameworks with this in mind, as a way to maintain productivity for those who occasionally need to work from home.

Cadre Engineering, come work with us!

Disclaimer

Educational Communication
Not AdviceThe views expressed above are presented only for educational and informational purposes and are subject to change in the future. No specific securities or services are being promoted or offered herein.

Not Advice
This communication is not to be construed as investment, tax, or legal advice in relation to the relevant subject matter; investors must seek their own legal or other professional advice.

Performance Not Guaranteed
Past performance is no guarantee of future results. Any historical returns, expected returns, or probability projections are not guaranteed and may not reflect actual future performance.

Risk of Loss
All securities involve a high degree of risk and may result in partial or total loss of your investment.

Liquidity Not Guaranteed
Investments offered by Cadre are illiquid and there is never any guarantee that you will be able to exit your investments on the Secondary Market or at what price an exit (if any) will be achieved.

Not a Public Exchange
The Cadre Secondary Market is NOT a stock exchange or public securities exchange, there is no guarantee of liquidity and no guarantee that the Cadre Secondary Market will continue to operate or remain available to investors.

Opportunity Zones Disclosure
Any discussion regarding “Opportunity Zones” ⁠— including the viability of recycling proceeds from a sale or buyout ⁠— is based on advice received regarding the interpretation of provisions of the Tax Cut and Jobs Act of 2017 (the “Jobs Act”) and relevant guidances, including, among other things, two sets of proposed regulations and the final regulations issued by the IRS and Treasury Department in December of 2019. A number of unanswered questions still exist and various uncertainties remain as to the interpretation of the Jobs Act and the rules related to Opportunity Zones investments. We cannot predict what impact, if any, additional guidance, including future legislation, administrative rulings, or court decisions will have and there is risk that any investment marketed as an Opportunity Zone investment will not qualify for, and investors will not realize the benefits they expect from, an Opportunity Zone investment. We also cannot guarantee any specific benefit or outcome of any investment made in reliance upon the above.

Cadre makes no representations, express or implied, regarding the accuracy or completeness of this information, and the reader accepts all risks in relying on the above information for any purpose whatsoever. Any actual transactions described herein are for illustrative purposes only and, unless otherwise stated in the presentation, are presented as of underwriting and may not be indicative of actual performance. Transactions presented may have been selected based on a number of factors such as asset type, geography, or transaction date, among others. Certain information presented or relied upon in this presentation may have been obtained from third-party sources believed to be reliable, however, we do not guarantee the accuracy, completeness or fairness of the information presented.

No U.S. or foreign securities commission or regulatory authority has recommended or approved any investment or the accuracy or completeness of any of the information or materials provided by or through us.

Sign up
Sign up for the Cadre platform
Gain full access to our thought leadership, product offerings and more
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.