get_option returns false for missing and for false alike

get_option() returns false when the option does not exist, and also when it exists and holds false. Any setting that can legitimately be off is therefore indistinguishable from one that was never saved.

// cannot tell 'never configured' from 'explicitly disabled'
if ( ! get_option( 'my_feature_enabled' ) ) { /* ... */ }

// a default that is not false
$enabled = get_option( 'my_feature_enabled', 'unset' );

if ( 'unset' === $enabled ) { /* first run */ }

// or store strings and never booleans
add_option( 'my_feature_enabled', 'no' );

It matters at activation, when the plugin has to decide between applying defaults and respecting a choice the user already made. Storing 'yes' and 'no' as strings is the convention core itself uses for exactly this reason. Note that options are cached per request, so the extra call in the check costs nothing.