Software Developer/ Engineer/ Architect

Software Development Engineer

About the Role

Designs, develops and debugs distributed software programs for improvements and new products across multiple fields and multiple platforms. Capable of crafting and implementing software able to handle the tradeoffs between data consistency, availability, partition tolerance. Develop, craft and deploy software and tools in support of a data processing system, including highly concurrent transaction processing, distributed memory management, communication protocols, and efficient distributed data algorithms.

  • 5+ years of software engineering experience
  • 3+ years of distributed systems engineering experience utilising one or more of the following: Java and/or Scala and one scripting language in a Unix/Linux environment

Other Qualifications

  • Proficient collaborating with teammates to design, maintain and improve sophisticated object-oriented software following clean code standard methodology;
  • An understanding and experience with topics related to performance and scale, security, availability, deployment and operations
  • A testing/quality approach - unit, system/integration and end-to-end testing, TDD, feature toggles, canary deployments;
  • Exposure to operating system concepts covering memory and storage, threading and concurrency, networking and sockets, process management;
  • Track record of being responsible for a service in production with experience of production triage and on-call;
  • Experience with logging, monitoring, metrics, stats technologies, such as: Wavefront, Grafana, Prometheus, Kibana, Hive, Big Panda etc.
  • Experience in delivery a service from writing code to deploying in production: continuous integration (Jenkins), virtualisation (Docker, VMware), orchestration (Kubernetes)