Alexander Bird   //   Software Engineer

Learning to build useful, valuable software in a team

Alexander Bird


Vancouver BC, Canada
alex@alexanderbird.software
https://alexanderbird.software

Bio

— Strengths, values, and motivators

Hey, if you're here for content, head over to /blog.

Or, carry on for my slightly out of date resume 👇🏻.

People

How I interact with others
  • customer focussed: I've found the only way to build software that actually gets used is to work closely with our customers from the very beginning and throughout the work. This might mean customer interviews, watching them work, User Story Mapping, releasing early prototypes for feedback, collecting thoughtfully crafted metrics, and repeating those things throughout the work.
  • collaborative: I'd like to achive more than I can as a solo developer. I need the perspectives, inspiration, and experience of many peers to do my best so I work hard to sustain and enhance an environment where we can all bring our best to the table. In most teams I am part of I share practices like collaborative programming (ensemble/pair/mob) and retrospective techniques which help us spend more of our effort creating together and wasting less effort negotiating and coordinating with each other.
  • communicative: I apply practices like continuous integration, User Story Mapping, Domain Driven Design, Acceptance Test Driven Development, and Architectural Decision Records to facilitate cross-discipline communication early and often.

Process

How I build
  • test driven: Acceptance Test Driven Development at a system capability level; Test Driven Development at the class level. I can find ways to test drive very hard-to-test systems, either with creative testing approaches or strategic refactoring.
  • adapting to change: I engineer the system so it's cheap to change so we don't have to predict the future to be successful. That includes modular architecture, appropriate testing, and refactoring skills (practicing them personally and sharing them with team mates).
  • measuring over guessing: I use spikes, experiments, production metrics, and other mechanisms to compare reality to our plans so we know that we're building the right thing. Guesses are timeboxed and we gather data to course correct.
  • lean flow: I apply practices that reduce work in progress, queued work, unreleased inventory, and other lean waste we can have more impact with the same effort. I share practices like collaborative programming, continuous integration, small commits to help me and my peers spend more effort building/delivering and less effort coordinating/correcting.

Tech

What I build
  • polyglot: Comfortable with Java, TypeScript/JavaScript, Bash. Familiar with Ruby, C#, C++, Python, VBA.
  • database agnostic: Comfortable modelling and testing relational data with SQL and NoSQL based databases.
  • multi-architecture: Comfortable building distributed systems in the cloud, domain driven microservices, and modular monoliths. I prefer hexagonal architecture because of how easy it makes unit testing.
  • refactoring: Very comfortable with advanced refactoring methods (IDE tooling, manual provable refactorings, test && commit || revert).
  • learning: Always keen to learn a new tech stack, pattern, or approach.
  • oncall operator: Experienced as a first responder to production incidents, including emergency performance optimization, security incident response, and other high severity customer-impacting incidents.

Experience

2023Q4-present Distinguished Software Engineer Hunter Industries
2023 Senior Software Engineer (SDE 3) Amazon Web Services
2021-2023Q1 Software Engineer (SDE 2) Amazon Web Services
2021 Software Engineer, Acting Manager (SDE 2) Amazon Web Services
2020-2021 Software Engineer (SDE 2) Amazon Web Services
2019 Senior Software Developer Shareworks by Morgan Stanley
2018-2019 Technical Lead Arcurve Inc (various projects)
2016-2018 Software Developer Arcurve Inc (various projects)
2014-2015 Software Developer Intern Arcurve Inc (various projects)
2013 (4 months) Software Developer / Research Assistant Software Engineering Decision Support Lab University of Calgary
2011-2016 Bachelor of Science in Software Engineering University of Calgary Schulich School of Engineering

Support tech leads in designing and executing software delivieries

Role:
Employer: Amazon Web Services
12 people since January 2022 Senior Software Development Engineer (L6)
  • Helping tech leads navigate technical challenges faced in their design
  • Linking current design work to multi-year organizational objectives
  • Writing production code to prove concepts, set patterns, and create examples of design concepts
  • Writing technical documents to align business leaders and the engineering team
  • Implementing mechanisms for sharing and enforcing technical design throughout the team
  • Teaching test design, technical writing and communication, and other skills that increase a tech lead's effectiveness
  • Mentoring several engineers
  • Oncall operations -- resolving high severity operational incidents in response to our system alarms
