in

Software development blog

Field notes from the Puncharsoft team on SAP, enterprise application development, integration and digitalization.

Table grouping the 12 root causes of delay in software projects

Why Software Projects Are Late: 12 Root Causes and Fixes

A delay rarely means 'the developers are slow'; the result that shows in month six is usually caused by a decision made — or not made — in month one. Twelve root causes across scope, decisions, team and external dependencies, the early warning sign and the fix for each, and four indicators that reveal a delay weeks in advance.

Metrics, traces and logs flowing from a Spring Boot application through Prometheus, Tempo and Loki into Grafana

Spring Boot Observability: OpenTelemetry and Grafana Setup

Having a log file is not observability; being able to answer 'why is this request slow' in production within minutes is. Micrometer metrics in Spring Boot 3, distributed tracing with OpenTelemetry, log correlation with traceId, Grafana dashboards and SLO-based alerts, with setup steps and code.

KVKK-compliant architecture diagram showing data inventory, encryption, retention-deletion and access-log layers

KVKK-Compliant Software Design: Privacy by Design in Turkey

Compliance with Turkey's data protection law (KVKK, closely aligned with GDPR) is achieved by design, not by a privacy notice. How the personal-data inventory maps to code, data minimization and field-level encryption, retention periods and automated deletion, access logs, data-subject requests and breach notification, with Spring Boot examples.

Flow showing a repeated request with the same Idempotency-Key answered from the stored response

Idempotent API Design: Safe Retries with Idempotency Keys

Timeouts, mobile retries and gateway retries send the same request twice; the result is duplicate orders and duplicate payments. How the Idempotency-Key pattern is implemented server-side, natural idempotency with business keys, conditional updates with ETag and the equivalent for message consumers, with Spring Boot code.

Checklist of 20 questions for choosing a software development company

How to Choose a Software Development Company: 20 Questions

The wrong software vendor is a project's most expensive mistake, and it can usually be spotted in the first meeting. Twenty questions in five groups — experience, process, technical approach, contract, post-delivery — with what a good answer looks like and which answers are red flags.

Context map showing the relationships between the sales, accounting and logistics bounded contexts

Domain-Driven Design: Bounded Contexts and Aggregate Rules

In most projects DDD is reduced to naming entities and repositories; its real value is strategic design. How to draw bounded contexts in an enterprise system where 'customer' means four different things, the aggregate rules, value objects and domain events, with Spring Boot examples.

Diagram of the e-invoice flow between an enterprise application, a private integrator and the Turkish Revenue Administration

Turkish e-Invoice (e-Fatura) Integration: Architecture Guide

e-Invoice integration is the part of enterprise projects in Turkey that gets postponed and ends up delaying the whole project. We explain the e-Fatura, e-Arşiv and e-İrsaliye concepts, a reference architecture built on a private integrator's API, the critical points such as numbering and status tracking, and the pitfalls we see most often in the field.

Comparison of the G1, ZGC and Shenandoah garbage collectors on pause time and throughput

Choosing a JVM Garbage Collector: G1, ZGC and Shenandoah

For most Spring Boot applications the default G1 is the right choice; but a p99 latency target, a heap above 32 GB or a 512 MB container changes the decision. We cover JVM memory regions, which workloads G1, ZGC, Shenandoah, Parallel and Serial win on, container memory settings and measuring with GC logs.

Test pyramid showing unit, integration, contract and end-to-end layers

Spring Boot Test Strategy with Testcontainers: 4 Layers

The tests exist, yet production bugs get through — because H2 doesn't behave like PostgreSQL and mocks don't verify integrations. A four-layer test strategy for enterprise Java: unit tests, Testcontainers against a real database, contract tests and a handful of end-to-end tests, with ratios, a test-data approach and CI time targets.