Unless you’re in San Francisco or New York, selling your home is a giant headache that typically lasts three months.Opendoorremoves the headache — go online, ask for an offer, answer a few questions and we’ll buy your home directly from you.We’ll take it from there and deal with selling the home to another buyer while you can go on with your life.
Right now we operate in Phoenix, Dallas, and Las Vegas.We’ve completed over 4,800 real estate transactions — over $1B in homes.For a company about to turn 3 years old, it’s pretty crazy how far we’ve come.
There’s a lot that goes into one real estate transaction.First, there’s what you might consider our core engineering challenge: making an accurate offer on each home.If we offer too much, we’ll lose money and go out of business;if we offer too little, we’ll seem like scammers and offend our customers.
After we buy the home, we’ll work with contractors to do any necessary repairs and touch-ups, then put the home on the market and find a buyer.Since we own every home, we can do clever things like putting smart locks on all the doors and offering all-day open houses.
I’m a frontend engineer, and mainly like to work on the consumer-facing website.I’m currently working on improving the experience for first-time home buyers.The process can be really scary for people who don’t know anything about real estate.
Our team is split between product engineering and data science: the tools used by each team are different enough that the teams work in separate code bases.Of course, the resulting product has to be well-integrated, and the product team pulls a lot of data from data science APIs.This coordination is tricky to get right;Kevin Teh from the data science team wrote about it in some detail in a recent post.
At first, we split the product team into “customer-facing” and “internal tools” groups.It was nice to have all the frontend engineers on the same team, but we noticed that some projects didn’t have clear owners.For example, our buyer support team uses some internal tools we’ve built.Should those tools be developed by the “internal tools” team, or is support part of the customer experience?
Now the team is split into cross-functional teams based around parts of the business.The Seller team handles people selling to us;the Homes team handles renovations and inventory;和 the Buyer team puts our homes on the market and finds buyers.
As we grow, the lines between teams often get blurry, so we expect that the structure will always be evolving.It’s common for engineers to move between teams, including between the product and data science teams.
The MVP of our customer-facing product was a multi-page form where you could enter information about your home to get an offer, but that was just the tip of the iceberg.We had to build internal tools to help our team correctly price homes and manage the transaction process.我们用dAngular和Bootstrapto build out those tools;the main goal was to add features quickly, without fiddling around with CSS — in fact, without requiring any frontend experience at all.
我们用Pumaas our webserver, andPostgresfor our database — one big benefit is thePostGISextension for location data.Sidekiqruns our asynchronous jobs with support fromRedis。Elasticsearchshows up everywhere in our internal tools.我们用Webpackto build our frontend apps, and serve them using the Rails Asset Pipeline.
我们用Imgixto store photos of our homes, as well as most of the icons and illustrations around our site.我们主要使用 Imgix’s auto-resizing feature, so we never lose track of our original images, but can later load images of appropriate size for each context on the frontend.
Monolith to Microservices
Where appropriate, we try to break isolated logic out into microservices.For example, we’re working on a service which calculates our projected costs and fees.Our cost structure changes frequently, and we want to estimate how policy changes might affect our fees.This code wasn't a great fit for the Rails app because we wanted it to be accessible to our analysts and data scientists as well.
We’ve now split this logic out into its own service.It uses a version-history-aware computation graph to calculate and back-test our internal costs, and (soon!) will come with its ownReactfrontend to visualize those calculations.
Our data science stack is also a fully separate set of services, so there’s a lot of inter-app communication going on.为了让这些服务来验证彼此，我们使用了一个Elixir应用程序称为Paladin。执行Opendoor工程师丹Neighman写和开源的圣骑士，并解释了为什么它有助于在this blog post。验证基于提供JWTsWarden和Guardian。
为了找到一所房子的价格，你看，最近售出附近的住户，然后通过比较你了解市场的整体挤什么尽可能多的信息指出，数据，你可能可以。Our co-founder Ian Wong has a more in-depth talk here。
- Ingesting and organizing data from a variety of sources
- Training machine learning models to predict home value and market risk
- Quantifying and mitigating various forms of risk, including macroeconomic and individual house-liquidity
- Collecting information in a data warehouse to empower the analytics team
对于我们的机器学习模型，我们使用Python从积木SqlAlchemy，scikit-learn和Pandas。我们用Flask路由/处理请求。我们用Docker为了建立图像和Kubernetes部署和缩放。我们的系统让我们描述了一个模型作为JSON配置和部署后，系统会自动抓取所需的功能，火车模型，并评估模型，如何做对抗的性能指标。This automation lets us iterate really fast。
Dask is lighter weight and is easier to integrate into existing code and hardware.If your problems vary beyond typical ETL + SQL and you want to add flexible parallelism to existing solutions then dask may be a good fit, especially if you are already using Python and associated libraries like NumPy and Pandas.
通常，如果你想看到的房子出售，你必须调用经纪人和安排时间。我们早就知道，我们可以使通过我们的大门上安装自动锁使家庭可以在任何时候访问开放参观的方式更方便实现。对于项目的0版本，我们从字面上我们发布的产品的电话号码VP我们所有的房子的门 - 购买者在打电话，他会告诉他们的解锁代码。
客户希望一个良好的移动体验这些天，但我们全天开房功能进行的两次重要。您可以使用应用程序来查找附近的家园你开车过来，并探讨他们突发奇想 - 一个巨大的进步，从传统工艺！
我们建立了我们的应用程序中React Native。这种选择的一个主要部分是务实的 - 我们的团队有很多与网络技术的经验，并与当地的技术几乎没有任何经验。我们也希望从早期同时支持iPhone和Android，并作出反应母语让我们做到这一点（我们首先推出了我们的iPhone应用程序，并添加Android的只用了一个额外的几周）。
不是每个人都需要安装一个应用程序，所以它仍然可以通过手机短信来访问我们的家园。我们增加了一些安全机制 - 一个值得一提的是Blockscore，它可以让我们快速运行身份认证使用的电话号码。对于风险较高的数字，我们禁用自动录入系统，并得到我们的支持团队致电客户，收集他们的信息。
- Check your work on staging
执行Opendoor有一个非常进取，务实的企业文化：这里的工程师通常与客户交谈，了解他们的需求，并主动上项目。我们测试了所有权和授权他人, are aggressively anti-snark.
We’re looking for engineers of all backgrounds: it doesn’t matter what languages you work with now, we’re sure you’ll ramp up fast.
Huge thanks to Kevin Teh, Mike Chen, Nelson Ray, Ian Wong, and Alexey Komissarouk for their help putting together this post.