Skip to content

Laravel in Munich

Laravel development for Munich companies

A Laravel development company working with Munich teams. Insurance and industrial buyers, an application older than the people running it, and an on-premise answer to where data lives.

Munich buys engineering through a process, and the process is most of the schedule. Insurers, manufacturers, industrial services and the consultancies that sell into them: procurement, vendor onboarding, a security questionnaire and an architecture board.

The engineering is rarely what makes these projects late.

What slows a Munich project down

A database credential that needs a ticket. A VPN account that needs a sponsor. A security questionnaire that asks where the queue workers run. A firewall rule that one named person signs off, and that person is on leave.

So the first week is spent finding out which approvals have the longest lead time and ordering the phases so that a blocked dependency stops one phase rather than the project. That is not engineering and it determines more about the delivery date than anything that is.

In Munich the systems are in the building

This is the Munich specific that changes architecture rather than detail.

The ERP, the warehouse system, the production scheduler - these frequently run on a machine inside the company's own network, not on a hosted service with a public endpoint. A deployed application cannot reach them, and no library changes that.

There are three honest shapes, and choosing between them is a conversation with the client's IT department rather than a technical preference. A connector installed inside their network that talks outward over HTTPS, so no inbound firewall rule is needed. A private network path, which is cleaner once it exists and exists when their team has time. Or a file exchange, which people who prefer APIs dismiss too quickly - it is observable, a failed run leaves the file sitting there, and a person can open it and see what was wrong.

Whichever it is, the consequence is the same and belongs in the first week: the data in the application is a copy with a delay, and the interface has to say so rather than presenting a stale figure as current. That is the integration question every project here starts with.

Old Laravel applications, and why not to restart

A good share of this work is an application between five and fifteen years old that the business depends on, built by people who have gone.

The instinct is to rewrite. It is almost always wrong, and the reason is not sentiment: years of business rules are encoded there and nowhere else - the exceptions for three large customers, the workaround for what a partner system does on Tuesdays, the rounding rule somebody argued about in 2019. None of it is documented, and a rewrite rediscovers it one bug report at a time from the people who depend on it.

Being several versions behind has a measurable cost, and the comparison between that number and a rewrite is usually not close. The honest exception is a data model that is wrong rather than code that is old, and we will say so when that is the case.

A Munich on-premise deployment has no managed services

Inside the building there is no managed queue, no managed object store, no managed search and no platform that redeploys on a push. There is a virtual machine, a change window, and an operations team with their own procedures.

That is workable and it has to be designed for rather than discovered. Every managed service the application would otherwise lean on becomes a component somebody has to run, so the choice is made deliberately - Redis on the same host, or the database as the queue backend; the filesystem behind the same storage abstraction that would have pointed at object storage; full-text search in Postgres rather than a separate engine, unless the requirement genuinely justifies the second thing to operate.

Writing against abstractions rather than against a provider is what makes that a configuration choice instead of a rewrite, and it is the same discipline that keeps the application movable later. The cost is small; the alternative is an application that assumes a platform and has to be unpicked to run anywhere else.

Deployment is theirs. Which means the artefact we hand over has to be something their process can take - a documented, repeatable sequence that does not require us to be present, runs within a change window, and can be reversed by whoever is on duty. Migrations that are safe to run before the new code arrives, and a rollback that does not depend on a database restore, are what make that possible.

Backups and monitoring belong to them as well, and the handover is not complete until somebody on their side has restored from a backup once, in front of witnesses. An untested backup is a plan, not a backup.

Upgrading a Munich Laravel application that is five versions behind

The application works, it is years out of support, and the question is whether to upgrade it or replace it. Upgrading is almost always the right answer and almost always underestimated.

The order is fixed by the dependencies rather than by preference. PHP first, because the framework version you are heading for requires it and the extension ecosystem will complain. Then one framework version at a time, running the test suite between each. Skipping intermediate versions is tempting and removes the only thing telling you which change broke something.

Which presumes there is a test suite, and in an application of this vintage there usually is not. Writing one from scratch is not the task; putting a test around the handful of paths that generate the revenue is, and that is a week rather than a quarter. Without it the upgrade is a series of changes nobody can verify, and it will be abandoned halfway with the application in a worse state than it started.

Packages are where it stalls. An abandoned package with no version supporting the target framework has to be replaced, vendored or removed, and finding those before starting - rather than at version four of five - changes the estimate substantially. That audit is a day's work and it is the difference between a plan and a hope.

The thing worth saying to a sponsor who is weighing this against a rewrite is that the upgrade preserves the behaviour the business depends on, including the parts nobody has documented. A rewrite rediscovers them one complaint at a time.

The paperwork is part of it

The contracting entity is Codefacture Yazılım A.Ş., registered in Türkiye, invoicing in euros by bank transfer, with no Turkish VAT under the export-of-services exemption.

A security questionnaire will ask where data rests, who the sub-processors are and what happens at the end of the engagement. Those are answerable and faster answered before scoping than during it.

The regulatory ground sits on the Germany market page.

The regulatory and commercial ground for this city is on the Germany market page.

Frequently asked questions

Our ERP runs on a server in our building. Can you integrate with it?
Yes, and the shape is decided by that fact rather than by the API. Nothing on the public internet can reach a machine on your network, so the integration is a connector inside it talking outward, a private network path, or a file exchange. Which of the three is a conversation with your IT department in week one, not week nine.
Can you work with our procurement and security process?
Yes, and we plan around it. In the first week we ask which approvals take longest - supplier onboarding, the security questionnaire, access provisioning, the one person who can approve a firewall rule - and phase the work so a blocked dependency stops a phase rather than the project.
The application is several versions behind. Upgrade or rewrite?
Almost always upgrade, and we will show the arithmetic rather than assert it. Years of business rules live in that code and nowhere else, and a rewrite rediscovers them through bug reports. The honest exception is a data model that is wrong rather than code that is old.
Will you sign a data processing agreement with a Munich entity?
Yes. The contracting entity is Codefacture Yazılım A.Ş. in Türkiye, and that is the name on the agreement. Questions about sub-processors, where data rests and what happens at the end are answerable, and faster answered before scoping than during it.
Call us+1 848 272 7583WhatsApp+90 850 308 5436Emailinfo@codefacture.comContact page