RailsConf 2017

Why Software Engineers Disagree About Everything

Why Software Engineers Disagree About Everything

by Haseeb Qureshi

In his talk at RailsConf 2017, Haseeb Qureshi explores the puzzling question of why software engineers often disagree about various technologies and methodologies. He delves into the field of epistemology, the study of knowledge, to analyze how knowledge is culturally influenced within programming communities. Qureshi discusses the following key points:

  • Cultural Disagreement: Qureshi highlights that beliefs in the software community, such as language preferences (e.g., JavaScript vs. C) and methodologies (e.g., TDD), are often held with strong conviction but are subject to disagreement.

  • Knowledge as Cultural: Drawing on his diverse background, including experiences in poker and combating online fraud, he illustrates that knowledge and belief systems evolve within subcultures, leading to varying insights and conclusions.

  • Lack of Convergence: He argues that unlike other systems that tend to converge on optimal solutions (e.g., strategies in poker), the software field is rife with competing solutions without a clear consensus on the best practices.

  • Examples of Convergence in Nature: Qureshi provides analogies from nature, such as pigeons converging to optimal food sources, to illustrate that in many domains, systems typically converge to optimize efficiency or effectiveness.

  • Barriers to Convergence: He identifies several reasons why software does not converge, including:

    • Unstable Terrain: Rapid changes in technology make it hard to define a stable path.
    • High Switching Costs: Significant investment in time and resources makes it difficult for individuals to switch technologies or methodologies.
    • Information Sharing: Limited transparency or sharing across programming cultures inhibits collective understanding.
    • Group Identity: Strong social identities can create barriers to exploring alternative solutions, leading software engineers to remain within comfortable paradigms.
  • Practical Advice: Qureshi concludes with several recommendations:

    • Keep Your Identity Small: Foster a broader professional identity beyond specific technologies to remain adaptable.
    • Explore the Terrain: Actively seek new experiences and practices that may challenge established norms.
    • Have Fun: Encourage exploration and enjoyment in learning to ease the discomfort of venturing into new areas.

Overall, Qureshi aims to deepen the audience's appreciation for the complexity behind software disagreements while advocating for open-mindedness in the evolving tech landscape.

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]