We are looking for a Senior Software Engineer who knows how to get things done.
We care less about which programming languages or frameworks you have used and much more about your software engineering fundamentals, problem-solving ability, technical judgment, and willingness to get your hands dirty.
You may come from PHP, C++, Java, Python, Ruby, TypeScript, Go, C#, or another technology background. What matters is your ability to understand a problem, navigate an unfamiliar codebase, make sound engineering decisions, and turn ideas into reliable software.
Our environment is diverse. It includes PHP, TypeScript, modern web technologies, APIs, integrations, cloud infrastructure, and AI-powered systems. We don't expect every engineer to know every technology we use.
We expect senior engineers to be able to learn quickly, understand systems deeply, and use the right tools to solve the problem in front of them.
This is a hands‑on role.
You will design solutions, write code, investigate problems, make architectural decisions, improve existing systems, and take ownership of features and projects from idea to production.
We are not looking for someone who only discusses architecture, manages tickets, or works inside a narrow technical boundary.
We are looking for someone who can understand the problem, make decisions, build the solution, and make it work.
Responsibilities
- Take ownership of technical problems and drive them from discovery to production.
- Design and implement reliable, maintainable, and scalable software solutions.
- Work hands‑on across different parts of the system when necessary, including back end, front end, APIs, integrations, infrastructure, tooling, and AI-related components.
- Quickly understand unfamiliar codebases, systems, libraries, and technologies.
- Break complex problems into simple and pragmatic solutions.
- Debug difficult issues, investigate root causes, and solve problems beyond the obvious symptoms.
- Make thoughtful architectural decisions while avoiding unnecessary complexity.
- Improve and modernize existing systems, not just build new ones.
- Design abstractions when they create real value, without overengineering.
- Collaborate closely with product, AI, design, infrastructure, and other engineers.
- Review code and contribute to improving the overall quality of our engineering practices.
- Share knowledge and support other engineers when necessary.
- Take responsibility for the quality, reliability, and maintainability of the software you deliver.
- Balance engineering quality with the ability to ship valuable software.
What We Are Looking For
- Strong software engineering fundamentals.
- Significant experience building and maintaining production software.
- Strong problem‑solving and analytical thinking.
- Ability to work independently and make sound technical decisions.
- Ability to understand complex systems and unfamiliar codebases.
- Strong debugging and troubleshooting skills.
- Experience working across different layers of a software system.
- Solid understanding of APIs, databases, application architecture, testing, performance, and software design.
- Understanding of concepts such as modularity, dependency management, concurrency, distributed systems, event‑driven architectures, and system integration.
- Ability to design software that is understandable, testable, maintainable, and resilient.
- Ability to learn new languages, frameworks, libraries, and tools quickly.
- Pragmatic engineering mindset and good technical judgment.
- Ability to distinguish between necessary complexity and accidental complexity.
- Strong communication skills and ability to collaborate effectively in remote‑first teams.
- Professional proficiency in English.
We are intentionally not hiring for a specific technology stack. Our production environment spans multiple technologies and generations of software. Today, our ecosystem includes technologies such as:
- PHP
- TypeScript
- NestJS
- React
- Relational databases
- APIs and third‑party integrations
- Cloud infrastructure
- Containers
- AI and LLM‑powered applications
We believe that a strong senior engineer should be able to move between technologies, understand existing systems, learn what is necessary, and choose the right approach for each problem.
We would rather hire an excellent software engineer who needs to learn part of our stack than someone who knows every framework we use but lacks strong engineering fundamentals.
Nice to Have
- Experience building distributed systems, microservices, or event‑driven architectures.
- Experience designing and consuming APIs and integrations.
- Experience with cloud platforms such as AWS, GCP, or Azure.
- Familiarity with Docker, Kubernetes, or other container technologies.
- Experience with CI/CD and modern software delivery practices.Experience with observability, monitoring, logging, and production troubleshooting.
- Experience improving or modernizing legacy systems.
- Experience building AI‑powered products or integrating LLMs into production systems.
- Experience working with multiple programming languages or technology stacks throughout your career.
- Experience in environments where engineers have significant autonomy and ownership.
The Kind of Engineer We Value
We value engineers who solve problems, not just tickets. Engineers who are comfortable saying: "I don't know yet, but I'll figure it out."
We value people who can move naturally between understanding the business problem, discussing architecture, reading existing code, implementing a solution, debugging production issues, and improving the system afterward.
We value engineers who:
- Take ownership.
- Are curious.
- Ask good questions.
- Challenge assumptions when necessary.
- Prefer simple solutions over unnecessary complexity.
- Understand trade‑offs.
- Care about the quality of what they build.
- Are comfortable working outside their usual technology stack.
- Understand that writing code is only one part of solving a software problem.
- Can operate with autonomy without losing the ability to collaborate.
- Focus on outcomes rather than simply completing assigned tasks.
At the end of the day, we are not looking for someone who matches our stack. We are looking for someone who can help us build great software.