Scala Backend Engineer

Job description

We’re looking for a professional and dedicated Scala backend developer who’s as enthusiastic about software craftsmanship and information security as we are. ZIVVER is a successful scale up and we need experienced software engineers to support our international expansion. We’re proud of what we do, and so should you! There’s no technology you deem too difficult to understand. Maybe you’re already familiar with SAML, DANE, SMTP, SCIM, and DKIM. But if you ever encounter a new four-letter acronym you won’t rest until you’ve read the RFC top to bottom. We never say “I don’t know”, we only sometimes say “I don’t know yet”. That’s how we roll at ZIVVER. We want you to rock and roll along with us!
 

Hot take

  • Programming is engineering, not art or poetry.
  • You judge code by how it handles the sad path, not the happy path.
  • The best code is code that’s never written.
  • You had a bad night of sleep after learning about the scalaz spaceship operator.
  • You usually comment 'flatMap that shit' in pull requests where someone iterates over collections
  • You still don’t know how to explain what a monad is, but you use them extensively.

 

Your second day at HQ


(We are living during a pandemic, so there’s no such thing as a day at HQ. We fully support a work-from-home situation (read as monitors, headphones, webcam, docks, and whatever else you might need). In normal times though...)

Yesterday was an exciting onboarding day. You had dozens of cups of coffee with all kinds of people and you had a lot of new information thrown at you. You saw many new faces and you forgot about 90% of the names of your new colleagues already. But hey, nobody blames you for that. At the end of that day you got your new laptop from IT. It’s indeed that special model that you had carefully pre-ordered a month ago when you signed your contract.

Today is the day that you actually start working at your desk next to your teammates. You spend the first two hours of the day installing your environment: your IDE with personal settings, a clone of your dotfiles and of course you have to download Spotify.


You attend the daily stand up, but you don’t have a clue yet what everyone is talking about. You understand every individual word, but you’re missing the context. Nonetheless, you feel that this is indeed a team where you will be an indispensable part of soon. Immediately after the standup you ask your official ‘onboarding buddy’ for some more background on running issues. “Let’s discuss that during lunch!”. Today is fish and chips on the menu.

 

While fighting your after lunch dip with some caffeine, you make your first checkout from GitLab. The README.md file in the project root explains some basics about the project setup. You copy paste the sbt one liner in your terminal and the full unit and integration test suite starts to run. After a few minutes all tests have passed successfully. Good! You recall the ‘Joel test’ by Joel Spolsky: version control? check. Build and test in one step? Check.

 

After browsing the code base a bit you ask your buddy what to do next. There are a few issues in Youtrack tagged with ‘NewbieFriendly’. Most of them are small bugs. Not very exciting but ideal tasks to get your hands dirty while getting to know the codebase. And hey, sometimes fixing a minor bug is even more satisfying than building a new feature, isn’t it?

 

It took you an embarrassing 45 minutes to actually reproduce and fix the bug. And then another 20 minutes to write a small regression test. “Certainly not bad on your first day!” is the comment your buddy left in the pull request after giving thumbs up on your 1-line fix and 10-line test you added. “Ship it”, says your other colleague via Slack. You ask if it’s preferred to rebase or to merge to master. “We prefer merging over rebasing”, tells your buddy. “Rewriting history harms the traceability we need for ISO compliance”. Whatever... You merge your fix to master. Time to go home and already looking forward to tomorrow!

 

Responsibilities

  • Take ownership of the backend code base:
    • Guard design and code consistency. Spaces over tabs. Period.
    • Write and update documentation. A little ScalaDoc here ‘n’ there.
    • Maintain code quality. Idempotency and purity!
    • Dependency and compatibility management. Anything outdated?
  • Quality of the backend system:
    • Peer reviews, nobody has four eyes.
    • Test coverage. Not too low. Not too high...
  • Coordinate releases with product manager, write release notes and change logs, work together on a launch checklist.
  • Improve team collaboration, e.g. branch/merge strategies, workflows, etc.
  • Triage bug reports. Hold the line or fix later?

Benefits

  • Choose your own hardware
  • Beautiful top-floor office in Amsterdam
  • Flexible working hours
  • Flex holidays
  • After-work beers in our in-office bar
  • Diverse international team

Requirements

Skills / Degrees

  • MSc degree in Computer Science or a similar/related level of education.
  • Professional experience with JVM-related technology. You know how to attach a debugger or profiler to a JVM, how to read/analyze a GC log, and the word ‘cafe babe’ rings a bell.
  • Professional experience with Scala and sbt.

Attitude / Personality

  • You enjoy a good ‘Plan - Do - Check - Act’ cycle
  • You consider risk something that is not to be ‘taken’ but to be ‘managed’;
  • You appreciate the value of complex, detailed and audited norms bring to the security, integrity and availability of information;
  • Proud of successes, peeved by mistakes, resilient to recover and learn.
  • Straight forward, direct, but respectful with a big smile.
  • You don't run off a cliff when your hair's on fire: think, count to ten, then act.