Why did I write this?
- To have a record of my work at Facebook
- To have examples of behaviours / complex challanges ready and fresh in memory for interviews
- To allow my interviewers to get a deeper scan of my experience
[Project] Navigation Chain
Summary
Facebook navigation pattern is to browse some content feed, open content detail and return to feed. A typical navigation pattern would look like this: Newsfeed -> My friend Kolin's profile -> Some post on their timeline -> Back to profile -> Back to Newsfeed -> Open fullscreen video.
Typical analytics frameworks work in the following way:
- At each navigation record the newly visited screen, send it to the analytics backend, for example google analytics
- Instrument custom event, in our case video play with additional attributes. When looking at the video event itself, based on the timestamp in fur the current screen.
What I did
- Implemented Navigation Chain for Facebook iOS
- Participated in evaluating use cases and choosing implementation
- Prototyped and presented Spark pipeline offline solution, was not picked because of more complex client integration
- Reviewed all Android code for the mirroring implementation
- Helped Jarman Rogers integrate iOS state restoration for Facebook iOS
- Supported people having questions / experiencing issues with the framework
- 3 (per week) x 4 x 12 = 144
- Nature of the questions
- Data issues (Covered half)
- Inconsistencies with 2d channels aka custom attribution methods they had before
- API access (All Facebook iOS, half Android)
- Race conditions
- Caching
- Access from a custom use case - without a user session, custom UI framework
- Server (Half, split with Laura Zha)
- Enrichment issues
- Onboarding FAQ (1/3d Laura Zha, George Zhao)
- Planning
- Talked with teams to make sure our framework is the right fit for their use case, helped design the solution end to end
- Data issues (Covered half)
- Oncall support nature, rotated with the above mentioned collegues
- Helped initialize and maintain documentation
- Partially initiated the merge of Facebook and Instagram documentation
- Helped keep code in good condition
- Did server side code cleanup after merging codebase with instagram - 1000s of lines cleaned up
- Delegated most cleanup to bootcampers
- Suggested and added JestE2E tests for logging
- Did server side code cleanup after merging codebase with instagram - 1000s of lines cleaned up
- Participated in team planning and suggested multiple efforts that the team undertook
- Focusing on new framework clients - prioritizing adoption and solving real analytics issues teams were expereiencing
- Troubleshooting and fixing a Site Event that would have affected people posting pictures on Facebook from Groups
- Prevented a likely Site Event by discovering a bug in impression logging for Facebook search
Notable sub-projects
- Navigation Chain Context
- Evaluated different implementation paths
- Integrated with an existing framework saving tons of effort for all platforms
- Build partnership with that's framework team
- Supported users
- Evaluated different implementation paths
- Sub-navigation support
- Made it easier to add nav chain to GraphQL mutations by passing navigation chain through GraphQL http headers instead of body
- Migrating Watch (All video plays) to our attribution framework
- Suggested solution and helped fix image load attribution
- Added generic coverage from Facebook Lite
- Used a codemod - modified 100s of callsites efficiently
- Evaluated a potential transition to PFH (Product Feature Hierarchy) instead of our custom Enums for each screen.
- Did the dirty work of manually mapping and reading out to the team the stats. Route not taken
- Refactored navigation logging for the family of apps
- Modal navigation was treated differently by logging
- Fixed multiple bugs related to double logging - for example fake push
- With help of onboarding new employee simplified navigation analytics pipelines saving ~1000 lines of code
[Project] Siri Shortcuts
Feed Facebook usage to iOS for better Spotlight and Siri suggestions
- Found the project, assessed potential impact.
- Created detailed project plan in collaboration with previous owner of the project
- Also collaborated with internship program manager to get the plan approved
- Drove meeting and took notes during a meeting with Apple discussing app intent integration for Facebook
- Volunteered the intern to present current integration and our plans
- Asked questions to determine how we can maximize Facebook rich ability using unreleased iOS 16 app intents, complied with apple guidelines
- Took notes during the meeting, condensed into company wide recommendation for using new app intents API. We have Learned a lot about the internals of Siri and spotlight will work past iOS 16
- Suggested adjustment to the interne project, adjusted based on internship project manager feedback, communicated with intern
- Filed and drove to completion reviews: #skills/collaboration
- Internal Privacy Review - includes describing what data is being shared with Apple
- Apple Store new feature review - involve creating a custom account with feature enabled, providing instructions for testing, collaborating with release team, interacting with apple reviewers
- Helped intern to onboard
- To Facebook systems by making myself available to answer any questions, especially the beginning of the internship. By pair programming
- Set up introductions with 2 peers
- Buck, modified build system to extract .appintents #skills/build-system
- Identified unlisted anywhere binary within XCode, played around with it to find what flags matter, documented it.
- Asked for help numerous times in internal dev community, kept updating posts with progress
- Looked for native buck rules implementations, assessed how difficult it would be to re-implement something like that. Example apple assets rule
- Created a simpler rule - that just run a bash command. Got it to work
- Collaborated with the intern on how they can unblock themselves by factoring out the work into multiple pieces
- Evaluated intern
- Put together performance review based on our axises
- Presented my intern's performance to the engineering director
[Project] Scroll away
TODO
[Project] Deep Links
Roughly I have analyized the domain by quering existing logging datasets related to deeplinks and reading the codebase. After planning out the project ofboarded part of the implementation to a colleague. Reviewed their code.
The goal was to modernise the deep links and present them in a sheet for a more modern iOS look. This would also allow the
Random
- Participated in 2 hackathons
- Improved filtering UI for an internal data query tool (Scuba)
- Social Audio Map - public audio guides to physical locations by Facebook users
- Actively provided feedback (bug reports, feature requests and focus groups) for VSCode @ Meta, especially for iOS development
What I learned
- Project managment
- Team roadmapping
- Logging
- Refactoring complex code bases
- Working with undocumented codebases by debugging and gathering tribal knowledge
- Buck build system and how to modify it
- Proper dependency injection
- Dealing with breakages - iOS, Server (Hack / PHP) and SQL pipelines
- Complex configuration creation, maintanance and communication to the team
- Being the lead on a high impact project (scroll away)
- Using data to asses impact prior to investing resources
- Quick prototyping
Conflicts / disagreements
- Potential API users would show up and ask for something to be implemented that is out of scope for the project. Provide guidance and alternatives, provide with resources to implement the feature themselves.
- Disagreements with the team on data structure
- Disagreements on core implementation
- Request for long tail coverage