def METHOD_NAME(self):
    # gets the most recent observation because the next observation is just going to modify these parameters
    last_obs = self.dynamic_cadence.observation_group.observation_records.order_by('-created').first()
    # Make a call to the facility to get the current status of the observation
    facility = get_service_class(last_obs.facility)()
    facility.update_observation_status(last_obs.observation_id)  # Updates the DB record
    last_obs.refresh_from_db()  # Gets the record updates
    # Boilerplate to get necessary properties for future calls
    start_keyword, end_keyword = facility.get_start_end_keywords()
    observation_payload = last_obs.parameters
    # Cadence logic
    # If the observation hasn't finished, do nothing
    if not last_obs.terminal:
        return
    elif last_obs.failed:  # If the observation failed
        # Submit next observation to be taken as soon as possible with the same window length
        window_length = parse(observation_payload[end_keyword]) - parse(observation_payload[start_keyword])
        observation_payload[start_keyword] = datetime.now().isoformat()
        observation_payload[end_keyword] = (parse(observation_payload[start_keyword]) + window_length).isoformat()
    else:  # If the observation succeeded
        # Advance window normally according to cadence parameters
        observation_payload = self.advance_window(
            observation_payload, start_keyword=start_keyword, end_keyword=end_keyword
        )
    observation_payload = self.update_observation_payload(observation_payload)
    # Submission of the new observation to the facility
    obs_type = last_obs.parameters.get('observation_type')
    form = facility.get_form(obs_type)(data=observation_payload)
    if form.is_valid():
        observation_ids = facility.submit_observation(form.observation_payload())
    else:
        logger.error(msg=f'Unable to submit next cadenced observation: {form.errors}')
        raise Exception(f'Unable to submit next cadenced observation: {form.errors}')
    # Creation of corresponding ObservationRecord objects for the observations
    new_observations = []
    for observation_id in observation_ids:
        # Create Observation record
        record = ObservationRecord.objects.create(
            target=last_obs.target,
            facility=facility.name,
            parameters=observation_payload,
            observation_id=observation_id
        )
        # Add ObservationRecords to the DynamicCadence
        self.dynamic_cadence.observation_group.observation_records.add(record)
        self.dynamic_cadence.observation_group.save()
        new_observations.append(record)
    # Update the status of the ObservationRecords in the DB
    for obsr in new_observations:
        facility = get_service_class(obsr.facility)()
        facility.update_observation_status(obsr.observation_id)
    return new_observations