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 👇🏻.

Growing In

I'd like to be on a team where these practices and philosophies are established. I would like to work with some folks who have experience in these areas who will challenge me to grow in them.
Philosophies and Practices
  • Inspect and Adapt: the best team processes come from regularly taking time as a team to look back on how we've been working and come up with ideas for how we can work more effectively.
  • Lean Flow: improve effectiveness, speed, quality, and agility by reducing the amount of work in progress. In software, work in progress includes unreleased features, unimplemented designs, unbuilt product backlogs, feature branches, and research for unbuilt features.
  • Cohesive Teams: the apparent speed-up created by having folks work independently is generally outweighed by the communication overhead of independent work streams. Since the thinking and learning we do *is* the work, we should set up our teams to think and learn together (instead of doing our “work” in isolation and having set times to synchronize).
  • Plan to Adapt: it's not possible to design, estimate, or test our way to a zero-surprise system. Instead of attempting to eliminate the unexpected, embrace it. Design with an intent to learn; estimate with the expectation that scope changes; supplement traditional testing with product metrics that detect unexpected failure.
  • Customer-Involved Development: when we design, we incorporate feedback from real, specific customers. When we deliver, we let customers use it (instead of demoing it to customers)

Can Teach

I'd like to be on a team where these things are accepted as reasonable (even if the team isn't currently practicing them). I have experience teaching these things and am comfortable being the advocate for them on a team.
Philosophies and Practices
  • Example Driven Development (TDD, ATDD, and BDD): usually, the highest value code comes from authoring a single example of how it is used (in the form of an automated test) before authoring the code.
  • Domain Driven Design: for business-critical code, we can produce the highest quality (and most adaptable) code by developing a spoken language to discuss the system that all team members share, and we should structure our code to align with that spoken language.
  • Refactoring: since we can't predict the future, the code we wrote last year/month/week is not perfectly suited for the new things we're building. Rather than forcing new behaviour into a system which it doesn't fit, we ought to continuously update the structure of our code without changing the behavior so that it is easier to add new capabilities. This is aptly put by Kent Beck: "Make the change easy (this might be hard) then make the easy change".
  • Story Slicing by Customer Capability: instead of dividing our work by technical chunks, we identify small, customer-valuable slices of capabilities and deliver one of them (end to end) before working on the next slice of customer value. Only when there is truly no way to split customer slices smaller do we slice on technical boundaries.
  • Story Counting Instead of Numeric Estimates: when we discuss what's entailed in building the next slice, instead of generating a number representing the size of the story, rework the stories until they are all roughly the same size. If we learn there are many aspects to the story, we slice it into many stories. If we learn that there are many risks with the story, we slice off a time-boxed experiment instead of taking on the whole story. When we need to forecast, we count the remaining stories and compare that to the number of stories delivered per unit time in the recent past.

Experience

2021-present 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
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 since January 2022 Software Development Engineer II
  • 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