Engineering Blog · Konrad Chmielinski
Designing, building, and maintaining enterprise-grade automation workflows — from first process analysis to long-term production stability.
RPA Engineering
Python · Jenkins · AA A360
End-to-end delivery
Katowice, PL · Remote OK
Building an RPA bot is straightforward. Building one that runs reliably in production for months, handles every edge case, recovers from failures without human intervention, and stays maintainable as business rules evolve — that is the actual job.
I have designed and delivered end-to-end automation workflows across two large enterprises, three RPA platforms, and a wide range of process types — from financial data consolidation to HR contract generation to compliance reporting. This post covers my full workflow methodology: how I scope, design, build, test, deploy, and maintain production RPA solutions.
30+
production bots designed and delivered across both employers
3+
RPA platforms: Python + Jenkins (AM), AA A360 / A11 + SAIO (ING), UiPath (certified)
5yr
end-to-end RPA delivery experience
Global
bots serving teams in PL, LU, IN, FR, NL, BE, CA, US, BR, AR, SK
across worldwide
Every bot I deliver goes through the same lifecycle — whether it is a two-day Python script or a multi-week AA A360 workflow spanning multiple systems.
Discover
process analysis
→
→
Build
develop + unit test
→
→
→
→
The most important work in any RPA project happens before development starts. A poorly scoped process leads to bots that handle 80% of cases and break on the other 20% — which in production means the business users still do manual work, just with less predictability.
My scoping approach: walk the process end-to-end with the process owner, document every decision point and exception path, identify all input formats and edge cases, and define the exception handling strategy before writing any code. The output is a Process Definition Document (PDD) that the business signs off on before development begins.
Process Definition Document (PDD)
Exception path mapping
Input format inventory
Business stakeholder interviews
Process flow diagramming
Edge case documentation
Automation feasibility assessment
ROI estimation
Not every process should be a single linear bot. Complex workflows are modular — split into reusable components with clean interfaces, so individual modules can be tested, updated, and reused across projects. I apply the following design patterns consistently across all platforms.
Pattern
Dispatcher — Performer
Separate queue-feeding logic from processing logic. Enables parallel execution and clean retry handling.
Pattern
Modular components
Reusable sub-workflows for common operations: login, file download, data validation, report generation.
Pattern
Exception lanes
Every workflow has an explicit exception path — failed items go to a human review queue, never silently dropped.
Pattern
Idempotent design
Bots can be safely re-run on the same input without duplicating output — critical for financial and HR processes.
Production bots fail. SAP sessions time out. Web portals return unexpected page states. Excel files arrive with missing columns. The difference between a demo bot and a production bot is how gracefully it handles these failures — and how quickly it recovers without human intervention.
01
Retry with backoff
— transient failures (network timeouts, locked files) are retried automatically with exponential backoff before escalating to an exception.
02
Session recovery
— long-running bots detect session expiry (SAP, web portals) and re-authenticate automatically without restarting the full workflow.
03
Partial completion tracking
— large batch processes track which items completed successfully, so a mid-run failure only retries the remaining items, not the full batch.
04
Structured logging
— every action, decision, and exception is written to a structured log. Post-run reports are automatically generated and sent to process owners.
05
Human exception queue
— items the bot cannot process are routed to a human review queue with context, never silently skipped or dropped.
# Retry with backoff pattern used in production bots
import
time, logging
def
with_retry(fn, retries=3, backoff=2):
for
attempt
in
range(retries):
try
:
return
fn()
except
Exception
as
e:
logging.warning(
f”Attempt {attempt+1} failed: {e}”
)
if
attempt + 1 == retries:
raise
time.sleep(backoff ** attempt)
Bot deployments at ArcelorMittal run entirely on Python + Jenkins CI/CD pipelines — code review, automated testing, and staged rollout before production promotion. Bots are triggered in three ways: on a scheduled basis via Jenkins cron, manually on demand, or automatically via an inbound email containing input data or via Microsoft API (Power BI integration). At ING, Automation Anywhere A360 / A11 handled orchestration — used to trigger and manage both AA bots and Python-based standalone bots running on the SAIO platform.
Jenkins CI/CD
Python standalone bots
Git branching strategy
Staged rollout
Email trigger (inbound data)
Microsoft API / Power BI trigger
Scheduled cron (Jenkins)
Manual on-demand trigger
Environment config management
Rollback procedures
Deployment documentation
Code review gates
A deployed bot without monitoring is a liability. I instrument every production bot with structured logging, run-level reporting, and alerting on failure. Process owners receive automated summary emails after each run — items processed, exceptions raised, and actions required. This keeps the business informed without requiring them to dig into technical logs.
| Layer |
Tool |
What it covers |
| Orchestration (AM) |
Jenkins |
Scheduling, run history, deployment pipeline, cron & trigger management |
| Orchestration (ING) |
AA A360 Control Room |
Bot health, queue status, credential management for AA & Python bots |
| Logging |
Python logging / custom |
Structured per-item logs, exception traces, timing data |
| Alerting |
Email via Graph API / SMTP |
Run summary to process owner, failure alerts to dev team |
| Trigger — email |
Inbound email parser |
Bot triggered automatically when email with input data arrives |
| Trigger — API |
Microsoft API / Power BI |
Bot triggered via MS API integration from Power BI reports |
| Version control |
Git |
Full history of all bot code, rollback capability |
Every bot I deliver includes a full technical documentation package: Process Definition Document, Solution Design Document, operational runbook, and handover notes. This is not optional — undocumented bots become unmaintainable the moment the original developer leaves the team. At ArcelorMittal, documentation is a delivery requirement, not an afterthought.
Process Definition Document (PDD)
Solution Design Document (SDD)
Operational runbook
Exception handling guide
Deployment checklist
Handover documentation
Change log
Confluence / SharePoint
ING
ING Hubs Poland (GKYC) — CDD Financial Risk Analysis Report Automation
Production bot generating financial risk analysis reports on entities as part of Customer Due Diligence (CDD) processes. Data sourced from a dedicated CDD database compiled from banking intelligence and government sources. Bot queries, aggregates, and processes the available data to produce structured risk reports supporting compliance analysts in assessing the financial risk profile of investigated entities.
ING
ING Hubs Poland (GKYC) — Account & Entity Holder Intelligence Report Automation
Production bot aggregating data from multiple heterogeneous sources — internal databases, banking systems, and restricted bank-grade resources — to generate comprehensive KYC intelligence reports on account holders and proxy holders of accounts and legal entities. Reports cover estimated asset holdings and financial capacity, as well as a structured assessment of the relationship type between the holder and the entity. Designed to handle data inconsistencies across sources and produce audit-ready output for compliance and due diligence workflows.
AM
ArcelorMittal BCoE Poland — Global Invoice Duplicate Detection
Designed and built an automated workflow analysing over five years of historical invoice data from ArcelorMittal entities worldwide to identify potential duplicates and prevent approval of future duplicate payments. The dataset spans global operations across all business units and regions. Idempotent design critical — re-runs must never create false duplicate flags on already-processed transactions.
AM
ArcelorMittal BCoE Poland — Global Market Forecasting
Bot consolidating Excel data from all global business units into a centralised database for multi-year market trend prediction and investment profitability analysis. Dispatcher—Performer pattern with per-unit exception handling, automated reporting, and web application write-back.
AM
ArcelorMittal BCoE Poland — SAP Invoice Processing Automation
Production bot automating the processing and entry of invoice data into SAP. Reads structured invoice data from Excel source files, validates records, and performs the corresponding SAP data entry operations. Designed with robust error handling to manage inconsistent input data and ensure reliable, auditable processing across high invoice volumes.
AM
ArcelorMittal BCoE Poland — VBA to Python Migration: Cylindrical Products Order & Invoice Processing
Migration of a legacy VBA script to a production-grade standalone Python solution handling order entry and invoice data processing for cylindrical steel products. Rewrote business logic in Python with proper error handling, structured logging, and maintainable architecture — eliminating the fragility and maintenance overhead of the original macro-based approach.
AM
LUX
ArcelorMittal Luxembourg — REX Portal: Statistical Damage Assessment Automation
Production bot automating data entry and operations in the REX compliance portal, focused on purely statistical incident data. Handles input, validation, and manipulation of quantitative records including damage assessment scores and financial loss estimations. High data accuracy critical — statistical outputs feed into group-level safety analysis and investment decisions.
AM
LUX
ArcelorMittal Luxembourg — SARA Portal: Incident Report Automation
Production bot automating data entry into the SARA compliance portal for workplace incident and accident reporting. Processes descriptive incident data alongside photographic evidence and supporting attachments documenting each event. Bot handles structured form population, photo upload, and document attachment — ensuring complete and consistent incident records across all reporting entities.
AM
ArcelorMittal BCoE Poland — HRS Employee Suspension Automation
Production bot automating the suspension of employee functions within SAP. Processes suspension requests, applies the relevant status changes and access restrictions across HR records, and generates the required documentation. Designed with idempotent logic — re-runs on the same case cannot produce duplicate or conflicting record states.
AM
ArcelorMittal BCoE Poland — HRS Employee Offboarding Contract Automation
Production bot automating generation of employment termination contracts and related HR documents. Processes entity and financial data, populates SAP records, and generates the full document package required to close an employee’s contract. End-to-end delivery: process scoping with global HR stakeholders → PDD → bot development → UAT → Jenkins deployment → documentation handover.
AM
ArcelorMittal BCoE Poland — HRS Employee Onboarding Contract Automation
Production bot automating generation of employment commencement contracts for new hires. Extracts data from HR and financial source documents, creates SAP entries, and produces the full onboarding contract package. Designed to handle multiple entity types and country-specific contract variations across global business units.
AM
ArcelorMittal BCoE Poland — HRS Training Agreement Automation
Production bot automating generation of employee training agreements. Processes training data inputs, generates the required agreement documents, and updates SAP accordingly. Modular design allows independent handling of different training types and contract templates across regions.
ING
ING Hubs Poland (GKYC) — SAIO GUI Bot & Platform Promotion
Designed and implemented a desktop automation bot distributed directly to end-user physical machines via ING’s proprietary SAIO platform — running on analysts’ own computers rather than virtual machines or dedicated automation servers. With a single click, the bot prepared the user’s desktop environment for a specific task — launching and arranging the required applications, navigating to the correct screens, and partially pre-filling data to reduce manual input. Eliminated repetitive setup steps at the start of each work item, allowing analysts to focus immediately on the task itself. Also actively promoted SAIO adoption within the team — prepared and delivered training sessions and best-practice documentation to upskill colleagues in RPA workflow design.
Python (standalone bots)
Jenkins CI/CD
Git
Automation Anywhere A360
Automation Anywhere A11
SAIO (ING proprietary)
UiPath (certified, no production)
AA Control Room
AA Credential Vault
Pydantic (data contracts)
Pandas (data processing)
Microsoft Graph API (alerting & triggers)
Power BI API integration
Inbound email trigger
SAP GUI Scripting
Selenium
Process Definition Document
Solution Design Document
Dispatcher—Performer pattern
Exception lane design
Structured logging
Retry with backoff