Technology · Language

Python for data, automation and connecting AI models

Python is not an end in itself here, and it is not an application language. It is the tool for everything that accumulates as data around an application: preparing stock records, migrating legacy systems, running analyses, automating recurring tasks, connecting language models. Our clients' core applications run on PHP and Symfony. The work on the data before and after is done in Python.

for data and automation

What is Python?

At Sharpness, Python is the language for data and automation — not the language the core applications run in.

What we use Python for

The most common trigger is a move. A shop changes system, an ERP delivers article data in a format nobody maintains any more, a legacy system releases its records only as an export. We write those pipelines in Python: read in, check, normalise, reconcile, log. The import itself is rarely the problem. The problem is the records that do not fit the schema and that someone will still miss.

The second area is automation. Reports that someone otherwise clicks together by hand every Monday. Reconciliation between shop, ERP and accounting. Checks that should raise a flag before the customer does. For some years now, connecting language models has been added: reading documents, classifying content, pre-structuring text, writing results back into an existing system. Python has the libraries for these tasks that do not exist elsewhere, and that is why we choose it.

How we work with it

Every script that is meant to run more than once gets a fixed environment. Dependencies are pinned, execution runs in a container, credentials do not sit in the code. For data work we use pandas, for connections requests and the respective SDKs, for web endpoints FastAPI. Ruff handles formatting, mypy the type checking where it pays off. None of this is original. That is exactly why it still works when someone else looks into it two years later.

Migration scripts are written so they can run more than once without doing damage. First a pass with no write access, showing what would happen. Then the real run, with a log. Data preparation is versioned like application code, because the question “which rule produced this value” will certainly be asked six months later. Anyone who plans data work as a one-off is planning it twice.

Limits, and when we advise against it

Python is not our language for web applications. When a shop, a portal or a business application is built, we build it with PHP 8 and Symfony — not because Django is bad, but because our operations, our hosting and our experience are there. Building an application in a language that is only second choice in the house takes its revenge in the third year, when someone has to change it.

Data tasks have their limits too. If an analysis only pulls numbers together from a database, SQL is the shorter answer. If an automation is tied to the shop and needs its rules, it belongs in the application as a command, not in a separate script. And every Python service that runs permanently is another piece of operations: updates, monitoring, responsibility. We say that beforehand, not at handover.

Frequently asked questions

What is Python good for in web projects?

In web projects, Python is suited above all to everything that accumulates as data alongside the application: migrations, imports, analyses, automation and connecting language models. For the application itself — shop, portal, business software — we use PHP 8 and Symfony. That separation is deliberate: data work makes different demands on tools and runtime than an application that is operated in the browser every day.

Can you take over existing Python scripts?

Yes, we take over existing Python scripts, but we first check them for dependencies, Python version and credentials left in the code. Scripts that have grown over time often run on exactly one machine, and nobody knows which library version is installed there. The first step is therefore usually a reproducible environment in a container, then tests for the places where data is changed. Only after that do we touch the business logic.

Why not build everything in Python?

Because an application belongs where the operational experience is — at Sharpness that is PHP 8 with Symfony, plus Shopware 6 and TYPO3. Python remains the tool for data and automation. A second application language in the house means a second deployment route, a second update cycle and a second set of responsibilities. That is not a technical argument against Django, it is an operational one against unnecessary variety.

Python: existing system or new build?

We also take over systems that were built elsewhere — after a look at the code and the hosting.

What else we build with

Call Start a project