Senior Cross-Platform Application Engineer
Our Values:
Dream big —Be visionary, strategic, and open to innovation Build great things —Work in service of our users, always improving and pushing higher Operate like an owner —Take responsibility with bold decision-making and bias for action Win like a sports team —Be trusting and collaborative while empowering others Learn and grow fast —Never stop learning and iterate fast Share our passion —Share ideas and practice enthusiasm and joy Be user obsessed —Empathetic, inquisitive, practical
About the team:
At Goodnotes, we are driven by a mission: to connect millions of users across devices and platforms through seamless data synchronization and collaboration. As a Senior Cross-Platform Application Engineer, you will play a pivotal role in bringing this vision to life. You will work on cutting-edge challenges in networked operations, including HTTP and WebSocket communications, while building our sync engine—a fully offline-first, distributed event-sourced system. Beyond sync, you may develop collaboration features that enable users to work together seamlessly. Your work will enable users to access their data in near real-time, collaborate effortlessly with others, and trust that their information is always backed up and available. Join us in creating the infrastructure that powers meaningful connections and collaboration for Goodnotes users worldwide.
You will:
Design and build a cross-platform application used by tens of millions of users
Work primarily in Typescript and Swift, targeting Web Assembly and the web platform
Architect scalable, maintainable modules and APIs that unlock new features and support rapid growth
Implement elegant solutions with clean code
Continuously improve the development practices through automation, documentation and testing
Share knowledge through reviews, design docs, and mentorship
You will need:
Strong proficiency in systems or application programming with one or more of: C, C++, or Rust
Solid understanding of cross-platform development practices, including portable code, build systems, and FFI
Experience with Swift programming is advantageous
Experience with networking and distributed system: HTTP, WebSockets, backoff and retry, consistency models, conflict resolution, and offline-first architectures
Concurrency fundamentals and performance engineering skills (profiling, memory, async primitives)
Experience with sync engines or distributed systems
Strong computer science fundamentals and a track record of shipping production software
Excellent problem solving, communication, and storytelling skills
A love of software craftsmanship
Strong sense of the best tools for any task
Nice to have:
Experience integrating Swift with C/C++ or Rust via FFI, C ABI bridges or code generation
Familiarity with Swift as a cross-platform language (e.g. SwiftPM, Swift on Linux, SwiftWasm)
Experience with data serialization and schemas such as Protobuf or FlatBuffers
Worked on libraries consumed across multiple platforms such as iOS, macOS, Android, Windows, or Linux
Even if you don’t meet all the criteria listed above, we would still love to hear from you! Goodnotes places a lot of value on learning and development and will support your growth if needed.
Note on our stack and mindset:
Our product stack is primarily Swift, but we build Swift to be cross-platform and interoperable
We value engineers who design portable core libraries, isolate platform-specific code at clear boundaries, and use FFI to bridge languages where it makes sense
The stack:
Programming Languages: The cross-platform application has a large amount of shared common code written in Swift. Platform-specific code for non-Apple platforms is written in TypeScript.
Concurrency: We have a large, old, but modular codebase. We use modern Swift Concurrency as much as possible as we gradually move away from RxSwift
Cross-platform: We re-use our core packages on cross-platform using SwiftWasm, UI for other platforms is written using React or their respective native APIs
Dependencies: We exclusively use Swift Package Manager and frequently make new local packages
Source control and builds: We have a mono-repo and use GitHub and Pull Requests. We kick off builds using a Slack bot
Continuous Integration: We use CircleCI which means our configuration is checked in with our code. We have unit tests for all of our modules which run on every branch. UI tests are run daily and before release
Release cadence: We QA and release on a weekly schedule
The interview process:
Introduction: The Talent Team want to hear more about your background, what you are looking for, and why you’d like to join Goodnotes.
Technical Screening: A timed coding challenge on the Hackerrank platform.
Onsite live coding and technical interview: A live coding call with one of our engineers. This is where you get to see what it would be like working at Goodnotes, as well as a chance to ask any engineering questions you may have
Hiring Manager interview: A call with your hiring manager. This is the person who will be managing you day to day, working on your growth and development with you as well as support you throughout your career at Goodnotes.
Values interview: Conversations with Goodnotes teammates focused on our values, including taking ownership and building great things.
AI Literary Interview
Please note that technical interviews are held onsite in our office locations (London, Hong Kong, and Singapore). All transport, accommodation, and costs involved will be covered by the Goodnotes team.
What’s in it for you:
Remote friendly
Flexible working hours and location
Medical insurance for you and your dependents
Great annual leave allowance
Meaningful equity in a profitable tech-startup
Budget for things like noise-cancelling headphones, setting up your home office, personal development, professional training, and health & wellness
Sponsored visits to our Hong Kong or London office every 2 years
Company wide annual offsite
Fantastic maternity and paternity packages and allowances
Senior Cross-Platform Application Engineer
Our Values:
Dream big —Be visionary, strategic, and open to innovation Build great things —Work in service of our users, always improving and pushing higher Operate like an owner —Take responsibility with bold decision-making and bias for action Win like a sports team —Be trusting and collaborative while empowering others Learn and grow fast —Never stop learning and iterate fast Share our passion —Share ideas and practice enthusiasm and joy Be user obsessed —Empathetic, inquisitive, practical
About the team:
At Goodnotes, we are driven by a mission: to connect millions of users across devices and platforms through seamless data synchronization and collaboration. As a Senior Cross-Platform Application Engineer, you will play a pivotal role in bringing this vision to life. You will work on cutting-edge challenges in networked operations, including HTTP and WebSocket communications, while building our sync engine—a fully offline-first, distributed event-sourced system. Beyond sync, you may develop collaboration features that enable users to work together seamlessly. Your work will enable users to access their data in near real-time, collaborate effortlessly with others, and trust that their information is always backed up and available. Join us in creating the infrastructure that powers meaningful connections and collaboration for Goodnotes users worldwide.
You will:
Design and build a cross-platform application used by tens of millions of users
Work primarily in Typescript and Swift, targeting Web Assembly and the web platform
Architect scalable, maintainable modules and APIs that unlock new features and support rapid growth
Implement elegant solutions with clean code
Continuously improve the development practices through automation, documentation and testing
Share knowledge through reviews, design docs, and mentorship
You will need:
Strong proficiency in systems or application programming with one or more of: C, C++, or Rust
Solid understanding of cross-platform development practices, including portable code, build systems, and FFI
Experience with Swift programming is advantageous
Experience with networking and distributed system: HTTP, WebSockets, backoff and retry, consistency models, conflict resolution, and offline-first architectures
Concurrency fundamentals and performance engineering skills (profiling, memory, async primitives)
Experience with sync engines or distributed systems
Strong computer science fundamentals and a track record of shipping production software
Excellent problem solving, communication, and storytelling skills
A love of software craftsmanship
Strong sense of the best tools for any task
Nice to have:
Experience integrating Swift with C/C++ or Rust via FFI, C ABI bridges or code generation
Familiarity with Swift as a cross-platform language (e.g. SwiftPM, Swift on Linux, SwiftWasm)
Experience with data serialization and schemas such as Protobuf or FlatBuffers
Worked on libraries consumed across multiple platforms such as iOS, macOS, Android, Windows, or Linux
Even if you don’t meet all the criteria listed above, we would still love to hear from you! Goodnotes places a lot of value on learning and development and will support your growth if needed.
Note on our stack and mindset:
Our product stack is primarily Swift, but we build Swift to be cross-platform and interoperable
We value engineers who design portable core libraries, isolate platform-specific code at clear boundaries, and use FFI to bridge languages where it makes sense
The stack:
Programming Languages: The cross-platform application has a large amount of shared common code written in Swift. Platform-specific code for non-Apple platforms is written in TypeScript.
Concurrency: We have a large, old, but modular codebase. We use modern Swift Concurrency as much as possible as we gradually move away from RxSwift
Cross-platform: We re-use our core packages on cross-platform using SwiftWasm, UI for other platforms is written using React or their respective native APIs
Dependencies: We exclusively use Swift Package Manager and frequently make new local packages
Source control and builds: We have a mono-repo and use GitHub and Pull Requests. We kick off builds using a Slack bot
Continuous Integration: We use CircleCI which means our configuration is checked in with our code. We have unit tests for all of our modules which run on every branch. UI tests are run daily and before release
Release cadence: We QA and release on a weekly schedule
The interview process:
Introduction: The Talent Team want to hear more about your background, what you are looking for, and why you’d like to join Goodnotes.
Technical Screening: A timed coding challenge on the Hackerrank platform.
Onsite live coding and technical interview: A live coding call with one of our engineers. This is where you get to see what it would be like working at Goodnotes, as well as a chance to ask any engineering questions you may have
Hiring Manager interview: A call with your hiring manager. This is the person who will be managing you day to day, working on your growth and development with you as well as support you throughout your career at Goodnotes.
Values interview: Conversations with Goodnotes teammates focused on our values, including taking ownership and building great things.
AI Literary Interview
Please note that technical interviews are held onsite in our office locations (London, Hong Kong, and Singapore). All transport, accommodation, and costs involved will be covered by the Goodnotes team.
What’s in it for you:
Remote friendly
Flexible working hours and location
Medical insurance for you and your dependents
Great annual leave allowance
Meaningful equity in a profitable tech-startup
Budget for things like noise-cancelling headphones, setting up your home office, personal development, professional training, and health & wellness
Sponsored visits to our Hong Kong or London office every 2 years
Company wide annual offsite
Fantastic maternity and paternity packages and allowances
