13. Early Design Mistakes
• Not understanding or knowing the requirements
• Over or under architecting
• Choosing the wrong tools
• Premature Optimization
• Management fiat made with ignorance or bad data
15. Loan Against the Future
• Get it done fast!
• Grouping data poorly
• Hardcoding
• Upcoming technology will fix it
• Leave testing and documentation for later
Technical Debt
61. Reasons to consider
Non-Relational Databases
• Ephemeral Data (caching)
• Hierarchical Data
• Other data structures that don’t easily map to relations
• Seating charts (Eventbrite!)
• Organization charts in dysfunctional companies
62. Pro-Tip
Would it work in a spreadsheet?
relational databaseYES!
No! non-relational database
95. Salesperson’
vs
That person you just met who might
possibly has a vested financial interest in
what they are recommending.
Your engineer’s recommendations
Mistake: Management Fiat
96. Your engineer’s recommendations when they
constantly tell you how smart they are.
!
vs
Burning your
money in a fire.
Same result, but faster
Mistake: Management Fiat
http://commons.wikimedia.org/wiki/File:Burning-money-and-
yuanbao-at-the-cemetery-3249.JPG
97. Your engineer’s recommendations when they want to
continue using a 10+ year old legacy platform
vs
The Bus Factor
Mistake: Management Fiat
http://en.wikipedia.org/wiki/File:GMBus.jpg
101. • Ignore corporate marketing hype
• Even for corporate open source projects
• Unless…
Choosing tools
It’s software for popular proprietary hardware
103. Is there an Ecosystem?
• Python, Django, Flask, et al
• Python package Index
• Django Packages
• Language + Framework means lots of optimized
packages already exist to do much of the work.
Tools with traction have extendable components
109. Unless your project is
about reinventing wheels
http://commons.wikimedia.org/wiki/File:Triple_Rotacaster_commercial_industrial_omni_wheel.jpg
110. Pro-Tip #1
Toolkit Ecosystems and Engineers
If engineers don’t know that tool ecosystems exist,
consider them junior.
http://commons.wikimedia.org/wiki/File:Fawnpuppy.jpg
133. Management Pro-Tip
Engineers who consistently
refuse to write tests lower
their bus factor to 1.
Prepare to
keep them foreverhttp://commons.wikimedia.org/wiki/File:Ride_On_5312_at_Glenmont.jpg
148. Bad
Foundations
are Fixable
W. Lloyd MacKenzie, via Flickr @ http://www.flickr.com/photos/saffron_blaze/
With enough
engineers, money, and
headaches, you can fix
anything
155. Switching Tools Too Early
• Changing to the unusual datastore de-jour
• Trying a new programming language
• Switching out template languages.
• Changing Application Frameworks
before attempting to improve the database
156. Careful of the hype
Replacing Tools
mobile site
Went from Rails to Node.js.
Giant Improvements!
!
(A coincidence, perhaps?)
157. Node.js was just part of the story
They also modernized servers
and added more.
Replacing Tools
Careful of the hype
158. Replacing Frameworks
But recognize excitement
Clearly Linkedin Engineers were
excited to work with Node.js
Engineer interest in tools is important.
It inspires us to do great things.
179. Case Study: Every Project
• Your project has been around for a while
• Problems
• Fixing bugs is hard
• Adding features is hard
180. Why is it harder?
• Project is no longer the bright and shiny
• Adding features adds to complexity
• Bugs caused by unforeseen edge cases
• Not enough tests make catching developer introduced
bugs harder
• Mistakes at the beginning are really starting to show
Original Engineer(s) was an Idiot
182. I’ve yet to join a project
where I didn’t feel like
ranting all the time
183. Rant Time!
• Why use a relational database?
• Why not use a non-relational database?
• Why this programming language?
• Why not use OO or functional programming techniques?
• Why use OO or functional programming techniques?
• What the heck is this programming pattern anyway?
185. Hindsight is 20/20
• No one predicts with 100% accuracy
• Not on software projects
• It’s easy with hindsight for us to complain about the
decisions made.
186. Reality Check
• Making accurate predictions is hard
• Projects grow organically
• At least you are getting paid to work on this, right?
187. Be Understanding
• Don’t be a jerk.!
• Try to understand why things evolved the way they did.
• Forgive your predecessor
• They can provide useful information!
• Circumstances can and will be reversed
189. Why is it harder?
• Project is no longer the bright and shiny
• Adding features adds to complexity
• Bugs caused by unforeseen edge cases
• Not enough tests make catching developer introduced
bugs harder
• Mistakes at the beginning are really starting to show
Original Engineer(s) was an Idiot
HOW
DO WE FIX THIS?
204. Any place this function
or method is used…
Write a test!
205. Release Early and Often
• Rather than do massiveupdates periodically
• Do incrementalreleases constantly
• Users respond more favorably
• Bug management is easier
206. Use Feature Flags
• Turn new features off and on as needed
• Libraries can help you
• Use it for A/B testing
• In use at Eventbrite and others