code: protected String getMicroservice(ServiceSummary summary) throws ActivityException {
          // configured through attribute - attribute default is supposed to be $microservice
          String microservice = getAttributeValueSmart("Microservice");
          if (StringHelper.isEmpty(microservice)) {
              String microserviceVarName = getAttribute("microserviceVariable", "microservice");
              if (getMainProcessDefinition().getVariable(microserviceVarName) == null) {
                  microservice = getMicroserviceById(summary);
                  if (microservice == null && summary.getChildServiceSummaryList() != null) {
                      for (ServiceSummary child : summary.getChildServiceSummaryList()) {
                          microservice = getMicroserviceById(child);
                          if (microservice != null)
                              break;
                      }
                  }
                  if (microservice == null) // configured through activity name/label
                      microservice = getActivityName();
              }
              else {
                  microservice = getParameterStringValue(microserviceVarName);
              }
          }
          if (microservice == null)
              throw new ActivityException("Cannot discern microservice");
          return microservice;
      }
docs: Standard behavior is to read from a String variable (defaultName='microservice').
  If no variable is defined, fallback is the 'microservice' design attribute.