Let’s build great software together
👋 Hi, my name is Germán.
I’m a software developer based in the U.S. who helps teams build high-quality products with Elixir and Phoenix.
Over the past ten years, I’ve helped founders and product owners ship new products, augmented teams to ship faster while improving their codebases, served as temporary CTO, and mentored junior developers.
If that’s something you need, let’s chat, or take a look at how I work and see what past clients say about working with me.
How I work
My goal is to help your team ship your product faster while improving your software’s quality. To do so, I like to integrate closely with your team, share best practices, and mentor developers.
Integrating with your team
Some freelancers ask you to give them some specs, and they’ll leave you in the dark for months. Later they come back with something you may or may not want.
That’s not how I work.
I work closely with you and your team to help plan, define, choose the highest priority work, and break it into slices. I encourage your team to work in short iterations, releasing work frequently so we constantly work on what’s most important and you always know what’s being built. That lets us stay flexible and adapt to your customers’ changing needs.
Remote but semi-synchronous
I love remote work.
I’ve been working remotely since 2019 and often advocate for teams to adopt it. Saving hours of commute time has made me happier, healthier, and a better, more focused consultant.
And with remote work, I’ve learned that many things are best done asynchronously. But not everything needs to be asynchronous.
In fact, to help my clients best, I like to collaborate closely with their teams synchronously.
Planning meetings and retrospectives are vital. Quick feedback from founders or product managers can save countless hours of building the wrong thing. And having a time overlap allows me to pair program with your team to solve complex problems, share knowledge, improve code quality, and mentor junior developers.
That means I prefer to work with teams with at least a four-hour time overlap with the ET time zone.
Building high-quality software
In order to build high-quality software, I practice test-driven development (TDD) and encourage pair programming.
TDD helps developers design high-quality code while ensuring we only build what’s absolutely necessary to support a given feature. It also means we have a test suite that covers the behavior of our code, so we know if we’re introducing a regression at any point in time. That gives us the confidence needed to ship releases frequently.
If you want to read some things I’ve written about TDD (and its cousin, BDD), take a look at
- the intro to my TDD Phoenix book,
- how TDD changes code design from a process of invention to discovery,
- a short introduction to BDD, and
- how BDD helps us with just-in-time development
I’m also an advocate of pair programming.
Though I don’t think it’s necessary to do it all the time—it does take a lot of emotional energy to do it— I think pairing is one of the best ways to build high-quality software quickly.
For that reason, I have an open-door policy for pair programming with clients. I won’t force it on other developers, but I encourage teams to consider pairing on complex problems and always accept a request to pair.
With two developers collaborating on the same problem, we can arrive at better solutions faster. It removes distractions and prevents developers from getting stuck. It also promotes shared ownership of the codebase—a fundamental quality of high-functioning software teams.
To pair program remotely effectively, I use tools created with pair programming in mind: tuple or pop.
If you think I’m the right fit for your team, I’d love to see how I can help. Send me an email, and let’s book a call.
What past clients say about working with me
As a person, developer, and product strategist German is exceptional. Particularly in setting a codebase, culture, or large piece of functionality, German’s skills (and the combination thereof) shine. He’s the developer to set your codebase, culture, and company mission up for success.
German is a meticulous and strategic programmer as well as an excellent written & verbal communicator. I have an increased confidence in taking on new client work after learning from our code design discussions.
German is one of the best professionals I’ve worked with. Not only is he world-class in terms of technical ability, he’s a joy to work with.
I recommend working with German without hesitation! His unique combination of technical ability and knowledge, coupled with an empathetic consultative approach, led us to build a better product. He was 100% a partner in building out the early versions of our platform.
The quality of deliverable was incredibly strong, which was always likely given German’s skill, training and curious nature… but, more importantly for me were the ideation and planning elements that pre-dated deliverables. German helped create an open-minded, analytical, collaborative work environment that I think yielded as fulsome a view as possible of the challenges and solutions at hand. We had a fun time working together and German’s end-to-end work is really top notch.
German was a pleasure to collaborate on from start to finish + his work product is top notch. He also was proactive in finding an ongoing support plan that extends beyond the original engagement duration which demonstrates his customer focus + care for his customer base.
I truly appreciated the disciplined approach taken throughout the duration of the project to ship very high quality + well tested code. Many other consultants would be more focused on just shipping than building an incredibly strong foundation + abstractions for future developers.
I also appreciate the careful approach to problem solving and asking great questions to flesh out requirements. German took the time to dig deep with me.
I would recommend him 100/100 times, and I would love to collaborate with him again in the future.