# ddz.dev > Legacy modernization and software consulting by Dušan Dželebdžić. I connect decades-old systems to modern infrastructure, migrate what's ready, and keep the rest running. I also fix broken systems and build custom software for industrial settings. 30 years of experience. For larger projects I bring in a network of trusted specialists (full-stack architects, pentesters, frontend developers) while staying the single point of contact and responsibility. ## Services - [Legacy Modernization](https://ddz.dev/): the strongest offer. Keeping critical old systems alive and connected while the business moves forward: integrations with modern infrastructure, data extraction and migration off legacy platforms, and staged retirement. Covers everything from OpenVMS to aging PHP monoliths. - [Custom Development](https://ddz.dev/): custom web apps, mobile apps, and integrations, mostly for industrial settings. Design, build, and ship, backed by 30 years of experience. - [Software Consulting](https://ddz.dev/): emergency fixes, system audits, and ongoing support for production systems, infrastructure, and integrations between systems that don't talk to each other. - [OpenVMS Consulting](https://ddz.dev/openvms/): the deepest legacy end covered. Maintenance, debugging, and modernization of OpenVMS systems. COBOL, RMS, Rdb, DCL, and integration with modern infrastructure. Remote-first, worldwide. ## About - [Homepage](https://ddz.dev/) - [About](https://ddz.dev/about/) ## Blog - [Vercel Web Analytics served its script from a path with no leading slash](https://ddz.dev/blog/vercel-web-analytics-script-path-404/) - [PHP's sprintf pads by bytes, so one † moved my table columns](https://ddz.dev/blog/php-sprintf-pads-by-bytes/) - [aws_instance must be replaced, because Amazon published a new AMI](https://ddz.dev/blog/terraform-most-recent-ami-replaces-ec2-instance/) - ["zsh: bad CPU type in executable" after upgrading to macOS 27](https://ddz.dev/blog/bad-cpu-type-in-executable-macos-27/) - [PostHog cookieless mode said 200 Ok and dropped every pageview](https://ddz.dev/blog/posthog-cookieless-200-ok-events-dropped/) - [Moving a Route 53 hosted zone between AWS accounts](https://ddz.dev/blog/route53-hosted-zone-between-accounts/) - [Tailscale SSH: connection refused, permission denied, and which server actually answered](https://ddz.dev/blog/tailscale-ssh-connection-refused-permission-denied/) - [280 vulnerabilities, one unused package](https://ddz.dev/blog/280-vulnerabilities-one-unused-package/) - [mount.cifs said the credentials were formatted incorrectly. It was right.](https://ddz.dev/blog/mount-cifs-credential-formatted-incorrectly/) - [LocalStack exited with code 55 after a routine image update](https://ddz.dev/blog/localstack-license-activation-failed/) - [The filename that works in bash and breaks in zsh](https://ddz.dev/blog/tilde-in-filename/) - [Dart Sass quietly reordered my CSS](https://ddz.dev/blog/dart-sass-mixed-declarations-reordered-css/) - ["Cannot connect to MySQL using SSL" is a hostname problem](https://ddz.dev/blog/cannot-connect-to-mysql-using-ssl/) - [Never let the LLM write the subject line](https://ddz.dev/blog/llm-subject-line-gmail-threading/) - [Restate's default node name is your container hostname](https://ddz.dev/blog/restate-node-name-container-hostname/) - [Symfony 8 ignores your #[Groups] attribute](https://ddz.dev/blog/symfony-8-groups-attribute-silently-ignored/) - [The database was fine. The cloud around it wasn't.](https://ddz.dev/blog/azure-managed-postgres-connection/) - [Tailscale SSH fails with "tailnet policy does not permit access"](https://ddz.dev/blog/tailscale-ssh-tailnet-policy/) - [Modernization usually means rewriting everything wrong](https://ddz.dev/blog/modernization-usually-means-rewriting-wrong/) - [NAT Gateway is eating your AWS bill](https://ddz.dev/blog/aws-nat-gateway-bill/) - [WordPress fleets on AWS are rotting from the database up](https://ddz.dev/blog/wordpress-fleets-on-aws/) - [The one setting that stops Microsoft Authenticator spam](https://ddz.dev/blog/microsoft-authenticator-spam-notifications/) - [Your server is running two PHP versions (and one of them is lying)](https://ddz.dev/blog/php-cli-vs-apache-mismatch/) - [Stop all running containers in Docker](https://ddz.dev/blog/docker-stop-all-containers/) - [Why Docker?](https://ddz.dev/blog/why-docker/) ## Projects - [Why I built WebKeeper after a decade of running an agency](https://ddz.dev/blog/webkeeper/) - [Biro](https://ddz.dev/blog/biro/) - [iOS Utility](https://ddz.dev/blog/ios-utility/) - [Mozgalice](https://ddz.dev/blog/mozgalice/) - [Tempmarks](https://ddz.dev/blog/tempmarks/) ## Contact - Email: hello@ddz.dev - Phone: +1 929 888 7421