diff --git a/upup/pkg/fi/default_methods.go b/upup/pkg/fi/default_methods.go
index <HASH>..<HASH> 100644
--- a/upup/pkg/fi/default_methods.go
+++ b/upup/pkg/fi/default_methods.go
@@ -29,12 +29,16 @@ func DefaultDeltaRunMethod(e Task, c *Context) error {
 	var a Task
 	var err error
 
-	var lifecycle *Lifecycle
+	var lifecycle Lifecycle = LifecycleSync
 	if hl, ok := e.(HasLifecycle); ok {
-		lifecycle = hl.GetLifecycle()
+		l := hl.GetLifecycle()
+		if l == nil || *l == "" {
+			return fmt.Errorf("task does not have a lifecycle set")
+		}
+		lifecycle = *l
 	}
 
-	if lifecycle != nil && *lifecycle == LifecycleIgnore {
+	if lifecycle == LifecycleIgnore {
 		return nil
 	}
 
@@ -46,7 +50,7 @@ func DefaultDeltaRunMethod(e Task, c *Context) error {
 	if checkExisting {
 		a, err = invokeFind(e, c)
 		if err != nil {
-			if lifecycle != nil && *lifecycle == LifecycleWarnIfInsufficientAccess {
+			if lifecycle == LifecycleWarnIfInsufficientAccess {
 				// For now we assume all errors are permissions problems
 				// TODO: bounded retry?
 				c.AddWarning(e, fmt.Sprintf("error checking if task exists; assuming it is correctly configured: %v", err))
Require all HasLifecycle tasks to have lifecycle set