Software Architect · Data Platform Engineer
Emre
Gülay.
Architecting software without black boxes—transparent to understand, effortless to scale, and secure by design.
Software architect and data platform engineer with more than twenty years of experience across enterprise software, distributed systems and modern data platforms. I favour practical engineering over unnecessary complexity, and treat security, maintainability and operability as architectural decisions rather than later additions.
01 // philosophy
Engineering philosophy
01
Designed to be maintained
The first release is the cheapest part of a system's life. Structure, naming and boundaries are chosen so the architecture can still be read, reasoned about and changed years later, without depending on the memory of whoever built it.
02
Understandable beats clever
An architecture that can be explained simply can also be scaled, secured and changed deliberately. Complexity that does not pay for itself is a cost, so practical engineering wins over unnecessary complexity.
03
Security is decided at the drawing board
Trust boundaries, least-privilege access and data protection are part of the architecture, not a checklist applied before go-live. Secrets belong in a secret store, never in code or configuration.
04
Control stays with the owner
Data lives on infrastructure its owner controls. Whether a system runs on a laptop, a private cluster or a public cloud, and which vendor or model it talks to, is a deployment choice rather than something the architecture imposes.
05
Governed, validated, repeatable
Anything that touches production data is validated before it runs, repeatable when it runs again and traceable afterwards. Arbitrary generated code and one-off manual actions do not belong on that path.
06
Verification is automated
Repetitive engineering and verification work is automated so it happens on every change rather than on request. Tests run against real databases and services, not imitations of them.
07
AI in proportion
A language model is a component within a larger system, not the system itself. It belongs in the parts of a process that genuinely benefit from non-deterministic reasoning, with deterministic code deciding what actually happens.
08
Built for the world as it is
Real data arrives inconsistent, real environments are constrained, and real systems have to be installed, reconfigured and operated long after the design discussions are over. Software that only works in the ideal case is not finished.
09
Show the work
A complete, working implementation argues for an approach better than any document. I publish production-inspired reference implementations rather than fragments, so that engineers, architects and platform teams can see how the pieces fit together.
areas of interest
- Software Architecture
- Distributed Data Processing
- Conversational Analytics & ML Platforms
- AI-powered ETL
- Secure Data Engineering
- Event-driven Systems
- JVM Ecosystem
- Open-source & Source-available Software
stack
- Languages
- JavaPythonSQLTypeScriptDartKotlinLuaBash
- Frameworks & Platforms
- Spring BootSpring AIApache SparkFastAPISvelteKitFlutterNeovimLazyVim
- Data
- PostgreSQLMySQLApache KafkaRabbitMQApache ParquetRedisMinIOJDBC
- Identity, Security & AI
- HashiCorp VaultKeycloakOpenID ConnectAES-GCMAndroid KeystoreLM StudioOpenAI-compatible APIsGemma 4 E2BLiteRT-LM
- Infrastructure
- DockerDocker ComposeGoogle Cloud Platform
- Testing & Quality
- JUnit 5TestcontainerspytestPlaywrightVitest
02 // projects
Reference implementations
Production-inspired reference implementations. The principles stay constant; the approach is chosen per problem.
03 // contact
Get in touch
For conversations about architecture, data platforms or engineering practice, email is the most reliable way to reach me.