Get translated field value with fallback
Drupal 8 does not have built in field-level language fallbacks. That feature was removed in favor entity level language fallbacks since that is the common case. Usually an entity is translated as a while (or not) and it removes a huge amount of complexity, especially in views or so.

If you have a specific field where you want to apply this, then you need to implement that yourself. You can check if an entity-level translation exists with $node->hasTranslation('en') and if so, get it with $translation = $node->getTranslation('de') ($translation is still a node object, it's a clone of the original one with a different active language). Then check if you have a value and repeat until find one.

Something like this:

$value = NULL;
$language_manager = \Drupal::languageManager();
$current_langcode = $language_manager-&gt;getLanguage(Drupal\Core\Language\LanguageInterface::TYPE_CONTENT);
foreach ($language_manager-&gt;getFallbackCandidates(['langcode' =&gt; $language_manager-&gt;getLanguage(]) as $langcode) {
  if ($node-&gt;hasTranslation($langcode) &amp;&amp; !$node-&gt;getTranslation($langcode)-&gt;field_my_awesome_field-&gt;isEmpty()) {
    $value = $node-&gt;getTranslation($langcode)-&gt;field_my_awesome_field-&gt;value;
    break;
  }
}