Ancestry Android Developer Skills, Techniques, and Patternsbecause its not all about the code
About Ancestry Ancestry is the largest provider of family history and personal DNA testing, harnessing the information found in family trees, historical records, genetics and health history to help people gain a new level of understanding about their lives. Ancestry has more than 2 million paying subscribers across its family history websites and approximately 1.2 million DNA samples in the AncestryDNA database. Since 1996, more than 16 billion records have been added, and users have created more than 70 million family trees on the Ancestry flagship site and its affiliated international websites. Ancestry offers a suite of family history products including Archives, Fold3, Newspapers.com and AncestryDNA sold by its subsidiary, Ancestry.com DNA, LLC, and the AncestryHealth product, offered by its subsidiary AncestryHealth.com, LLC. Ancestry has more than 1,300 employees located around the world, with 1,000 employees in Utah; 175 employees in San Francisco, California and approximately 70 employees in Dublin, Ireland.
A day in the life at AncestryLets take a stroll
Morning timeGet a drink, put your headphones onTime to grab a storySprintsAgile Manifesto
StoryYikes. The feature in the story is bigger than we sized itBuild or buyThird party librariesHow to choose?
How to find librariesPrimarilyGit hub - codepath/android_guidesandroid-arsenal.comSecondarily Google itGithub search
How to choose librariesWho developed it? Google, Square, Jake WartonBig names (Facebook - flatbuffers)How complex is it?Do other developers respond to it at stackoverflow? Reddit?Github How many stargazers? When last updated?
Putting out firesEmbedded QA finds a nasty bugIs it in the store build?Check Crashlytics (fabric.io)
Its a bad one :(Bug is in the store build and crashlytics shows it is widespreadGotta halt work on the story. You created a feature branch right?git flow (Thank you Vincent Driessen)NPE (Maybe Kotlin for the next app)Fix or Bandaid?
Bandaid it!Get it stop crashing for the users nowMake a new bug to get to the bottom of it later
No! Fix it!Geez, you want to be a good engineer dont you?Variables includeTimeTeam
Get some more eyes on itYou made a changeCant just check it in to the Master, thats sacredEven if you really want toGet it on its own branch Have other devs inspect it firstThen merge!
Make a new buildBuild machine makes a new build for the storeQA gets their hands on it and tests your changesThumbs up or downInform Project Manager Shes sitting between you and your users
Lunch!Its actually importantSolo if your in the groove or really busyShaky Leaf cafe (soon to get Pizza oven!)Otherwise hang with team and talk shopWell ok, maybe you can talk about other stuff too
Lunch++Ping pongFoosballYogaBack massagesSoccer
Back to the storyIve added a third party library thats going to save me some time! Huzzah!But now Im faced with a design decisionMaterial Design PatternUX DesignerRefactor some other stuff around the area you are working in
PatternsMinimal disruptionUse the pattern that is already thereIf it needs refactoring, think about the consequences of doing it nowEasy? Go aheadNot so easy? Make a tech story
Design PatternsKeep you ears openSome patterns in Java are anti-patterns in AndroidFactorySingleton (not as bad as you think!)AdapterIteratorObserver
Think about testingQA will love youUnit testsJUnitDaggerSave a lot of headacheFORCE yourself to do them
So how is it going?PM wants to see how the work is progressingMay want to head him off at the passBetter to get input as soon as you make some headwayLaw - All changes are make to handle the further they are away from the end user
Story created In Progress Almost Done After merging
And dont be like this
Backend APIThe story needs some more data from the backend RESTDocumentation is either old, bad, or nonexistent What to do?
CollaborationAgile Manifesto - The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.Feature Teams vs. Core TeamsEmbedded Backend/UX/QA/PMDivision of LaborSee what the iOS team has done!Learn a little Objective-C and Swift
Your not just AndroidYou are mobile!Radicalized Fanboyism is bad!
CollaborateBreak out of the introverted stereotypeNot good for youNot good for the companyDont spin your wheels. Not getting it? Ask!
Take a breakPay the cat taxVideosConference Performance PatternsDesign Patterns
Head to the meetingPM has a list of cool features he wants inSize the storiesFibonacci numbersMyth of the man-hour
Wrap it upPut finishing touchesWrite up the test caseMake it good one. No half-asses. Think edge casesCheck it in, make a pull requestMark it (Target Process) and let QA take over
Go home. Do something elseDig into something you ran into that day you didnt fully understandMake a list of these
Its Thursday! Tech day!Code rot, technical debtTech storyI wanna do
Super Huge Refactors Suck in some help from the feature teamsCooperation with other PMsTech days for weeksTest! Test! Test!
FedEx DaysYou got 24 hours to deliver
Mobile Hack-a-thonLike FedEx Days but you get to sleep at nightCollaboration
Ancestry Engineers Conference2 Days every summerSan Fran, Ireland, UK, GermanyFree shirt!Can do your own presentationGet to stand up and rant if you wantPlay time
In ConclusionSkillsAndroid SDK, Java, Third-party libs, JSON, SQLCommunication/Collaboration, Agile ProcessesTechniquesCheck with the team and PMs as you goTestingPatternsFollow what Google has already set as an examplePassion!