chris tava head of software engineering - nyc cleaning ... · back-end stacks: node vs...
TRANSCRIPT
Chris TavaHead of Software Engineering - NYC
Cleaning code as you go - High Impact Software Engineering (a case study)
NY Developer Week 6/19/19
About Tempus - We are hiring in NYC :)
● Tempus is a biotech company that's building the world’s largest library of molecular and clinical data
● We provide genomic sequencing services with our CLIA certified laboratory and state-of-the-art bioinformatics pipeline
● We empower physicians and researchers to make real-time, data-driven decisions
● For more information, head on over to tempus.com
High Impact Software Engineering - Cleaning code as you go
● Experience & Perspective● Speed & Accuracy● Software engineering as a financial investment● Risks & Unit Testing● Complexity & Refactoring
Experience & Perspective
To be great at Software Engineering
Experience
● How to do things● How NOT to do things
Perspective
● What to do● What not to do
Experience
● How would I like my software to be built?● Which tooling do I want to use to build my software?
Experience - Engineering - Tradeoffs
● Front-end stacks: react vs vue vs angular
Experience - Engineering - Tradeoffs
● Back-end stacks: node vs java/scala/kotlin vs python or go
Experience - Engineering - Tradeoffs - How
● Would you pick your favorite language / stack?○ The one you have the most experience with
● Would you build a rubric and try to make the decision more objective?
Experience - Engineering - Tradeoffs - How - Decision Time
● Take a combination of objective , subjective factors and decide● Build up your experience!● Follow through
Perspective
● What to do● What not to do
Perspective - Business - Influence
When
● Whats the priority?● How often should we be meeting as team?● What do we talk about?● Should we write more unit tests?● When do i need to refactor my code?
1 week sprints
Pros
● Producing a ton of product● Super-agile: constantly discussing changing things
Cons
● Lots of meetings● Seeing rework
Accuracy - Quality Control
● Design reviews● Linting & unit tests● Code reviews● User acceptance testing● Performance tuning
Software Engineering as a financial tool
Software engineering as a financial investment● 12 weeks of software engineering (3
engineers)● 12 weeks payback period
Strategy & Product
Software engineering is a financial tool for businesses
● Companies count on software engineers for just about everything these days
● This is why we are demand and the salaries are good● Every minute counts● Growing businesses like software to be built fast
○ Because efficiency gains are like gasoline to a fire
● Businesses like certainty and dont like risk
Risks & Unit Testing
Experience and perspective is used to avoid, mitigate and accept risks
● Building software is an expensive and risky endeavor● There are too many variables● Engineering scales because of trade offs
○ Just developing & programming - doesn’t scale
● B2B software companies have a little less variability because they dont have to directly crack consumer behavior
○ But companies are and should be demanding as enterprise SAAS customers
● B2C software companies have to deal with the fickle consumer
○ Tackle behavioral change over time
Let’s talk about programmatic testing
● I love programmatic testing. Hopefully you do too.● Its 2019, its simply not defensible to NOT be writing tests
○ Companies are getting smarter about the quality of their software engineering■ They are really starting to understand the value of clean code
Server Unit test Coverage - March
Server Unit test Coverage - April
Server Unit test Coverage - May
Client Unit test Coverage - March
Client Unit test Coverage - April
Client Unit test Coverage - May
Complexity & Refactoring
Tail winds
● Decreased IT costs - cloud storage● Decreased genomic sequencing costs● Increased understanding and application
of machine learning
Biology is complex
● DNA, RNA, Protein Model is basic● Reality: scientific advances are growing
○ Immuno oncology○ Biomarkers
Code Complexity - Branching
Lets take a look at the increase in code complexity through Jest Branching
What is branching logic?Where the code can take more than one route, i.e. it branches. A couple of examples of branching statements are if/else and switch statements.
Branch coverage tracks which of those branches have been executed so you can ensureall routes are tested properly.
Code Complexity - Branching - Increasing - March
Code Complexity - Branching - Increasing - April
Code Complexity - Branching - Increasing - May
Need to refactor?
● Can compare branching logic coverage to the # of lines and # functions covered
Backend - refactoring
● Fix how we get diseaseStages and simplify querying● Refactor diseaseStatusMatches● Matching performance improvement
Ultimately, we are going to rip out the hard coded business rules and express them using an externally configured expression library.
Frontend - refactoring
● Client cleanup● Make histology valuesets dependent on disease site● Preload all valuesets on the server● Moved shareable react components to commons
Putting it all together
● Value to business - increasing○ Speed & Accuracy○ Making an impact
● # of lines, functions covered in unit testing - increasing● Small amounts of refactoring were done
JavaScript, React and Node make it easy● Complexity is increasing...
Wrap up
What i’ve presented to you is using experience and perspective to balance
● speed and accuracy● complexity and refactoring● make rapid changes to a code base● and prevent regressions through unit (and other types) testing
Ultimately using software engineering as a financial investment
Thank you for your interest and attention.
Thank you to my team: Fernando, Eterna, John & Charlie - you guys Rock!
Speaker Hour - right after this talk - Room B (Upstairs) - Hope to see you there
tempus.com