Overview
Joined Sansan, Inc. and became part of the team developing the Sansan sales DX iOS app.
Through development on this team, learned
team development practices for feature-rich apps. Learned the necessity of
separating responsibilities in apps with many features.
Description
From January 2024 to December 2024, joined Sansan, Inc. and became part of the team
developing the Sansan sales DX iOS app. Primarily took responsibility for
leading OS support and platform renewal for the iOS app and
standardizing technical decision-making through ADRs.
For leading OS support and platform renewal for the iOS app, drove the
entire iOS 18 / iPadOS 18 / Xcode 16 support effort, from workload estimation and task
creation to test preparation and post-release crash investigation. Among these, two
cases are worth highlighting from a decision-making perspective.
The first is the
deliberate decision not to adopt the floating tab bar made in the context
of OS support. Regarding the floating tab bar (a new tab bar UI that appears floating on
the screen), newly recommended by Apple as a UI pattern in iPadOS 18, the investigation
led to the decision to maintain the conventional tab bar, prioritizing consistency with
the existing UI design. Rather than following Apple's newly recommended OS feature, this
was a technical decision that prioritized product-wide UX consistency. Owned the process
end-to-end, from investigation to implementation completion.
The second is the
refactoring to separate tab bar management responsibility, led in the
context of platform renewal. Led a design that separated tab bar management
responsibility from the View Controller to a Router, as a refactoring affecting more
than 30 screens. In a challenging area where tab state can be updated from multiple
paths—initial display at app launch, user tab operations, and deep links from
outside—chose separation after organizing the trade-off between "testability and future
extensibility vs. stability of the existing structure." As a result, unit testing of
screen transition logic became possible, and deep link handling became more transparent.
Drove the effort end-to-end, from design to review response.
For standardizing technical decision-making through ADRs, documented
development and operational rules accompanying the iOS / Android monorepo consolidation
as ADRs (Architecture Decision Records). The target audience was approximately 15
engineers across three teams: iOS, Android, and QA. The emphasis was on documenting not
only the conclusion but also the decision criteria and alternatives as a set, so that
the background of each decision would be preserved for members joining later.
The main topics were the following three. For
selecting the CI trigger method, compared a mechanism that triggers the
pipeline via commands from Slack (Slack Bolt: a bot framework running on Slack) against
the GitHub Actions UI, and adopted Slack Bolt with the deciding factor being the ability
to integrate communication and CI in the same place. For
monorepo branch operation rules, based on the GitLab Flow operated on the
iOS side, formulated an operational policy that also addressed existing issues on the
Android side. For
rules for incorporating other branches during parallel projects, developed
guidelines that balance development speed and quality, anticipating the three-team
structure.
In parallel with the two lead roles above, also engaged in ongoing cross-team
initiatives. For incident response and QA collaboration, served as the
primary release owner during incidents, and proposed a risk-severity evaluation process
for bug reports to the QA team, which helped accelerate prioritization decisions. For
development environment improvements, led the comparative evaluation,
stakeholder interviews, and budget request for three UI debugging tools, seeing the
introduction through to completion. For technical outreach, worked on
planning and operating joint study sessions co-hosted with five other companies, and
contributed to the technical blog.
key words
Swift, UIKit, SwiftUI, Kotlin, Objective-C, KMP, ktor, koin, Swift-DocC, SwiftPM, CocoaPods, Carthage, GitHub Actions, CircleCI