How do I bypass cart and go straight to checkout? I know that you can easily achieve this functionality in Drupal 7 with the Rules module or using the Commerce Checkout Express module.

Since Rules and Commerce are not that much integrated yet, I am not sure we can achieve this that easily, in Drupal 8.

Can I implement this feature using just rules? If the answer is no, how can I do it, programmatically?
If you use the last development version of commerce, and look for file commerce\modules\cart\src\Form\AddToCartForm.php which lives under the Drupal\commerce_cart\Form namespace, you can see that cart_id was set, and it is the order ID too.

$form_state-&gt;set('cart_id', $cart-&gt;id());


Therefore, in hook_form_alter(), we can get the order ID (the cart ID). 

$order_id = $form_state-&gt;get('cart_id');


The complete code would be this.

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;

/**
 * Implements hook_form_alter().
 */
function &lt;MY_MODULE&gt;_form_alter(&amp;$form, FormStateInterface $form_state, $form_id) {
    // Add to cart form id for product 5 is: commerce_order_item_add_to_cart_form_commerce_product_5
    // Then it's enough to check $form_id contains the string 'commerce_order_item_add_to_cart_form_commerce'
    if(strpos($form_id, 'commerce_order_item_add_to_cart_form_commerce') !== false) {
        $form['actions']['submit']['#submit'][] = '_redirect_to_checkout';
    }
}

// Callback for form submission
// @see hook_form_alter().
function _redirect_to_checkout(&amp;$form, FormStateInterface $form_state) {
  /** @var \Drupal\commerce_order\Entity\OrderInterface $cart_id */
  $cart_id = $form_state-&gt;get('cart_id');

  $url = Url::fromRoute('commerce_checkout.form',
    ['commerce_order' =&gt; $cart_id]
  );

  $form_state-&gt;setRedirectUrl($url);
}