SlideShare a Scribd company logo
DATABASE
HORRORS
Alex Papadimoulis
PostgreSQL Conference Europe 2017
WHO IS THIS GUY?
▪ From Tokyo, Japan
▪ よろしくお願いします
▪ Long-time relational advocate
▪ CELKO is a personal hero
▪ Inedo: Tools for DevOps
▪ Databases need DevOps, too!
▪ Bad-code Expert
▪ The Daily WTF
FORMAL DATABASE
EDUCATION?
Let’s do a quick survey!
APPRENTICESHIP
PROGRAM?
LEARNED AS YOU DID?
(TYPICAL) RESULTS
How did you learn?
Formal Education
Apprenticeship
As I did
PROGRAMMER’S SAWHORSE
▪ Needlessly Complex
▪ Difficult to Build
▪ Structurally Deficient
RELIABILITY & REPEATABILITY
▪ Devices
▪ Tests
▪ Results
▪ Operators
▪ Readings
RUNNING THE NUMBERS…
▪ 1,000’s of Devices
▪ 10,000’s of Tests
▪ 100,000’s of Results
▪ 1,000,000’s of Operators
▪ 10,000,000’s of Readings
TEN MILLION READINGS
▪ In a Single Table!?!?!
36,000 TABLES
RULES OF OPTIMIZATION
1. Don’t Do It
2. (For Experts Only)
Don’t Do It Yet
-- Michael A Jackson, 1974
http://docapp8.doc.state.ok.us/pls/portal30/url/page/sor_
roster?sqlString=select+distinct+o.offender_id,o.social_s
ecurity_number+doc_number,o.social_security_number,o.date
_of_birth,o.first_name,o.middle_name,o.last_name,o.sir_na
me,sor_data.getCD(race)+race,sor_data.getCD(sex)+sex,l.ad
dress1+address,l.city,l.state+stateid,l.zip,l.county,sor_
data.getCD(l.state)+state,l.country+countryid,sor_data.ge
tCD(l.country)+country,decode(habitual,'Y','habitual','')
+habitual,decode(aggravated,'Y','aggravated','')+aggravat
ed,l.status,x.status,x.registration_date,x.end_registrati
on_date,l.jurisdiction+from+registration_offender_xrefx,+
sor_last_locn_v+lastLocn,+sor_offender+o,+sor_location+l+
where+lastLocn.offender_id(%2B)+=+o.offender_id+and+l.loc
ation_id(%2B)+=+lastLocn.location_id+and+x.offender_id+=+
o.offender_id+order+by+o.last_name,o.first_name,o.middle_
name&sr=yes
http://docapp8.doc.state.ok.us/pls/portal30/url/page/sor_
roster?sqlString=select+distinct+o.offender_id,o.social_s
ecurity_number+doc_number,o.social_security_number,o.date
_of_birth,o.first_name,o.middle_name,o.last_name,o.sir_na
me,sor_data.getCD(race)+race,sor_data.getCD(sex)+sex,l.ad
dress1+address,l.city,l.state+stateid,l.zip,l.county,sor_
data.getCD(l.state)+state,l.country+countryid,sor_data.ge
tCD(l.country)+country,decode(habitual,'Y','habitual','')
+habitual,decode(aggravated,'Y','aggravated','')+aggravat
ed,l.status,x.status,x.registration_date,x.end_registrati
on_date,l.jurisdiction+from+registration_offender_xrefx,+
sor_last_locn_v+lastLocn,+sor_offender+o,+sor_location+l+
where+lastLocn.offender_id(%2B)+=+o.offender_id+and+l.loc
ation_id(%2B)+=+lastLocn.location_id+and+x.offender_id+=+
o.offender_id+order+by+o.last_name,o.first_name,o.middle_
name&sr=yes
RULES OF DYNAMIC SQL
1. Don’t Do It
2. (For Experts Only)
Validate Your Input
RULES FOR HACKING PRODUCTION
1. Don’t Do It
2. (For Experts Only)
Tell Everyone You Did It
RULES FOR CALENDAR TABLES
1. Don’t Use It
2. (For Experts Only)
Only let experts use it
“FOR EXPERTS ONLY”
RULES FOR EXPERTS
1. You probably aren’t an Expert
Too Many Columns
• Very High NULL-to-Data Ratio
• Query complexity
Going Vertical
The Inner-Platform Effect
RULES FOR EXPERTS
1. You probably aren’t an Expert
2. You probably can’t judge Expertise
TECHNOLOGY EVOLVES
“There are too many layers”
“We’ll Have Too Many Stored
Procs”
“Transactions are overly-
complicated”
QUESTION YOUR
ASSUMPTIONS
QUESTION YOUR QUESTIONS
▪ Why is it so hard to return HTML in SQL Queries
▪ Why is it so hard to make a more generic stored procedure?
▪ Why are transactions so needlessly complicated?
▪ Why isn’t there a built-in base-36 to base-10 converter?
THERE’S
PROBABLY A
SIMPLER WAY
Thank you.

