Justin Wernick

Email: justin@worthe-it.co.za
Website: worthe-it.co.za
Location: Midrand, South Africa

Skills

Software Engineering

I have been programming for over 10 years, starting with learning Java in high school. Through my education at the University of the Witwatersrand, I was exposed to programming on many different levels of abstraction, from Assembly to C++ to Java to SQL. In my career so far, I have focused mainly on higher level languages, crafting cloud applications using Scala and JavaScript. I also use Rust on the side to explore new ideas or to write command line tools that help me to get things done.

Web Development

One of the areas that I have spent a lot of time in is creating responsive web interfaces. These range in complexity from static websites all the way up to single page JavaScript applications that connect to a RESTful API. In these projects, I have been involved in the full stack, from the front end to the database, as well as the scripts and continuous delivery pipelines used to push it out into the world.

Collaboration using Version Control and Continuous Integration

Any project that takes more than one person, or more than a day to throw together, needs systems to keep it organized. I am well versed in the Git version control system. I have also set up and worked with continuous integration builds and single click deployments using TeamCity, Jenkins, and GoCD.

Public Speaking

I have experience in presenting my designs and ideas to groups. This includes informal settings like discussing ideas over coffee, more formal presentations like internal brown bag sessions, and public speaking at events like conferences and meetups.

Technical Writing

Public speaking is good for spreading information, but I find it is useful in the long term to have a written reference for technical concepts as well. I am able to explain technical concepts in writing, and maintain my own website where I write about programming.

Agile Project Management

I have found agile project and team management techniques to be effective. It is especially useful to work in such a way as to be continuously releasing small pieces of code, collaborating closely, and regularly discussing how to improve the process of developing software in the current context.

Employers

2017 to present - Jemstep by Invesco - Senior Software Engineer

I joined Jemstep in 2017 to help build their web application for offering automated investment advice.

In 2018, I joined the Developer Productivity team. In this team, I was responsible for improving Jemstep’s internal tooling and performing large scale refactorings of the code base.

Technical leadership in a larger team and project

During my time at Jemstep, I’ve been involved in shaping the technical direction of the company and implementing some of the core parts of Jemstep’s product.

With Jemstep being a large, and growing, company, this required me to take many other people into account. This includes a variety of personal preferences, experience levels, and backgrounds.

Self-directed exploration to find ways to improve tooling

In the Developer Productivity team, I was tasked with finding ways to improve the internal development tooling. Within the team, we had a large degree of autonomy in defining our own backlog. I was able to do large refactorings of the codebase to improve its compilation time, and rewrite some of our internal tooling to be more reliable and more efficient.

Technologies

The primary technologies that I use while working at Jemstep are:

  • Scala
  • Play Web Framework
  • Akka
  • MongoDB
  • Bash
  • Linux
  • Ansible
  • Rust

2012 to 2017 - Entelect Software - Senior Software Engineer

I joined Entelect as an intern software engineer while I was still studying. After I completed my degree at the end of 2012, they hired me as a software engineer.

Entelect is a software engineering consulting company, and while working for them I saw several projects through to completion. I was promoted to the position of senior software engineer in 2014.

Getting up to speed with new business domains quickly

While working in the Projects division at Entelect, I tackled several small projects that covered a variety of business domains, including finance, importing, and medicine. I had to be able to get up to speed with the business domain and its terminology quickly.

Running meetings with clients

A core part of running a successful project was keeping the client and end users involved. I ran regular meetings with clients where the current progress of the project was demonstrated and feedback was gathered to improve the project in the next sprint.

Mentorship and technical leadership in small teams

The teams I worked on at Entelect were typically small and focused on a single project. Especially towards the end of my time at Entelect, I would take on the role of technical leadership of the project. This included overseeing the technical decisions of the project, mentoring junior developers, and always being available to discuss the technical aspects of the project.

Technologies

The primary technologies that I used while working at Entelect are:

  • C#
  • .Net MVC and WebApi
  • MS SQL Server
  • MongoDB
  • JavaScript
  • AngularJS
  • Node.js
  • Express.js
  • Windows
  • Microsoft Azure

Education

2012 - University of the Witwatersrand - Bachelor of Science in Engineering

I studied Electrical Engineering through the University of Witwatersrand. At Wits, this degree has a split in the third year between the heavy current option and the information systems option. I took the information engineering option, and so my degree covered more software engineering and communication systems.

I graduated with distinction at the end of 2012.

Professional Interests

Open Source

I believe in the value of free and open source technology, and try to use it wherever possible. I am much happier including libraries in my own projects if I’m able to inspect their code to see how they work. My personal preference for my development computer runs Linux.

I have published code that I’ve written in my personal capacity with open source licenses, including a popular JavaScript library for validating South African ID numbers.

Solving Challenging Problems

I have a special interest in solving computationally challenging problems. By this, I mean problems that have strict requirements in terms of performance and throughput, problems that need to manage large amounts of data, or problems where an optimal solution is not obvious or may not exist at all.

Responding to Real World Problems

When working on a software system, I believe that the value of the software is in what it allows people to achieve with it. Keeping the people that use the system in mind, and the actual task they are trying to perform, results in a much better end product.