Andrew Wylie

Computer Scientist

Canada

Technologies

Preferred Technologies
pythonjavajavascriptgitscrum

Overview

I'm a computer scientist with 9+ years of professional software development experience. After completing both a bachelor's and master's degree in computer science I began my career, which has mainly consisted of back-end and full-stack positions. Throughout this time I've mainly worked with Java, Python, and the ecosystems supporting their use. More recently I've also had the opportunity to gain considerable experience with Amazon Web Services (AWS) while developing systems that utilize the platform.

Experience (13)

Staff Software Engineer

Western Digital

May 2020 → July 2023
phpjavakotlinamazon-web-servicespythondockergitjirajenkinsgithub-actionspulumi

Over my three years at Western Digital I was involved in several main activities: PHP-based server-side development to support the EdgeRover application, Java cloud services development, and an overhaul of the CI/CD process.

During my first year at Western Digital I worked as part of a small cross-functional team on the modification of an acquired PHP-based backend service for content cataloguing and management. Our solution supported the EdgeRover application by indexing and providing centralized access (via OAuth flows) to user's files and their metadata as retrieved from multiple 3rd party sources (eg. Facebook, Flickr, Google Drive). Some highlights of my contributions during this time include improvements to thumbnail generation and increasing feature parity across integrations (Dropbox, Flickr).

After supporting the EdgeRover application our team joined the DevOps group in an effort to improve the CI/CD process. Given a directive to decrease build & deployment times we began by assessing our current tools in comparison to possible alternatives, eventually opting to transition to GitHub, GitHub Actions (GHA), Pulumi for IaC, and JFrog Artifactory. My contributions on this project included architecture documentation and recommendations for the code build automation tool, versioning approach, and artifact storage, as well as templated workflows for GHA. By the end of the project (cut short as it was put on hold) we had a successful proof of concept available that when extended to all microservices would reduce build & deployment times by an expected order of magnitude.

The remainder of my time at Western Digital consisted of supporting the cloud services. Specifically this meant bug fixes, security patches, minor feature requests, and other maintenance items related to a few dozen Java (Spring Boot) and NodeJS-based mircoservices that support the suite of WD devices.

Cloud Designer

Nuvyyo

February 2018 → January 2020
javaamazon-web-servicesgradlegitgwtdockerjunitmysqltomcatdatanucleuslogstashkibanapythonvaadindjangopostgresql

Recommended for the position by a colleague, I began work at Nuvyyo with the primary responsibility of bringing in-house the previously outsourced Cloud DVR project. The project itself consisted of a Java application deployed on Amazon Web Services (AWS) EC2 which allowed customer devices to record & watch television programs using cloud storage as opposed to an external hard drive.

Independent Contractor

Nomad.Works

July 2017 → November 2017
pythondjangod3.jspostgresqltwitter-bootstrapgitagilejquerylinuxcssgitlabjavascript

Following contract and term positions at Espial, I was hired on as a contractor at Nomad.Works to assist with Python/Django development. Working as a full-stack developer, most of my time was spent implementing billing and reporting features for an advanced accommodation system.

Specifically, this included all steps of the development process from receiving client requirements to deployment; refining requirements for better clarity, definition of Django models, implementation of the web pages containing forms and optionally-generated data, implementation of complex queries with post-processing, data transformation, customized display via stacked bar chart using D3.js, generation of summary statistics for revenue and occupancy rates over varying time frames, and tests to ensure correct aggregation of guest data for the implemented features.

Cloud Developer

Espial Group

September 2016 → March 2017
jiraconfluencebitbucketnode.jsdockerjenkinsjavascriptpythonlinuxsvngitnpmeslint

After working at Espial through a contract with Dever Domain Inc., I was offered an additional six-month position as a Media Services Platform (MSP) Cloud Developer directly through Espial. Joined by another full-time colleague and a few co-op students, our scrum team focused on internal tools and modernization (modularization and containerization) of an older core product.

Our work mainly dealt with improvements to our group’s software engineering processes around software builds, version control, load testing, internal metrics, and code standards.

Software Developer

Dever Domain Inc.

December 2015 → September 2016
antjavarhellinuxjiraconfluenceredminesvnubuntueclipse

Hired on at DDI to assist with contract work at Espial, I was involved in the development of a server-side application to integrate system-level components for an Over-The-Top (OTT) Video On Demand (VOD) solution for the German cable provider Tele Columbus.

Placed as a lead developer of the Workflow Manager application, I implemented several large pieces of the system along with carrying out unit testing, and assisting in system testing. Responsibilities in this role also included documentation of the application for eventual handoff for maintenance, and providing training to those maintainers. Development was made more interesting both as I had the opportunity to work directly with the media content providers to determine a standard for content metadata, as well as working within a distributed project team with colleagues located in Ottawa, Cambridge, Berlin, and Leipzig.

Lastly, while wrapping up the project I assisted in installation and configuration of the system both remotely, and at the client site in Leipzig.

Software Developer

Thales Group

July 2015 → October 2015
c#tfsarcgisvisual-studiomef.netmvvm

While completing my master's degree I worked part-time at Thales Group. At a high level, I was involved in the development of a Tactical Battle Management System (TBMS) as part of one of several small scrum teams.

Contributions I was able to provide mainly included improvements to the GUI (eg. implementing paging on custom MVVM components for improved responsiveness) along with bug fixes.

Teaching Assistant

Carleton University

September 2014 → April 2015
cvalgrindgdblinux

During the 2014/2015 school year I was employed at Carleton University as a Graduate Teaching Assistant.

In both the fall and winter semester I assisted in teaching the Introduction to Systems Programming course. The course itself covered the C programming language (along with debugging via gdb & valgrind), use of linux command-line utilities, and several basic computer organization and systems programming concepts (bit models, threads, &c).

