# George L. > Senior Software Engineer @ Duolingo Location: Pittsburgh, Pennsylvania, United States Profile: https://flows.cv/georgel ## Work Experience ### Senior Software Engineer @ Duolingo Jan 2024 – Present | Pittsburgh, Pennsylvania, United States ### Senior Software Engineer @ Bunch Jan 2022 – Jan 2024 | Toronto, Ontario, Canada Bunch Unicorn: • Implemented UI + P2P synchronization logic for watching YouTube together in a party • Lead the clubs project, which allows up to 50 people to join a club and chat ◦ Worked on club creation + deletion flows, club presence, club roles, club chat, push and in-app notifications, analytics • Worked on status profile customizations (weather, emote, pose) • Added AI avatar generation through text (dictation), selfie, gallery upload, Bitmoji • Implemented games tab and catalog, including search and all related screens to select and launch into a game from a party ◦ Created app installation scanner and tracker on both platforms to suggest games • Implemented space tab, including search, recent spaces, joining party by code ◦ Includes gRPC API, repository, view model, view, caches • Added batch DB writes to improve search performance • Added temporary and permanent ban logic as part of toxicity model • Created in-app review flow for iOS and Android • Built expanded and minimized video overlay + party controls • Built parental controls system to control various actions kids can take in Bunch • Created a PoC to update Bunchie status and pose based on live status update from Discord and Line Bunch Game SDK: Lead the iOS SDK that provided voice and video chat integration with games, used by Miniclip. • Designed every layer, including API, persistence, repository, view model, UI • Added 70% test coverage for all relevant business logic • Added programmatic controls for video bubble, and expandable / collapsable state • Implemented Session handover between SDK and Unicorn app • Added automatic party restoration in boot path • Wrote extensive sample app for testing out all SDK features • Built presence system to notify friends when user is playing the game Bunch iOS Widget: • Lead the widget extension project to view friend statuses from home screen • Added all networking logic (retrier, auth), custom SwiftUI components ### Software Engineer @ Bunch Jan 2021 – Jan 2022 | Toronto, Ontario, Canada Bunch Presence SDK: • Implemented the iOS UI + KMM business logic for most of the presence matrix between the user and a friend, handling the following combinations: ◦ online / offline, alone vs in a party, public vs private party, full party • Refactored business logic out many existing friend list views and into KMM view models, conforming to MVVM ◦ Increased testability across iOS and Android by leveraging JUnit and Mockk for view model tests • Introduced UserDefaults to the SDK for persisting configuration options, and Keychain for storing auth credentials • Rewrote existing event bus architecture: ◦ Fixed retention cycle issues due to events having reference to queue ◦ Implemented event logger as event observer • Set up CI/CD pipeline with BitRise, with automated notifications to Slack • Added various in-app and push notifications (Eg. Friend online, etc.) Bunch Palette: Lead the project to create a CocoaPod for Atomic Design based design system • Allows testing components in isolation, rapidly iterating without compiling KMM • Supports dark mode, standardizes constraint spacing, colors, fonts, etc. • Has both SwiftUI and UIKit support, with SwiftUI extensions to bridge to KMM flows • Used to prototype party overlay with dynamic video feed layout Bunch Unicorn: • Implemented the original onboarding flow, with support for Apple login, phone number auth, Facebook auth, and Snap login. Supports Firebase deferred deep link for express onboarding • Added friends list feature, which includes ranking, search, presence session events, profile page, suggested friends, caching for search results Bunch Chromecast Extension: • Allows friends to play games on their devices, while having the party’s video streams displayed on the TV similar to Jackbox.TV Ethereum Wallet Connect: • Built as an internal hackathon project, allows users to connect their Ethereum wallets to Bunch so that we can read transactions into Bunch avatar clothing ### iTunnelBear Cub (iOS and macOS Software Engineer) @ McAfee Jan 2020 – Jan 2020 | Toronto, Ontario, Canada Returned to TunnelBear again (surprise!?) to design more elegant solutions and solve problems. This time, with a bigger emphasis on CI and macOS. TunnelBear iOS + macOS: • Replaced MirrorDiffKit with a custom solution to dynamically identify and log differences in AppState. Uses code generation via Sourcery framework. • Wrote extensive unit tests for VPN connection queue, Keychain accessor, and Store + Actions (Redux) systems ◦ Discovered and fixed various miscellaneous + control flow bugs in connection queue ◦ Fixed existing logout issues related to API keychain token not deleting. The parameter list in SecItemDelete was incorrect. • Created FilePersistence, a disk persistence system that supports custom crypts (AES256-CBC), serializers, and IO managers to persist models without UserDefaults or Core Data • Refactored all App identifiers, bundle identifiers, and app metadata into a standardized library • Updated CocoaPods + codebase to follow updated dependencies (Alamofire, BrightFutures, CocoaLumberJack, TrustKit, etc) • Updated analytics architecture to support multiple frameworks. Re-added AppsFlyer and added Kibana integration ◦ Created EventsManager to synchronize analytics events, preventing race conditions caused by receiving new events while uploading old events • Restructured persistence system to fallback to API calls on disk load failure during app launch TunnelBear macOS: • Redesigned launch flow to use window coordinators ◦ Split onboarding responsibilities into LoginCoordinator, OnboardingCoordinator, and EmailVerifyCoordinator • Rewrote notification logic in macOS without BrightFutures, with support to receive in-app messages via MessageService • Fixed all AppCoordinator window animation bugs • Implemented CloudFlare captcha support CI: • Integrated SwiftLint as CI job, running only on branch diffs against master on commit • Decreased build time (~3 minutes) by only running tests affected by branch changes, as well as dependency tests ### iTunnelBear Cub (iOS Software Engineer) @ McAfee Jan 2019 – Jan 2019 | Toronto, Canada Area Returned to TunnelBear after McAfee acquisition to work on both iOS VPN app "TunnelBear" and "PolarBear" VPN SDK for McAfee clients. I became the lead developer for June - July on the TunnelBear iOS project, responsible for shipping and maintaining v3.0 - v3.1.2. This represents the biggest update in TunnelBear history, with the app being completely re-platformed with "PolarBear" SDK. PolarBear SDK + Networking (Swift): • Added local notification support and connection timeline feature to SDKDemo app • Added connection error handling feature to PBTunnel + SDKDemo • Added send message capability to TunnelBear SDK • Updated iOS client to support BlueBear v2 gateway, with lots of BlueBear connection / synchronization logic improvements • Fixed connection issues (ex. Removing incorrect reachability logic from certain parts of codebase, etc.) • Fixed critical bug which continuously spammed analytics endpoint with app state refresh TunnelBear iOS (Swift + Objective-C): • Implemented custom app rating framework to replace deprecated ”iRate” dependency. • Rewrote app migrator to properly handle account and connection state transition for existing v2.x users • Rewrote existing in-app messaging feature to support re-platform infrastructure • Standardized logging, remove all print / NSLog, introduce dynamic logger injection between modules • Implemented support for multi-part form data requests for uploading logs • Implemented a fallback log upload solution with custom cryptosystem to encrypt logs • Fixed re-platform crashes (TBIntent, heightForLabel crash) • Rewrote entire logging library in Swift, with cleaner code + decoupling other parts of codebase • Removed "objective-zip" dependency framework which fixes macOS unarchiver issues with zipped logs • TBMapKit improvements and fixes (Smoother panning, fix incorrect animation states) ### Software Engineer @ Bunch Jan 2018 – Jan 2018 | Manhattan, New York I was invited by Bunch to return for the opportunity of joining the Betaworks Livecamp accelerator program as one of Bunch’s co-creators. There, I learned, collaborated with, and networked with various companies in the livestream space, including Mixer and Twitch. Aside from participating in the program, I held many engineering responsibilities for the Bunch application. Bunch (React Native + Redux) • Created DynamicPopup and DynamicModal, two custom React Native ScrollView components with multiple rest states and the ability to support sticky headers and footers. DynamicPopup has since replaced every notification UI popup that exists in the app, and has also seen usage in the core app flow - from presenting a scrollview game catalog, to displaying other player profiles. • Rewrote existing notification system to fix duplicate notifications, improve code reusability with a standardized PopupNotificationView component, and expand notification customization with DynamicModal usage. • Refactored and rebuilt the profile screen flow to match updated designs. Merged UI for user profile and friend profiles to reduce duplicate code. • Developed an improved camera layout system in React Native that allows developers to easily add camera position animations and transitions for each lobby participant. Used to animate cameras as members join or leave a lobby. • Integrated CallKit as a proof of concept way to join a game lobby with friends from outside the app. • Began migrating and writing replacement components for Bunch Android. Oh, and we raised $3.8M in our recent Seed Round :) ### iTunnelBear Cub (iOS Software Engineer) @ TunnelBear Inc. Jan 2018 – Jan 2018 | Toronto, Canada Area Developer for content blocker app "BlockBear!" and VPN & wifi proxy app "TunnelBear". Lead contributor to the TunnelBear custom MapKit project. BlockBear (Swift): • Migrated the entire codebase from Swift 1 to Swift 4 • Fixed many existing UI bugs and brought native support to the iPhone X by taking advantage of the newly introduced safe areas • Reimplemented the BlockBear font blocking feature, which was previously broken • Optimized the BlockBear processor reduce the time needed to import and process the website block list • Uploaded the updated website block list to S3 TunnelBear MapKit (Swift + Objective-C, shared framework): • Developed TBMapKit, a CocoaPods MapKit framework for iOS and macOS that increases map render speeds by selectively caching and rendering map regions. Refactored TunnelBear’s tunnel animation framework into TBMapKit. TunnelBear iOS (Swift + Objective-C) • Discovered a solution to WKWebView’s bug of blocking cookies on first connection, which fixed CloudFlare cookie verification. Unblocked and shipped the rate-limiting feature to iOS. • Fixed a wide range of UI bugs and threading issues causing connection failures and improper UI to display • Refactored TBMainViewController consisting of 3000+ lines of Objective-C code into four Swift controllers, segmenting responsibilities from bloated main controller class. • Lead the trials iOS project, which meant integrating Apple’s free trial subscription payment API into TunnelBear. I was responsible for completely replacing the old launch / on-boarding flow with the new flow, and integrating Apple’s subscription method globally in the app. ### Software Engineer, Hacker in Residence @ Z1 Jan 2017 – Jan 2017 | Toronto, Canada Area Co-creator of smart calendar app "UpNext" and group video chat & gaming app "Bunch". UpNext (Swift): • Wrote a shared library for today extension widget and rich notifications, using Stevia and Bonmot frameworks to create dynamic UI layouts for each calendar event type. • Optimized RxSwift signal funnel when parsing calendar event data from Realm, reducing amount of debounced asynchronous signals by over 5x. • Designed the foundation for app widgets. ◦ Created the UpNext, meeting next, and user permissions widgets for the home screen. ◦ Created the location, call, meeting details, and quick action widgets in the meeting details screen. • Integrated Zoom’s MobileRTC stack, allowing users to make Zoom conference calls directly from a calendar event. • Developed the onboarding flow and hamburger sidebar menu. Using a combination of Auto-layout and Springs and Struts, I created universal iPhone layouts for both features. The result was a ~20% overall increase in app retention rate and 81.51% completion rate for on-boarding. Bunch (Swift + React Native & Redux): • Wrote a library to simplify OpenTok RTC framework interface for Swift, and bridge communication to React Native. • Designed two prototype game video overlay screens in React Native to enable players to see the video streams of friends while playing games. • Created early prototype for dynamic video stream layout adjustment in the room view. ## Education ### Bachelor of Computer Science in Computer Science University of Waterloo Jan 2016 – Jan 2021 ### High School in MaCS Program (Math and Computer Science) William Lyon Mackenzie Collegiate Institute Jan 2012 – Jan 2016 ## Contact & Social - LinkedIn: https://linkedin.com/in/george-lim - Website: https://george-lim.github.io - GitHub: https://github.com/george-lim - Website: https://www.producthunt.com/@georgelim --- Source: https://flows.cv/georgel JSON Resume: https://flows.cv/georgel/resume.json Last updated: 2026-03-22