00:00:12.110
Hello, everybody! How's it going? I hope lunch was good. Was lunch good? Okay, awesome.
00:00:19.340
It's okay; you can say no. That's totally fine. I don't work for these people, so don't get offended.
00:00:27.240
So today I'll be giving a talk on why software engineers disagree about everything.
00:00:33.180
My name is Haseeb Qureshi. I'm a software engineer at Airbnb. I work on the Risk team.
00:00:39.329
I’ll be talking a lot more about that, along with my own history and the different things that I've done in my career.
00:00:45.180
These experiences really inform a lot of what I'm discussing.
00:00:50.910
I don’t know that I’ll fully answer the question of why software engineers disagree about everything, but I think this talk is going to be an exploration of this question from several angles.
00:00:56.250
I should also mention that I'll be disagreeing pretty strongly with DHH's keynote, so that might be interesting.
00:01:01.520
Hopefully, at the very least, this talk will not only convince you of what I'm saying, but also get you to think about some things.
00:01:09.540
This talk will largely focus on philosophy. Typically at RailsConf, people come up here and talk about controllers, or someone else discusses sorting or augmented reality.
00:01:14.790
I won’t be offended if you get up and leave to go to another talk; that’s totally fine.
00:01:20.970
But today, we’re going deep into the weeds because that’s what I'm all about.
00:01:26.220
Specifically, I want to talk about the field of philosophy known as epistemology.
00:01:32.250
Epistemology can be described as the study of the nature of knowledge, justification, and the rationality of belief.
00:01:39.119
The diagram here illustrates phrenology, which is an outdated science that attempted to link parts of the brain to specific functions.
00:01:44.460
This is an ancient approach to epistemology that we have thankfully moved past.
00:01:51.649
Essentially, in epistemology, the two fundamental questions are: How does anyone know anything? And how do they know that they know it?
00:01:57.960
These questions might seem a bit navel-gazing, but that’s okay.
00:02:03.390
About me: I studied English and philosophy in school, and before entering the tech world, I was a professional poker player for about five years.
00:02:09.509
So I took a different path into programming compared to most.
00:02:15.630
I also worked as a programming instructor at a coding bootcamp.
00:02:22.770
For the past little over a year, I've been working as an engineer on the Risk team at Airbnb, focusing on combating fraud.
00:02:28.100
Through these experiences, I've navigated various subcultures.
00:02:34.260
I've tried to understand different beliefs and norms within the various knowledge systems of those worlds.
00:02:40.530
One thing I've noticed as I’ve moved in and out of different areas is that knowledge is deeply cultural.
00:02:48.570
In the programming world, for example, you'll hear people assert things like "full-stack JavaScript is the future!" or "everyone should know C!"
00:02:54.810
They'll insist, "If you don't know C, what are you doing? You should open a book right now and learn it!"
00:03:00.239
Then they might tell you that "Rust is the best language for systems programming," or that "relational databases don't scale."
00:03:05.940
Others might dismiss Test-Driven Development (TDD) as a fantasy that no serious programmer attempts anymore.
00:03:12.209
These are interesting questions, and they're areas where people have very strong beliefs.
00:03:20.070
My real interest isn't in convincing you of any of these claims; they would each be great talks on their own.
00:03:26.250
Instead, I'm interested in why we disagree about them.
00:03:32.370
Why don't we converge on answers to these questions?
00:03:39.299
As someone who was learning the craft of poker, I found this dynamic familiar.
00:03:45.209
People would often say, "No Limit is dying; you have to learn Mixed Games" or "everyone needs to use a HUD."
00:03:52.560
Others would declare, "Only fish play loose passive styles" or "GTO is a fantasy; nobody actually plays like that."
00:03:59.999
And there's a wonderful analogy between these two worlds — poker and software engineering.
00:04:07.600
In both areas, people argue a lot and hold tremendous conviction in their views.
00:04:14.360
When most people hear someone declare that "everyone should know C," they might react with concern.
00:04:20.250
They might question if that's true or wonder what they should do about it.
00:04:27.000
However, my reaction has been to ask why people feel so confident in such assertions.
00:04:34.110
What gives them such assurance that their view is true and universally applicable?
00:04:39.970
This questions my approach more readily, almost like an evolutionary inquiry rather than one about the current state of affairs.
00:04:46.200
The peculiar aspect of programming is the fact that there are so many disagreements.
00:04:54.790
People disagree on topics like functional programming, object-oriented programming, TDD, robust proven frameworks, and shiny new tools.
00:05:01.910
It's odd that nobody seems to agree; why is that the case?
00:05:08.940
You might think it's obvious that there will be disagreement, and that's understandable.
00:05:14.200
You might argue that disagreement is a normal aspect of society and that it leads to a healthy discourse.
00:05:22.520
You might say it is expected that people won't agree.
00:05:30.200
Yet, I find it weird that we don't find convergence; it feels like it makes more sense for us to reach agreement than to be at odds.
00:05:39.780
In essence, systems usually tend to converge over time.
00:05:45.590
When you see a system, you should assume it's going to move toward what’s optimal.
00:05:50.630
Let me illustrate this through poker, although you don’t need to know poker to understand the example.
00:05:57.700
In Texas Hold'em, there's a strategy called set mining. It’s quite simple.
00:06:05.640
If you have a pair, you wait to see if you hit three of a kind, and if not, you fold.
00:06:11.500
This strategy proved surprisingly effective.
00:06:17.300
Soon enough, set mining became widely adopted at low to mid-stakes games, almost overnight.
00:06:23.520
The game converged on set mining, where everyone recognized it as the optimal approach.
00:06:29.660
Before online poker, live poker was a different experience. Players were isolated.
00:06:36.320
Ideas from one poker community didn’t easily make their way into another.
00:06:43.080
However, with the rise of online poker and its communication tools, strategies began to spread, leading to convergence.
00:06:50.860
The state of poker strategy, once static, evolved rapidly after online poker emerged.
00:06:56.670
The curve of complexity in poker strategy surged after 2003. That's when changes started taking place.
00:07:03.500
This graph shows the drastic increase in complexity; it illustrates how online poker helped converge strategies.
00:07:09.770
In essence, online poker enabled convergence in a way live poker couldn’t.
00:07:17.690
When players can communicate and learn from one another, they tend to settle on optimal strategies.
00:07:24.500
Let’s consider a more relatable example: if you’re walking downtown and throw a loaf of bread, pigeons will quickly swarm.
00:07:30.720
They don’t need to be in one spot to notice the food; they’ll converge on it.
00:07:37.230
This behavior reflects how quickly they find food and move on.
00:07:43.640
Similarly, cell membranes balance concentrations, water molecules distribute evenly across it.
00:07:51.840
Stock markets and many natural phenomena show similar convergence.
00:08:00.000
So when I started working in the fraud sector at Airbnb, I began searching for signs of convergence.
00:08:06.840
It seemed that any sufficiently complex system should eventually find its optimal state.
00:08:12.440
Fighting fraud presents a unique subculture, which intrigued me.
00:08:18.110
It’s not just a subculture of people working against fraud.
00:08:25.420
It’s also about actively combating a community that is optimized to exploit weaknesses.
00:08:31.560
This leads me to wonder how fraudsters learn what they do.
00:08:39.230
What techniques do they develop? How do they communicate these skills?
00:08:46.400
The question I'd like to pose is whether there’s convergence in fraud.
00:08:52.890
For instance, consider when people implement features without considering fraud protection.
00:09:03.090
Let’s say a company called Chipmunk rolls out a feature without proper safeguards.
00:09:09.210
They might not implement rate limiting, resulting in significant losses when they’re exploited.
00:09:16.230
You'll often hear about companies scrambling to fix vulnerabilities they overlook.
00:09:22.110
As they prompt for patches or try to reverse transactions, fraudsters move on.
00:09:29.190
Like pigeons, they find the next most fruitful attack point.
00:09:36.960
If one attack becomes risky and difficult, they simply search for another weak spot.
00:09:43.510
This pattern illustrates convergent behavior, where fraudsters adapt to the evolving landscape.
00:09:50.930
Yet, upon reflection, it leads me to a puzzling question: why aren't they optimizing?
00:09:56.900
You'd expect fraudsters to hit the most vulnerable companies, yet they tend to spread their efforts.
00:10:03.050
Perhaps they decide to target many average companies instead of just one highly profitable one.
00:10:10.069
This behavior prompts a question: why does fraud not converge like systems do?
00:10:16.440
We can draw parallels with the technology sector.
00:10:22.480
Even in open-source solutions, various platforms coexist, each meeting a similar need.
00:10:28.120
For instance, why do we see such diverse libraries for similar coding problems?
00:10:35.490
You'd expect the best solution to emerge and for everyone to converge upon it, yet that's rarely the case.
00:10:41.970
It often feels surprising when one particular tool or framework gains prominence.
00:10:49.680
React seems to have gained traction and perhaps it will dominate for a while.
00:10:56.090
But the question remains: why aren’t other approaches universally accepted?
00:11:02.500
Certainly, there are multiple terrains. Each software domain has its solutions tailored to function.
00:11:09.540
You see this with products, payment backends, social networks, etc.
00:11:15.600
Even within a single domain, why doesn't convergence happen?
00:11:21.660
Take product development, for example. Most web apps still share common frameworks.
00:11:27.780
Yet, people still argue about which framework is superior.
00:11:34.770
Lack of convergence might seem counterintuitive, as convergence generally implies efficiency.
00:11:41.670
If we converge, we will understand the terrain.
00:11:49.350
Software engineers often aren't directly competing with each other; more commonly, we are motivated by one another's successes.
00:11:56.020
Whenever someone creates an excellent open-source solution, it benefits the community.
00:12:02.840
So, why don’t these systems converge?
00:12:09.090
I believe there are four main reasons.
00:12:15.520
The first reason is that the terrain itself is unstable.
00:12:21.800
The terrain is always changing, which complicates convergence.
00:12:26.520
When it feels like there’s one configuration, before you know it, it changes.
00:12:33.360
When you come into programming, assuming it was the hottest thing at the time, it could quickly change.
00:12:39.590
An excellent blog article illustrated how learning JavaScript felt in 2016.
00:12:44.910
This exemplifies the rapid changes in technology and how that pace might continue to accelerate.
00:12:52.140
Similarly, in fraud, consider a scenario where Facebook has a flaw exploited.
00:12:59.740
Once Facebook patches it and stops the flow of fraud, fraudsters may be forced to adapt.
00:13:06.150
They may think, 'Why would I spend time on another platform?' and stay put instead.
00:13:12.180
This uncertainty means fraudsters get stuck in a lower-efficiency territory.
00:13:18.810
The second reason is due to high switching costs.
00:13:25.570
If you want to transition from one domain to another, the costs can be substantial.
00:13:32.290
For example, if you're buried in your software stacks, switching might mean abandoning your existing expertise.
00:13:39.440
Across the programming world, there’s a lot of specialization, and that makes it tough to switch.
00:13:45.510
Individuals often find comfort in local maximums, making them hesitant to explore new domains.
00:13:51.930
The third reason for the lack of convergence across domains is the sharing of information.
00:13:58.890
It’s hard to gain the necessary knowledge needed to reach an optimal position.
00:14:05.630
Sharing information is key in navigating terrains and understanding different environments.
00:14:11.540
When you consider cultures, some are much more open to sharing than others.
00:14:18.020
The fraud industry is often secretive, with knowledge shared behind closed doors.
00:14:26.640
If you're a fraudster, learning the ropes requires groundwork and connections.
00:14:33.350
In contrast, the poker world is far more open.
00:14:38.990
Many forums allow the exchange of knowledge, and this benefits the poker community.
00:14:44.450
However, the most effective strategies aren't always shared widely.
00:14:51.250
In software, we see examples of both, with significant amounts of open-source sharing.
00:14:58.240
While there are lots of shared resources, the best solutions can sometimes remain in the hands of those who guard them.
00:15:05.570
Despite access to vast amounts of information, it’s not always clearly communicated.
00:15:11.850
Finally, the fourth reason for lack of convergence stems from group identity.
00:15:18.290
We heard some discourse this morning about DHH and the advantages of group identities.
00:15:25.560
However, I want to discuss the limitations and dangers of these identities.
00:15:32.570
The programming world is defined by various groups: Ruby developers, Python enthusiasts, Java aficionados.
00:15:39.750
If you want to fit into these communities, you begin to adopt norms that may restrict exploration.
00:15:46.780
This tendency also affects avenues of knowledge and approaches to problems.
00:15:53.480
Similar patterns are observed in fraud communities.
00:15:58.680
There's often a closed-off environment where fraudsters share their techniques.
00:16:05.490
If someone isn't part of that community, they may miss out on essential information.
00:16:11.610
In the software world, it frequently manifests, too.
00:16:16.829
When seeking knowledge, solutions often appear tailored for specific languages.
00:16:23.580
Some solutions are made with certain frameworks in mind rather than as general practices.
00:16:31.050
Thus, this bias can hinder exploring alternatives.
00:16:37.320
I find this fascinating as a newcomer in software.
00:16:43.020
Based on social identity theory, we categorize groups and compare them.
00:16:49.480
Initially, you classify others and yourself into groups.
00:16:55.180
You then decide which groups to identify with.
00:17:02.150
Finally, you find reasons why your group is superior.
00:17:09.840
This arbitrary division can lead to discrimination against others.
00:17:16.500
Differential psychology speaks to how individuals within groups strive to distinguish themselves.
00:17:23.430
This drives them to reinforce their unique identity as part of the group.
00:17:29.750
The classic movie West Side Story illustrates this behavior among different gangs, which appear united but actually aren't homogeneous.
00:17:36.790
Members may have shared norms, but they express individuality through personal style.
00:17:44.990
This dynamic can be observed in programming communities, diminishing collective convergence.
00:17:50.680
Simply put, individuals want to belong but prefer distinctiveness.
00:17:58.820
So how can software engineers address this lack of convergence?
00:18:07.780
I don’t have perfect solutions but here are some suggestions.
00:18:13.900
First, keep your identity small.
00:18:20.430
As much as possible, let go of labels that pigeonhole you.
00:18:26.700
Avoid identifying solely as a Rails developer or a Ruby programmer.
00:18:32.880
Think of yourself as a software engineer equipped to choose the right tool for the task.
00:18:38.390
This flexibility is essential, as technology continually evolves.
00:18:44.430
Ten years down the road, you could be using entirely different technologies.
00:18:50.740
While I currently enjoy Ruby and Rails, sticking to just one stack could limit potential.
00:18:57.040
The second piece of advice is to explore new terrain.
00:19:03.620
This involves more than merely attending events — dive into new experiences.
00:19:09.240
Challenge yourself with genuine risks, not just superficial ones.
00:19:15.860
Every time you walk down a hill and explore, you're pushing boundaries.
00:19:22.340
Take risks where you may not retain comfort or prestige.
00:19:29.840
This leads to broader horizons and stronger skillsets.
00:19:36.220
To conclude this segment, remember to have fun. Embrace learning and exploring.
00:19:43.390
Balancing where you are versus where you want to be can be engaging.
00:19:50.250
That's all I have for now. Thank you for listening.
00:19:57.820
If you're a senior software engineer or data scientist, we're always hiring at Airbnb.
00:20:03.460
Thanks for being here!
00:20:15.000
[End of presentation]