For both terms, my duties included learning any new material before the students, marking assignments, holding office hours, and both creating & instructing the tutorials.

Teaching Assistant

Carleton University

September 2013 → April 2014
pythonpygamejavajavascripthtmlcsstwitter-bootstrapnode.jsmongodbjadelinux

During the 2013/2014 school year I was employed at Carleton University as a Graduate Teaching Assistant.

In the fall semester, I assisted teaching the Introduction to Computer Science I course. The covered material began with an introduction to the Python programming language, with the Pygame library being used in several assignments. A basic introduction to algorithms (minimum, maximum, and median finding) was also included in the course, as well as a brief overview of Java.

For the winter semester I was a teaching assistant for the Fundamentals of Web Applications course, which focused mainly on development of web applications using JavaScript with Node.js and Mongodb. The material was introduced gradually, first focusing only on server-side JavaScript, which was followed by integration of CSS styling, templating (Jade), database usage, and client-side JavaScript. Assignments themselves dealt with implementation and use of web forms, secure & persistent sessions, web sockets, simple games, and a basic web server.

For both terms, my duties included learning any new material before the students, marking assignments, holding office hours, and teaching tutorials to reinforce the material taught during lectures.

Senior Systems Analyst

NAV CANADA

July 2012 → June 2013
jenkinstracjavaeclipseantsvngitjavascriptdjangopythonhtmlcsstwitter-bootstrap

During this one year contract I worked with a medium-sized team on an Air Traffic Services Data Management System (ATSDMS) for the Hong Kong Civil Aviation Department. During my employment I was involved with build management, software integration testing, system environment configuration and deployment, project support, and implementation of a user interface to manage system-wide access permissions.

Software Developer

NAV CANADA

May 2011 → August 2011
gitdjangopythonhtmlcssjavascriptpostgresqlpostgisapachescrumagilelinux

I was able to have my final placement (Carleton University Co-op) with the same group as the previous placement, which was very exciting! I continued to work with the same developers on an online collaborative flight planning system (CFPS) to replace another decade-old system.

This time around I worked more-so on fixing defects as the deadline for the first release was nearing. Along with polishing the system, I was still able to implement a few features; a basic CMS for site administrators, and some PostGIS mapping for the start of the weather system integration/development.

Teaching Assistant

Carleton University

January 2011 → April 2011
assemblydigital-logicc

I was a teaching assistant for COMP 2003; Computer Organization. The main topics covered were digital logic and Intel Architecture 32 bit assembly language (including mixed mode programming!).

This position involved marking of assignments and the midterm examination, along with proctoring the midterm examination, and providing assistance to students during the weekly office hours. To better help students during my office hours I ended up working through the assignments myself to help refresh the concepts and provide context when answering any questions that may have surfaced.

Software Developer

NAV CANADA

May 2010 → August 2010
gitdjangopythonhtmlcssjavascripttwitter-bootstrappostgresqlapachescrumagilelinux

For this placement (Carleton University Co-op) I began work with a small group of developers (~6) on an online collaborative flight planning system (CFPS) at the beginning of its implementation stage. It was designed to allow users to file flight plans from the web, replacing the current method of either filling out a paper form or calling in to a flight service station. Integration with weather and other systems is also planned.

The scrum (agile) development process was used with week-long sprints, with development being done on linux fedora machines. A chroot environment along with virtualenv was used to target the cluster production environment, with python-django as the main language/framework and twitter bootstrap to help with the ui.

Hardware Support & Technical Writer

NAV CANADA

May 2009 → December 2009
documentationtestinghardwarehtmlcssphpmysql

During my time with Nav Canada for this placement (Carleton University Co-op) I worked mainly on the development and testing of several modifications for domestically fielded air traffic control equipment. The group I worked with was also responsible for some of the project support for other software groups, which also influenced my responsibilities.

During my free time I also worked on developing a basic web application for managing laboratory bookings for the group.

Education

Master of Computer Science

Carleton University

2013 → 2015
computer-sciencedistributed-computingdata-miningcomputational-geometryalgorithmsoftware-engineeringmachine-learningsoftware-quality

For my thesis I implemented modifications the Apache Hadoop MapReduce framework to allow generic, integrated, workflow scheduling. Along with this, various deadline and budget-constrained algorithms were designed, theoretically analyzed, and implemented. Specifically, two budget-constrained algorithms and a deadline-optimizing algorithm were proposed, followed by testing on a production-sized cluster running on Amazon EC2.

Bachelor of Computer Science

Carleton University

2007 → 2012
computer-sciencematheconomicspsychology

In addition to completion of my bachelor's degree with highest honors, I also obtained a minor in mathematics, and participated in the cooperative education option. Much of the work terms had me placed at Nav Canada, where I participated in the implementation of a domestic web-based flight-planning application (CFPS) which would eventually replace the old method of faxing completed forms.

My honors project consisted of a comparison of model-based testing between a Microsoft Visual Studio extension and a custom-built framework written by a previous PhD student.

Public Artifacts

A Scheduling Algorithm for Hadoop MapReduce Workflows with Budget Constraints in the Heterogeneous Cloud

2016 IEEE International Parallel and Distributed Processing Symposium Workshops (IPDPSW)

May 2016

For our research, we consider the ever-increasingly popular Apache Hadoop framework for scheduling workflows onto resources rented from cloud service providers. Investigated in our work is budget-constrained workflow scheduling on the Hadoop MapReduce platform, wherein we devise both an optimal and a heuristic approach to minimize workflow makespan while satisfying a given budget constraint. We have implemented modifications to the Apache Hadoop framework to execute these approaches, allowing fully integrated workflow scheduling.