堆栈,帮助Opendoor买入和卖出美元1B in Homes

30,923
21
Opendoor
A new way to buy and sell homes.Opendoor allows homeowners to sell their home online in a few clicks, bringing certainty and simplicity to what is usually a long and stressful process.

ByAlex Zirbel, Software Engineer atOpendoor


About Opendoor

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.

Engineering Organization

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.

Product Architecture

We started in 2014 with aRuby on Railsmonolith andAngularfrontend, both of which were good ways to move fast while we were very small.

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.我们用dAngularBootstrapto 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 fromRedisElasticsearchshows 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。验证基于提供JWTsWardenGuardian

数据科学体系

我一直在执行Opendoor有趣的发现数据的科学,因为它不是“抢尽可能多的数据,你可能可以,然后在巨大规模的过程是”我已经习惯了听到有关问题。

为了找到一所房子的价格,你看,最近售出附近的住户,然后通过比较你了解市场的整体挤什么尽可能多的信息指出,数据,你可能可以。Our co-founder Ian Wong has a more in-depth talk here

我们可以将大部分数据科普工作分成几个核心领域:

  1. Ingesting and organizing data from a variety of sources
  2. Training machine learning models to predict home value and market risk
  3. Quantifying and mitigating various forms of risk, including macroeconomic and individual house-liquidity
  4. Collecting information in a data warehouse to empower the analytics team

对于数据摄取,我们拉从各种来源(如税收记录和评估者的数据)。我们转储大多数这类数据成RDS Postgres数据库。我们还改造和规范化的一切在这个阶段 - 我们是从源中导入脏数据经常发生冲突。This blog post进入更详细的关于我们如何将数据合并为一个给定的地址。



对于我们的机器学习模型,我们使用Python从积木SqlAlchemyscikit-learnPandas。我们用Flask路由/处理请求。我们用Docker为了建立图像和Kubernetes部署和缩放。我们的系统让我们描述了一个模型作为JSON配置和部署后,系统会自动抓取所需的功能,火车模型,并评估模型,如何做对抗的性能指标。This automation lets us iterate really fast

我们开始使用Dask为特征提取和处理。其他公司经常使用Spark和Hadoop的这一点,但我们需要更复杂的并行算法支持。DASK的comparison to PySpark post描述了这种完美:

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.

我们的数据的科学架构的最后一部分是数据仓库,我们用它来从收集分析数据到处都可以。很长一段时间,我们使用了夜间pg_dump移动Postgres从每个服务的数据库中的数据直接进入家庭建造的数据仓库。我们最近迁移到谷歌的BigQuery代替。BigQuery是更快,让我们适应更多的数据到每个查询,但杀手的特点是,它是无服务器。我们有很多人在“高峰时段”运行的查询,并且不希望的事情慢下来,只是因为我们有可用的服务器的数量预分配。

高科技的样板房

由于执行Opendoor真正拥有所有我们出售的房子,我们可以有创意,我们如何他们展示给潜在买家。

通常,如果你想看到的房子出售,你必须调用经纪人和安排时间。我们早就知道,我们可以使通过我们的大门上安装自动锁使家庭可以在任何时候访问开放参观的方式更方便实现。对于项目的0版本,我们从字面上我们发布的产品的电话号码VP我们所有的房子的门 - 购买者在打电话,他会告诉他们的解锁代码。

对于第1版中,我们增加Twilio这样我们就可以自动通过短信发送解锁码。对于2版本中,我们建立了一个移动应用程序。



客户希望一个良好的移动体验这些天,但我们全天开房功能进行的两次重要。您可以使用应用程序来查找附近的家园你开车过来,并探讨他们突发奇想 - 一个巨大的进步,从传统工艺!

我们建立了我们的应用程序中React Native。这种选择的一个主要部分是务实的 - 我们的团队有很多与网络技术的经验,并与当地的技术几乎没有任何经验。我们也希望从早期同时支持iPhone和Android,并作出反应母语让我们做到这一点(我们首先推出了我们的iPhone应用程序,并添加Android的只用了一个额外的几周)。

不是每个人都需要安装一个应用程序,所以它仍然可以通过手机短信来访问我们的家园。我们增加了一些安全机制 - 一个值得一提的是Blockscore,它可以让我们快速运行身份认证使用的电话号码。对于风险较高的数字,我们禁用自动录入系统,并得到我们的支持团队致电客户,收集他们的信息。

工具和工作流程

我们管理我们的资源库,并做代码审查GitHub。所有的代码是由至少一个其他工程师审查,但一旦它在master分支,它假定是准备部署。如果你要部署你的代码,你可以做的三个步骤:

  1. 。/bin/deploy staging
  2. Check your work on staging
  3. 。/bin/deploy production

这需要总共10-15分钟。我们努力的过程自动化,所以我们可以作为一个团队迅速采取行动。我们用Heroku对于托管和运行自动化测试CircleCISlack机器人报告什么正在部署。

有很多的外部服务,我们依靠大量。要通过他们简单地运行:Help ScoutDyn对于电子邮件;TalkdeskTwilio呼叫和客户服务;HelloSign网上签约;New RelicPapertrail系统监测;Sentry错误报告。

对于分析中,我们使用了大量的工具:Mixpanel对于网络,Amplitude移动,Heap追溯事件跟踪。我们主要使用Looker为深入挖掘数据,使仪表盘。

加入执行Opendoor工程

执行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.

Find out more about Opendoor jobs onStackShareor on ourcareers site

Huge thanks to Kevin Teh, Mike Chen, Nelson Ray, Ian Wong, and Alexey Komissarouk for their help putting together this post.

Opendoor
A new way to buy and sell homes.Opendoor allows homeowners to sell their home online in a few clicks, bringing certainty and simplicity to what is usually a long and stressful process.
Open jobs at Opendoor
Software Engineer (Mobile) - Los Angeles
Los Angeles, CA
Today, our software plugs into the existing real estate market via broker-quality data feeds and a network of local real estate agents.We have a web/app feed that helps users house hunt, back-of-house software that helps agents manage transactions, and custom support tools that allow our small team to assist thousands of active buyers through the process.We take a pragmatic, piecemeal approach to crafting software with heavy emphasis on testing, measurement, and iteration.The Role As a mobile developer, you'll work on the Opendoor app, written in React Native and live today on iTunes and Google Play.Specifically, you'll work on initiatives to add new functionality to our app, improve usability, and improve testing.Our strategy includes building native functionality, so experience with native iOS and Android development is a plus.
  • B.S.in Computer Science or equivalent experience
  • 5+ years of industry experience
  • Minimum of 1 year working with React Native or heavy React experience
  • Experience building a well-designed mobile/web app
  • Ability to choose a test-driven approach and write code in a way that lends itself to testing
  • A bias for building your way out of a problem
  • Optimism about future technology and automation
  • Good references from past colleagues
  • Experience working on Native Mobile apps
  • You love delighting customers with honest, transparent products and experiences
  • Domain knowledge and/or interest in real estate
    Verified by
    Software Engineer
    Engineering Manager
    Software Engineer
    Software Engineer
    Lead Data Scientist / Software Engineer Manager
    Software Engineer
    Engineering Manager - Pricing
    You may also like
    3 Ways to Run Kubernetes on AWS
    Simplifying Web Deploys
    The Business Case for Container Adoption
    Powering Pinterest Ads Analytics with Apache Druid