administrator customers
⇅public AWS API
existing service
existing service
⇅method call
⇅method call
new code (hexagonal architecture)
⇅message queue
new code and infrastructure (hexagonal architecture)
⇅API call
existing storage service (with modifications)
⇅public AWS API
consuming customers

Design & Lead High Scale Feature

Role:
Employer: Amazon Web Services
7 people 6 months Software Development Engineer II (L5)
  • leading the team in adding a new system capability which allows customers to perform the work of 1000s of API calls through a single gesture (API / CloudFormation update / Console action)
  • apply distributed system design principals to integrate this 1000x scale with the existing system which is not designed for that scale
  • navigate tradeoffs between upgrading existing systems (to safely handle scale) and delivering in a timely manner. We are making some upgrades and leaving some systems unchanged.
  • apply hexagonal architecture to isolate the core business logic from the integration points (as we increase the scale later in the project, this architecture allows us to move the core logic from an existing service to a new service without rewriting or retesting core logic)
  • mentor, train, and guide the team so everyone can contribute to the design and coding

Leading Our Growing Team Through A Transition

Role:
Employer: Amazon Web Services
12 people 8 months Acting Software Development Manager
  • mentoring and supporting 10+ engineers with weekly 1:1s
  • supporting onboarding of 4+ engineers
  • coaching several engineers who are mentoring interns for the first time
    • of the 4 summer interns, 3 returned to our team summer 2022
  • actively participating in most team code reviews
  • promoting technical practices like refactoring, domain driven design, and customer-centric design
  • spearheading the team's ramp-up on a neighboring system as our area of ownership doubled
⇅public AWS API
internal service
Java 8
proprietary framework
Lambda
EC2
⇅HTTP via SDKs
collaborators
AWS Organizations
AWS Config
AWS DynamoDB
AWS IAM
AWS SQS
AWS SNS
internal services from other teams
Infrastructure as Code
proprietary tools
AWS CloudFormation

Enhancing AWS Service Catalog

Role:
Employer: Amazon Web Services
9 people 15 months Software Development Engineer II
  • redesign core data processing component of our system from procedural and error prone to highly scalable / retryable queue & lambda architecture
  • introduce pairing and mobbing to our team to accelerate knowledge/skill transfer and increase code quality
  • established contract testing on the team to
    • reduce time to add tests for a big feature from months to days
    • increase stability of tests in the build pipeline
    • increase the percentage of testing we can do through unit tests (reducing iteration time from minutes to seconds)
  • led the investigation and mitigation of several customer-impacting operational incidents while oncall
  • established User Story Mapping on the team to make our design activities more customer-centric.
Web Browser
HTML
CSS
JavaScript
various UI frameworks
⇅HTTP
Server
Java 8
Oracle Database

Modifying a Legacy Application

Role:
Employer: Shareworks by Morgan Stanley
> 100 people 6 months Sr. Developer
  • Mob and pair programming to add features to a legacy Java application
  • Familiarized myself with a new area of code each month (every team can be assigned to work on any area of the code)
  • Story-splitting and user story mapping
  • Refactored partially tested legacy code (safely) to make it easier to change
  • Demoed weekly to clients
  • Took initiative to improve shared automation and tooling
    • published a command line interface (with tab completion) to abstract, document, and improve common developer commands (people actually use it and submit PRs)
    • wrote a small Ruby on Rails tool to make test failure results easier to triage (still in trial/demo stage)
Web Browser
CSS
HTML
Highcharts
Angular 7
TypeScript
⇅HTTP
⇅HTTP
Docker
Single Page App
NGINX
REST API
Nest
TypeScript
Data collection & aggregation
⇅various protocols
Well-site sensors

Real-Time Well Monitoring Dashboard

Role:
Employer: Arcurve Inc
Client: Oilfield services (publicly traded)
2 people 4 months Tech Lead
  • Led Domain Driven Design style modelling session with team (incl. user researcher, UX, and PM) to clarify the problem statement and approach
  • Prototyped experimental data visualizations with Highcharts from provided mockups
  • Setup project build & test infrastructure (using Lerna to manage the monorepo; auto-generating the Angular SDK from the API Swagger doc)
  • Built inexpensive demo infrastructure so we can deploy before the upstream integration points (external team) are available
  • Conducted job interviews