More Related Content

Similar to [PGCONF.EU 2017 Keynote] Database Horror Stories, Bad Code, and How Not to be a Statistic

Don't get blamed for your choices - Techorama 2019
Don't get blamed for your choices - Techorama 2019Don't get blamed for your choices - Techorama 2019
Don't get blamed for your choices - Techorama 2019
Hannes Lowette
 
Supersize me: Making Drupal go large
Supersize me: Making Drupal go largeSupersize me: Making Drupal go large
Supersize me: Making Drupal go large
Tom Phethean
 
Dealing With Legacy: The Real-World Experience
Dealing With Legacy: The Real-World ExperienceDealing With Legacy: The Real-World Experience
Dealing With Legacy: The Real-World Experience
Jakub Holy
 
Orthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable CodeOrthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Code
rsebbe
 
Icinga Camp San Diego 2016 - Icinga Director
Icinga Camp San Diego 2016 - Icinga DirectorIcinga Camp San Diego 2016 - Icinga Director
Icinga Camp San Diego 2016 - Icinga Director
Icinga
 
How To Write a Testable Code
How To Write a Testable CodeHow To Write a Testable Code
How To Write a Testable Code
OPIN Software Inc.
 
20200115 admin group_networking_party_v2
20200115 admin group_networking_party_v220200115 admin group_networking_party_v2
20200115 admin group_networking_party_v2
Jihun Jung
 
Running Neo4j in Production: Tips, Tricks and Optimizations
Running Neo4j in Production:  Tips, Tricks and OptimizationsRunning Neo4j in Production:  Tips, Tricks and Optimizations
Running Neo4j in Production: Tips, Tricks and Optimizations
Nick Manning
 
Running Neo4j in Production: Tips, Tricks and Optimizations
Running Neo4j in Production:  Tips, Tricks and OptimizationsRunning Neo4j in Production:  Tips, Tricks and Optimizations
Running Neo4j in Production: Tips, Tricks and Optimizations
Nick Manning
 
Completely Test-Driven
Completely Test-DrivenCompletely Test-Driven
Completely Test-Driven
Ian Truslove
 
C# Async/Await Explained
C# Async/Await ExplainedC# Async/Await Explained
C# Async/Await Explained
Jeremy Likness
 
Design is a process, not a Document
Design is a process, not a DocumentDesign is a process, not a Document
Design is a process, not a Document
Trisha Gee
 
Experience Converting from Ruby to Scala
Experience Converting from Ruby to ScalaExperience Converting from Ruby to Scala
Experience Converting from Ruby to Scala
John Nestor
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
Hannes Lowette
 
Babysitting your orm essenmacher, adam
Babysitting your orm   essenmacher, adamBabysitting your orm   essenmacher, adam
Babysitting your orm essenmacher, adam
Adam Essenmacher
 
