Start your own scalable robot automation.

A robot that can draw!
  1. The repeated task with consistent accuracy and quality
  2. Perform multiple tasks parallelly
  3. Connect to legacy system via APIs.
  4. Scalable processing.

Bots don’t know how to deal with an unknown scenario. They don’t even know if they did something wrong.

RPA in action: Drawing symmetrical shape in MS-Paint.

Good practice to design an RPA (robotic process automation)

Task Design

  • Limit the task length and break it into series of smaller preemptable tasks.
  • Smaller decoupled tasks will increase parallelism.
  • Set expectations rigid. Teaching bots about right or wrong is a long term investment. Instead, assert the task.
  • Keep frequent check-point, keep exporting and saving data after each data modification.

Deterministic UI interactions

  • Prefer to use tab-sequence instead of click. Clicking buttons will require to have bookkeeping of coordinates which are more prone to Err.
  • Use short-keys and function-keys, for the above-mentioned reasons.

Consume UI feedback

  • Instead of waiting for a specific hard-coded time task post every action (click, key-stroke), wait till the feedback in UI like the opening/closing of window or dialog box.
    Hence, Avoid the use time.sleep
  • Use active window title as an assertion for flow. For example, in most software ctrl+s should open window with title Save As.
RPA.hotkey(('ctrl', 's'))
# Bad practise: since task can take more than 120 seconds.
# Good practise: time.sleep till active window gets "Save As"
RPA.waitForWindow(title="Save As")

RPA.hotkey(('alt', 's'))
Saving generated file

Consider external factors

Have a comprehensive list of all factors which can affect automation. Make sure the structure has agility for the following factors.

  • Change in UI
  • Change in tab sequences
  • Any window interruptions

Project Structure

    Encapsulation class for PyAutoGUI library. Encapsulation makes the dependency on third-party libraries lose.
    Context-aware implementation for the automation of the app. Store business logic to perform the app-related tasks.
    The main caller of the app module could be either the consumer, worker-pool or as micro-service depending on the infra design.

Connecting with a scalable architecture

The automation tasks are demanding for time and resources. We need the pool of independent VMs self-distributing load to achieve maximum productivity. Each Window VM should be responsible to consume the next task from the queue.

Horizontally scalable worker pool
  1. Find the complete project on GitHub:
  2. Read about PyAutoGUI, automation kit for Windows:



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Arink Verma

Arink Verma


Code, arts, process and aspirations. co-Founded GreedyGame | IIT Ropar. Found at