I'm a freelance software engineer/consultant. My passion is Frontend Development, but software is about making promises to your users and keeping them, which is why I excel in Fullstack roles. I help motivated teams deliver exceptional experiences. I don't do permanent positions.
19 years of experience across the stack:
- Frontend: TypeScript, JavaScript, CSS, HTML
- Frameworks: React, Vue.js, Angular, Svelte, Next.js, Remix, Solid
- State & Data: RxJS, GraphQL, Apollo, Relay
- Backend: Node, Express, Fastify, Serverless
- Testing: Vite/Vitest, Playwright, Jest, Cypress, Selenium
- Functional: Elm, ReScript/Reason, ClojureScript
- Elixir Ecosystem: Elixir/Erlang, Phoenix, Ecto, Absinthe
- JVM: Kotlin, Scala, Java, Spring
- Python: Flask, Django
- PHP: Symfony, Zend
- Databases: PostgreSQL, MySQL, MongoDB
- DevOps: Kubernetes, Docker, AWS, Google Cloud Platform, Azure
- Methodologies: FP, OOP, DOP, Immutable Data
Technologies don't matter much. Your tools should solve your problems, and nowadays they all do. There are very few right and wrongs, almost everything is a tradeoff.
Pragmatism, Empathy and Ownership are non-negotiable values.
Unblocking your fellow programmers, product owners and project managers is your most important daily task.
Complexity is the cause of all frustrations in programming. Avoid it. It's usually a sign things are not fully understood yet.
Maintaining software is giving love to what makes you money right now.
Communication is unlikely, time-consuming and can be frustrating. Get it right anyway.
Things can be known and understood.
Knowledge must be pulled in, no one hands it to you.
Those weird edge cases aren't deficiencies — they're human idiosyncrasy. Embrace them.
If you want something to change, the best way is a PR.
Fast feedback loops come first: This means comprehensive tests, fast builds, frequent releases, a working solution for test data and testing environments, linting, static types, automatic formatting. Also POs, UX specialists, QA engineers and OPs guys that are always happy to talk to you.
Do TDD when you know exactly what you want upfront. Accept that you rarely do.
Document. Think READMEs instead of wikis. Keep them next to your code. Document decisions, not implementations. Make onboarding effortless. Accept that true understanding cannot be gained from text.
The omnipresence of software means that it guides and thus limits in a very real way what people can say or do. It is your responsibility to enable them to achieve what they want. They will gladly pay you money for it. They most often will not know what they want until they see it. This should not be a cause for frustration, but iteration - preferably with solid metrics.
If you are interested in hiring me, you can contact me through my website. Link is in the sidebar.