Lessons PostgreSQL learned from commercial databases, and didn’t
Lessons PostgreSQL learned from commercial databases, and didn’tLessons PostgreSQL learned from commercial databases, and didn’t
Lessons PostgreSQL learned from commercial databases, and didn’t
PGConf APAC
 
Stop punching yourself in the face!
Stop punching yourself in the face!Stop punching yourself in the face!
Stop punching yourself in the face!
Hannes Lowette
 
Real life forms to adf
Real life forms to adfReal life forms to adf
Real life forms to adf
Real life forms to adfReal life forms to adf
Real life forms to adf
Luc Bors
 
OpenStack Upstream Training Report
OpenStack Upstream Training ReportOpenStack Upstream Training Report
OpenStack Upstream Training Report
Rakuten Group, Inc.
 

Similar to [PGCONF.EU 2017 Keynote] Database Horror Stories, Bad Code, and How Not to be a Statistic (20)

Don't get blamed for your choices - Techorama 2019
Don't get blamed for your choices - Techorama 2019Don't get blamed for your choices - Techorama 2019
Don't get blamed for your choices - Techorama 2019
 
Supersize me: Making Drupal go large
Supersize me: Making Drupal go largeSupersize me: Making Drupal go large
Supersize me: Making Drupal go large
 
Dealing With Legacy: The Real-World Experience
Dealing With Legacy: The Real-World ExperienceDealing With Legacy: The Real-World Experience
Dealing With Legacy: The Real-World Experience
 
Orthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable CodeOrthogonality: A Strategy for Reusable Code
Orthogonality: A Strategy for Reusable Code
 
Icinga Camp San Diego 2016 - Icinga Director
Icinga Camp San Diego 2016 - Icinga DirectorIcinga Camp San Diego 2016 - Icinga Director
Icinga Camp San Diego 2016 - Icinga Director
 
How To Write a Testable Code
How To Write a Testable CodeHow To Write a Testable Code
How To Write a Testable Code
 
20200115 admin group_networking_party_v2
20200115 admin group_networking_party_v220200115 admin group_networking_party_v2
20200115 admin group_networking_party_v2
 
Running Neo4j in Production: Tips, Tricks and Optimizations
Running Neo4j in Production:  Tips, Tricks and OptimizationsRunning Neo4j in Production:  Tips, Tricks and Optimizations
Running Neo4j in Production: Tips, Tricks and Optimizations
 
Running Neo4j in Production: Tips, Tricks and Optimizations
Running Neo4j in Production:  Tips, Tricks and OptimizationsRunning Neo4j in Production:  Tips, Tricks and Optimizations
Running Neo4j in Production: Tips, Tricks and Optimizations
 
Completely Test-Driven
Completely Test-DrivenCompletely Test-Driven
Completely Test-Driven
 
C# Async/Await Explained
C# Async/Await ExplainedC# Async/Await Explained
C# Async/Await Explained
 
Design is a process, not a Document
Design is a process, not a DocumentDesign is a process, not a Document
Design is a process, not a Document
 
Experience Converting from Ruby to Scala
Experience Converting from Ruby to ScalaExperience Converting from Ruby to Scala
Experience Converting from Ruby to Scala
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
Babysitting your orm essenmacher, adam
Babysitting your orm   essenmacher, adamBabysitting your orm   essenmacher, adam
Babysitting your orm essenmacher, adam
 
Lessons PostgreSQL learned from commercial databases, and didn’t
Lessons PostgreSQL learned from commercial databases, and didn’tLessons PostgreSQL learned from commercial databases, and didn’t
Lessons PostgreSQL learned from commercial databases, and didn’t
 
Stop punching yourself in the face!
Stop punching yourself in the face!Stop punching yourself in the face!
Stop punching yourself in the face!
 
Real life forms to adf
Real life forms to adfReal life forms to adf
Real life forms to adf
 
Real life forms to adf
Real life forms to adfReal life forms to adf
Real life forms to adf
 
