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

Collaborative

Successful software requires intentional collaboration
Values
  • mob, pair whenever possible
  • make work visible so we share our mental model
  • develop a shared language (tech & stakeholder)
  • write code for humans to read
  • make room on the team for everyone to contribute
Strengths
  • facilitating mobbing & design work
  • domain driven design
  • empathy
  • mentoring
  • documentation writing
  • stakeholder-readable tests

Iterative

As a lean thinker, I can't help but work in small batches
Values
  • get useful software quick, then improve
  • iterative, just-in-time design
  • don't build it if you don't need it
Strengths
  • commits in minutes
    • TDD
    • TCR (test && commit || revert)
    • provable refactoring
  • merges in hours
    • slice tech tasks into tiny deliverable chunks
    • branch-by-abstraction
    • prototype then refactor
  • releases in days
    • slice customer needs into tiny deliverable chunks
    • user story mapping to drive small slices of customer-centric work
    • use experiments to de-risk unknowns
    • sustainable, sufficient testing so we can release with confidence
    • acceptance test driven development to keep us focussed

Engineer

Striving for methodical, data-driven, high quality work
Values
  • success should feel like solving a puzzle not winning the lottery
Strengths
  • work backwards from customer needs
    • stories about customers' work drive features
    • acceptance tests drive features
    • unit tests drive implementation
  • don't guess
    • if it's not covered by a test it doesn't exist
    • thoughtfully instrument your code for observability
    • test-in-production (e.g. scientist pattern) to prove your refactoring is safe
  • learn with experiments
    • instead of big up front design, craft experiments and spikes to drive design

Experience

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

Leading Our Team Amidst A Transition

Role:
Employer: Amazon Web Services
12 people since February 2020 Acting Software Development Manager
  • active participation in most team code reviews
  • promote technical practices like refactoring, domain driven design, and customer-centric design
  • managing the team's ramp-up on a neighboring system as our area of ownership doubles
  • coaching several engineers who are mentoring interns for the first time
  • weekly 1:1s with 10+ engineers
  • managing onboarding of 4+ engineers
⇅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