Gerard Bosch
Software Engineer | Contractor (Remote Worldwide)
In Barcelona, Spain
General information
Introduction
📜 See my up-to-date RESUME PDF at: https://resume.gerardbosch.xyz
Enthusiast about Functional Programming, software engineering/craftsmanship, clean code, architectural/design patterns and programming languages theory. Really concerned about the code itself, its readability, expressiveness, and conciseness. Continuous improvement advocate and continuous refactor and code reuse as a mantra. Accidental-complexity fighter. Proactive and self-taught. Like learning 🧑🏫, love crafting ❤️.
My background is mostly about designing/implementing backend systems and APIs. I have good analysis skills and can break down requirements well and transform that into code.
I have a proven track record of driving innovation in various companies and projects by enhancing workflows and code quality. My approach includes implementing best practices, conducting thorough code reviews, and challenging the status quo. I am deeply passionate about decentralization, Web3, and the Internet freedom.
My best practices
I never treat the code as if no one (myself included) would ever have to read it again.
Some of the practices and values I try to follow:
- After implementing something that works, I refactor my own code to keep it expressive & concise —and kind for other coworkers.
- I remove redundancy as much as I can, apply the DRY principle and extract utilities into libraries.
- Conduct thorough code reviews.
- I foster the use of expressions over statements: Expressions reduce, and evaluate to a value, instead of using convoluted flow control with multiple exit points. Reducing exit points reduces cognitive load. I prefer languages that facilitate/encourage this.
- I try to model things in a precise way to avoid ambiguity. Again, I prefer languages with advanced and rich type systems, which favor this.
- I use TDD. I believe that a test is the first client of the code and that helps with the design (write & model from the call-site).
- I apply Domain Driven Development and Hexagonal/Clean Architecture.
- I try to avoid side-effects, and use immutability and functional programming principles to enable local reasoning in the code. I prefer languages that are more suited for this.
- I am passionate and naturally inclined to improving workflows and enhancing the developer experience.
- I like learning in public, and sharing/building knowledge.
- Programming with types (let the compiler do the checks for you; “types as integration tests” —at compile-time; strong semantics; remove run-time surprises).
- Process automation: Repetitive things deserve to be automated (for productivity and health 🙂).
- Lean toward the Principle of Least Privilege.
Generally speaking, I am against:
- "String"-based programming.
- Adding redundancy instead of refactoring/redesigning.
- Untested code.
- Exception-based flow control.
- Uncontrolled, hidden or deeply nested side-effects.
- Unprincipled code, unprincipled designs, unprincipled stuff.
- [... probably more things 🫠]
What I'm best at?
- Identifying areas for improvement (in code & workflows).
- Refactoring, refining or redesigning code (also pre-existing).
- Paying attention to language, wording, and semantics (in the code and documentation).
- Attention to detail, in general.
My skills
Languages
Interesting facts about me
Curiosity and persistence (skill set)
I believe my strongest skill set is a combination of curiosity and persistence. Curiosity drives me to explore and learn different paradigms, helping me understand what's happening under the hood. This deep understanding is crucial in software engineering because it prevents mistakes that often arise from a lack of knowledge about the tools we're using.
On the other hand, persistence helps me tackle challenges head-on. When I encounter a problem or have the intuition that something can be done more efficiently, my persistence kicks in. I either reach out to others for insights or dive into my own research to find a solution.
This combination has been beneficial throughout my career. Curiosity ensures I'm always learning and growing, while persistence helps me push through obstacles and find better ways to achieve our goals.
What I'm against in job interviews
Some “standard” interview processes focus on testing what you DON'T know —or what you're NOT great at (yet)— instead of checking what you DO KNOW, what's your professional motivation; and how your knowledge and attitude could enrich the organization/team, and provide value.
My vision is that an interview should check how the candidate could contribute with its interest, motivation, and knowledge.
My perfect job
I thrive on engaging with innovative and challenging projects that push the boundaries of technology. I am particularly drawn to opportunities where I can apply my expertise in functional programming and modern, expressive languages to deliver impactful solutions.
Secondly, I am passionate about software architecture and design, especially in designing and implementing robust backend systems and APIs. I find great satisfaction in applying clean architecture principles such as DDD and Hexagonal Architecture to ensure scalability and maintainability.
Thirdly, continuous learning and growth are crucial to me. I am eager to expand my knowledge in functional programming principles, type and effect systems, and emerging technologies such as Blockchain and Web3.
Moreover, I value a collaborative and supportive work environment where I can learn from talented peers and contribute meaningfully to team efforts. Mentoring and sharing knowledge with junior team members is something I find rewarding.
Additionally, I prioritize writing clean, readable, and maintainable code. I advocate for continuous improvement through rigorous code reviews, refactoring, and adherence to coding standards and best practices.
Furthermore, I seek a role that offers opportunities for professional development and ownership of projects. I am eager to take initiative, contribute to project success, and grow both personally and professionally in a supportive and autonomous environment.
Lastly, I highly value work flexibility, particularly regarding working hours. I thrive in environments that offer the flexibility to manage my schedule effectively, ensuring both productivity and a balanced work-life integration. Whether collaborating with a global team across time zones or structuring my day for maximum efficiency, this autonomy allows me to meet project deadlines while maintaining a healthy work environment.
Technologies and tools
I master
- Bash
- Docker
- Git
- Gradle
- Java
- Kotlin
- Kubernetes
- Linux
- Maven
- OpenShift
- Python
- Scala
- Spring
- Spring Boot
- Spring Cloud
I want to work with
- Haskell
- Kotlin
- Rust
- Scala