Web Browser
CSS
JavaScript
AngularJS
⇅HTTP
Server
Express
Node

Mongo DB
Axios
 
⇅HTTP
other services

Reverse Engineering

Role:
Employer: Arcurve Inc
Client: Corporate minutebook management (startup)
1 person 5 months Tech Lead
  • Built an import utility for a proprietary data format: inferred the domain model/rules from the data, wrote a custom parser.
  • Integrated this component with our client's code
  • Provided extensive documentation and training so their development team was comfortable maintaining the import utility
  • Conducted job interviews
Web Browser
React
Redux
CSS
JavaScript
⇅HTTP
⇅HTTP
SPA Server
Express
Node
Linux
API Server
C#
Windows
AWS EC2
on-premise

Team Lead

Role:
Employer: Arcurve Inc
Client: Telecommunications provider (publicly traded)
8 people 6 months Tech Lead
  • Updated team processes to increase knowledge sharing and collaboration between team members
  • Identified a way to temporarily reuse legacy components in order to release sooner
  • Conducted job interviews
Web Browser
React
CSS
JavaScript
iOS
React Native
JavaScript
⇅HTTP
Server
JavaScript
Cypher
Node
Neo4j
Auth. Service
JavaScript
Node
Heroku

Architected for Reuse

Role:
Employer: Arcurve Inc
Client: Professional certification auditing (startup)
3 people 3 months Developer
  • Architected and unit tested the application in a way that allowed us to salvage most of the application when the client drastically changed their application after several months (new UI, new data model)
  • Maintained respectful, constructive communication with our client in a challenging team environment
Web Browser
Consumer JavaScript (3rd party)
JavaScript Library
TypeScript
Browser WebRTC API
Stanza.io (XMPP)
⇅WebRTC
⇅WebSocket
Selective Forwarding Unit
Signalling service (XMPP)
⇅various protocols
Other Clients
Browser
Desktop
Embedded

Browser WebRTC Protocol Deep Dive

Role:
Employer: Arcurve Inc
Client: Video conferencing (private corporation)
2 people 12 months Developer
  • Integrated the emerging WebRTC protocol with our client's custom video conferencing infrastructure via a proof-of-concept JavaScript library
    • Enabled video calling between a browser and multiple embedded and/or desktop clients
  • Collaborated constructively and respectfully with my technical lead in the face of many differences of opinion
Web Browser
CSS
HTML
Kendo UI
JavaScript
⇅HTTP
on-premise Server
C#
.NET MVC
SQL

IIS
Microsoft SQL Server

Following Patterns; Accepting Feedback

Role:
Employer: Arcurve Inc
Client: Land acquisition service provider (private corporation)
2 people 4 months Developer
  • Followed patterns set by previous developers
  • Collaborated through code reviews — receiving (accepting, adopting) feedback, discussing my approach
Web Browser
HTML
CSS
JavaScript
⇅HTTP
Server
PHP
MySQL
Apache
Linux (shared cloud hosting)

Navigated Technical Debt

Role:
Employer: Arcurve Inc
Client: Surplus oilfield equipment broker (startup)
1 person 4 months Intern
  • Identified and fixed several illusive bugs in a very indebted and haphazardly constructed application
  • Participated in requirements elicitation from domain experts who had little technical understanding
Microsoft Excel VBA
Macros
Unit Tests
Macro Serializer (3rd party)
Version Control

TDD & Version Control with Excel VBA

Role:
Employer: Arcurve Inc
Client: Oilfield services (publicly traded)
1 person 3 months Intern
  • Proposed new business process to reduce lead time for new clients by 50%
  • Modified the existing Excel VBA tool to support the new process
Web Browser
CSS
HTML
Ember.js
CoffeeScript
⇅HTTP
Heroku
Ruby on Rails
Postgres

Software Engineering Decision Support Lab

Role:
Employer: University of Calgary
2 people 4 months Research Assistant
  • Implemented a synchronization utility between JIRA and a proprietary business intelligence / project planning tool

Bachelor of Science in Software Engineering, 2016

Schulich School of Engineering University of Calgary