Profile
I am an Android developer with 10 years of experience in the connected vehicle space. I have worked in most parts of the Android stack, from Jetpack Compose UIs, to AOSP, and underlying system services.
I thrive in environments where I am challenged to deliver high quality software alongside curious and driven teammates who care for their craft.
I indulge my craft by trying new approaches in side-projects, proof of concepts, and I bring the experience of what worked and what didn’t to the teams I work on. I’ve presented at developer meetups and conferences, and during the pandemic, I completed an epic project to reengineer my car’s infotainment system from scratch that touched upon every engineering skill I’ve learned.
I’m excited when I can take something I learned, share it with others, and use it to make pragmatic software designs that collapse complex requirements into straightforward ones.
Skills
Android
Databases
Embedded
Web
Tools
Soft Skills
- Mobile application design & architecture
- Requirements gathering
- Process analysis and documentation
- Writing and presenting Lunch & Learns, Conference Talks
- Authoring technical training materials
- Scrum process, release planning
Work Experience
Immersed myself head-first into the world of regulated automotive safety software and worked my way back towards Android to become a truly “full-stack” developer.
I learned the theory and practise of automotive safety software engineering by studying the ISO-26262 functional safety requirement(s) elicitation and review processes through formal coursework. I applied this knowledge by contributing to Software Safety Requirements review cycles held by Functional Safety Engineers. I helped review and revise Technical Safety Requirements.
I learned C++ for this role and wrote the UI logic for the ASIL-B-rated touch screen safe Headlight Switch that was part of the canceled FNV4 infotainment platform. This logic was written in C++ on QNX, and I became familiar, through coursework and practical experience, with QNX APIs such as Resource Managers, and IPC messaging (Send, Receive, Pulse messages).
As part of this, I became familiar with the Autosar Adaptive environment that Ford was adopting for this platform. In contrast to the previous IVI platform I worked on, FNV4’s High-Level Design (HLD) review process made extensive use of MagicDraw and SysML. I learned SysML modelling through coursework and applied it when designing the Airbag Cutoff Switch (Passenger Airbag disable).
These ASIL-Rated “Safe Buttons” require coordination between the Android view heirarchy, through inter-OS IPC to show and hide overlaid buttons super-imposed by the QNX hypervisor. When these buttons are visible, touch events are relayed from the i2c touch controllers, bypassing Android, and going into the QNX touch UI logic.
I wrote the much of the UI logic in C++ for the cancelled FNV4 headlight switch. I wrote the Android-side of the ACS switch integration, which used similar QNX safe UI logic.
After the cancellation of FNV4, I took the lessons learned from the whole Android-QNX integration from the QNX side, as well as the Android side, and set to work on streamlining the integration to:
- reduce inter-team dependencies for code review, deployment, design
- increase reliablity and test coverage
- provide SDKs for other Android apps on the platform to consume to integrate with functional safety.
In this role, I was the domain architect and lead developer for part of the new infotainment system that Ford launched for the 2024 Lincoln Nautilus. This system features a 48-inch panoramic display, a touch-screen centre stack, and tight integrations between the Android Automotive OS system and a hypervisor.
-
I was the domain architect for the right-Pano Information On Demand (IOD) widgets. (Trip computer, Fuel Economy, Clock, TPMS). I was also the domain architect for the Centre-Stack Panoramic Display configurator application.
-
At the very beginning of the IVI project I wrote prototypes and cross-trained Android best practises to other team-mates who had an Unreal Engine and C++ backgrounds.
-
When the Nautilus project was started, my work was used as a foundation for the new system. I provided the technical design and architecture guidance to a team of ten developers.
- Wrote prototypes and Proof of Concepts
- Introduced Jetpack Compose to Ford Motor Company. Our team was the second team in all of Ford to adopt Compose in production.
- 1:1 mentored and helped all of the developers with code questions, design ideas, and unit testing help.
- Prepared a 1 hour lunch and learn on Jetpack Compose Scaffold Layouts in mid-2021, when documentation on Compose was scarce.
- Assisted my manager in becoming acquainted with the inter-team dependencies on vehicle services and signalling. I empowered him with information and design intent so he could advocate for our team’s needs when we needed services from the “rest of the car”
-
I helped perform technical interviews as an Android Subject Matter Expert for two engineering supervisors. My input led to the hiring of three very strong developers.
-
I worked with the Design Studio team to provide feasibilty input and brainstorm interaction modes.
-
I built two libraries (SignalService and AutoRebindingServiceClient) that automated the repetitive IPC tasks that our team’s projects faced. SignalService provides a Kotlin DSL for marshalling and unmarshalling nested Bundles into a Message. On the producer side, it provides an easy way for developers to specify a URI scheme for multiple endpoints of streaming data from a bound service connection. On the consumer side, it automates setting up a Kotlin Flow that can be wired into a repository or ViewModel architecture.
AutoRebindingServiceClient provides a way for developers to simply and reliably bind to a service, and abstract all failure events such as Disconnect, BindingDied, Reconnect, etc. It has hooks for developers to provide exponential back-off and retry characteristics without requiring deep knowledge of RxJava or Kotlin Flow patterns. This library centralized the code and tests for error-prone ServiceConnection lifecycle handling, enabling the team to wire together components more quickly.
Contract-to-hire position for the above role. I was converted to a full-time employee at 11 months.
Android developer for in-vehicle telematics tablets. I worked on new app development for end-users, B2B app development and integrations, as well as Device Admin and Device Policy Controller APIs, and Samsung KNOX SDK integrations.
-
Delivered Out-of-Truck lone-worker safety application. Guided a team of 4 through design decisions, experimentation with new Android Architecture components, and best practises. As part of the team, I also cross-trained an embedded C developer Android development practises and design patterns, leading to an additional effective project contributor.
-
Designed and implemented large-scale tablet imaging & setup process to automate field tablet setup and software installation as part of a warehouse supply chain.
-
Organized and led the team during the last stages of the tablet imaging process project by identifying outstanding Product Backlog Items, and collaborating with the team to place the PBIs on a Gantt chart (updated every day in daily standup) so that we could confidently deliver in our narrow deadline.
-
Learned best practises with Android Room and Navigation Jetpack architecture components.
-
Occasionally completed C development tasks for an embedded in-truck on-board computer with engine management peripherals.
Android developer.
-
Exposed to design evolution of building and scaling a connected truck application with remote code-update and diagnostic capabilities.
- Overhauled flagship Google Play Store Android app to:
- Use an internal common C++ business logic layer
- Integrate with partner application
- Have a brand-new UI
- Adopt Clean Architecture code design
- Increase test coverage
-
Successful releases and partner integrations greatly increased the Total Addressable Market for the Android app.
-
Learned RxJava2, Dagger2, Mockito, Robolectric, Clean Architecture patterns.
-
Production experience using Android Geo-location APIs: usage, initialization, and device-specific pitfalls.
-
Consolidated 3 separate development streams, reducing un-needed maintenance complexity.
- Worked closely with partner companies to fine-tune and achieve technical requirements.
-
Designed & implemented billing system enhancements.
-
Learned Oracle PL/SQL, wrote stored procedures in a large database application.
Certifications
Conference Presentations
I wrote and presented two workshops at a conference for university students. Each workshop was 75 minutes in length and detailed the theory and practise of building web-enabled Android applications. The workshop focused on an example “Todo List” application.
Volunteerism
Mentored and evaluated elementary and middle school students participating in Lego Mindstorms robotics design competitions.
Awards
Hobby Projects
I built a navigation computer for my BMW e39 consisting of a:
- Jetpack Compose Multiplatform HMI I wrote from scratch
- firmware I wrote for a Raspberry Pi Pico RP2040
- PCB I designed myself and hand-assembled with more than 500 solder joints.
The project drew upon all of my experiences in my career and education. I used it to experiment with Jetpack Compose while I brought “the things that worked out the best” to Ford when I introduced Compose there.
I learned C++ on this project so that I would be prepared for writing C++ code on QNX for the Functional Safety team at Ford.
The completion of the project and associated documentation scratched the “I want to build a computer” itch that I have had since I first stumbled onto http://oldcomputers.net/ as a teenager.
The first iteration of retrofitting the BMW factory navigation to my BMW e39. I built middleware on a Raspberry Pi to get the steering wheel buttons to change the audio track on a Bluetooth-connected telephone.
At a 24-hour Hackathon in early 2014, I worked with Stephen Just and Jacob Ortt to re-create the elementary school fun of Mad Minutes. The idea was that you are presented with quickly solveable Calculus problems, and for every problem solved, you get an “award” in the form of an XKCD-style comic.
Qasper was my very first Android app that I wrote in University. In a team of six, we built a multi-threaded Question/Answer application similar to Stack Overflow.
I bread-boarded a Z80 microcomputer.
While building the Z80 microcomputer, I built an EEPROM programmer.
I worked with the BMW DIS software to interface with my early 90s BMW. Using an RS232 to ADS cable, I was able to communicate with the car’s engine management unit.