code: func (w *deployWatcher) Watch(name string, serviceNames []string, statusUpdates chan serviceStatus) error {
  	errC := make(chan error, 1)
  	defer close(errC)
  
  	handlers := runtimeutil.ErrorHandlers
  
  	// informer errors are reported using global error handlers
  	runtimeutil.ErrorHandlers = append(handlers, func(err error) {
  		errC <- err
  	})
  	defer func() {
  		runtimeutil.ErrorHandlers = handlers
  	}()
  
  	ctx, cancel := context.WithCancel(context.Background())
  	wg := sync.WaitGroup{}
  	defer func() {
  		cancel()
  		wg.Wait()
  	}()
  	wg.Add(2)
  	go func() {
  		defer wg.Done()
  		w.watchStackStatus(ctx, name, errC)
  	}()
  	go func() {
  		defer wg.Done()
  		w.waitForPods(ctx, name, serviceNames, errC, statusUpdates)
  	}()
  
  	return <-errC
  }
docs: // Watch watches a stuck deployement and return a chan that will holds the state of the stack