code: func runScale(cmd *Command, args []string) {
  	appname := mustApp()
  	message := getMessage()
  	if listMode {
  		listScale(appname)
  		os.Exit(0)
  	}
  	if len(args) == 0 {
  		cmd.PrintUsage()
  		os.Exit(2)
  	}
  	todo := make([]heroku.FormationBatchUpdateOpts, len(args))
  	types := make(map[string]bool)
  	for i, arg := range args {
  		pstype, qty, size, err := parseScaleArg(arg)
  		if err != nil {
  			cmd.PrintUsage()
  			os.Exit(2)
  		}
  		if _, exists := types[pstype]; exists {
  			// can only specify each process type once
  			printError("process type '%s' specified more than once", pstype)
  			cmd.PrintUsage()
  			os.Exit(2)
  		}
  		types[pstype] = true
  
  		opt := heroku.FormationBatchUpdateOpts{Process: pstype}
  		if qty != nil {
  			opt.Quantity = qty
  		}
  		if size != "" {
  			opt.Size = &size
  		}
  		todo[i] = opt
  	}
  
  	formations, err := client.FormationBatchUpdate(appname, todo, message)
  	must(err)
  
  	sortedFormations := formationsByType(formations)
  	sort.Sort(sortedFormations)
  	results := formatResults(formations)
  	log.Printf("Scaled %s to %s.", appname, strings.Join(results, ", "))
  }
docs: // takes args of the form "web=1", "worker=3X", web=4:2X etc