OpenStack Upstream Training Report
OpenStack Upstream Training ReportOpenStack Upstream Training Report
OpenStack Upstream Training Report
 

Recently uploaded

GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
Postman
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 

Recently uploaded (20)

GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 

[PGCONF.EU 2017 Keynote] Database Horror Stories, Bad Code, and How Not to be a Statistic

Editor's Notes

  1. Fairly unique to software
  2. Construction; a lot of people use it as an analogy Somewhat ironic since a lot software folks don’t work in the real world so much I’ve recently done a little Sawhorses are necessary
  3. One developer realized this Too expensive to buy; But easy to make Sketched it out and realized trig problem
  4. Not terribly complicated of a trig problem But one that needed a bit of work to work out
  5. found 16.26 degrees Disappointed that existing tools weren’t adequate Wood wasn’t accurate Cutting didn’t actually cut, it destroyed Angle calculations very difficult
  6. 36,000 tables, Querying basically impossible, Sooooo slow Little misunderstanding goes a loooong way General idea of how indexing worked More rows = more index lookups = more time You still have to lookup tables; those aren’t indexed quite as well
  7. Took all of the performance problems here Pushing them over there The problems were neatly stacked up and solved Tens of thousands of tables needing to be joined… not so much As it turns out, this is much slower And really, really, really stupid.
  8. Some might say this was premature optimization Root of all evil
  9. I am not alone There are a lot of well-intentioned developers who do horrible things
  10. DBCC TRACEON (1204)
  11. Calendar table
  12. I keep putting that in all of my slides But, who is an expert?
  13. George Carlin Most People think they’re smarter than the average Average Person thinks the Average Person is Dumb
  14. Story about The Database Expert I knew 25 years
  15. A lot of “expert” database people come across the looong table problem Any domain, but look at products Not everything has color
  16. Conclusion A lot of columns. A LOT of columns Confusing, hard to query Slower, since rows are so big
  17. What if we took all these columns and made them rows Near infinite number of “columns” and we forget about the null problem Could we take this furtheR? What if we have lots of tables? What’s easier to understand, one or many?
  18. you’ve effectively recreated a database inside of a database Not only did you reinvent the wheel, but you made it square And used a whole bunch of wheels to do it
  19. Evereyone, even experts can forget that technology is an evolution Relational databases evolved, experts don’t understand them Doesn’t everyone understand why a claw is on a hammer
  20. What appears to be a problem is actually a solution
  21. SQL Server is not a webserver It does not output HTML
  22. Stored Uber Procedure Large complex databases need lots of tables And lots of stored procs
  23. Transactions are complicated Isolation level, read commited, serializable Can barely keep them straight Not flexible enough
  24. All of these make sense if you don’t think about Not to say that there was no thought put in, just the wrong thought wrong places They’re really stupid in a really smart a way Tables-per-entity rehash
  25. Having lots of rows in table requires indexes, so… Stop right there Is it really slow? How slow? Are you sure? Ok… so, we’ll have a bunch of tables instead Is that faster? Really? Why? How?
  26. Don’t assume that you’re asking the right questions. Assume you’re asking the wrong questions. Story about why no built in Base-36 converter to store Canadian postal codes in zip column
  27. Poor assumptions lead to worse questions which lead to even worse answers, and thus the cycle repeasts. It reminds me of this wonderful quote. Heard of it?
  28. Opening line of the film, Peter Pan. It probably has been said before, time and time again. The same is true with the problems you’re solving; we are not pioneer and frontiersmen; we are solving well-known problems with well-known solutions We need to focus on learning what are problems, and what are solutions Otherwise we will just turn solutions into problems, and eventually end up with the inner platform effect
  29. Look around, are you actually in a rabit hole? It may not seem obvious, but question what you’re doing. OK, you’re building a CNC wood machine…. But Why not just buy one? Traditional equipment can’t do 16.26. Why? Calculated my angles need to be exactly this to fit. Why? Obviously I need to build saw horses.