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.
2013 (4 months)Software Developer / Research AssistantSoftware Engineering Decision Support LabUniversity of Calgary
2011-2016Bachelor of Science in Software EngineeringUniversity of CalgarySchulich 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
⇅HTTP via SDKs
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.
⇅HTTP
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)
⇅HTTP
⇅HTTP
⇅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
CSS
JavaScript
AngularJS
⇅HTTP
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
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
React
CSS
JavaScript
React Native
JavaScript
⇅HTTP
JavaScript
Cypher
Node
Neo4j
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
Consumer JavaScript (3rd party)
TypeScript
Browser WebRTC API
Stanza.io (XMPP)
⇅WebRTC
⇅WebSocket
Selective Forwarding Unit
Signalling service (XMPP)
⇅various protocols
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
CSS
HTML
Kendo UI
JavaScript
⇅HTTP
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