[
  {
    "start": 1.5,
    "end": 3.84,
    "text": "Welcome to Software Testing Unleashed!"
  },
  {
    "start": 4.14,
    "end": 9.82,
    "text": "The podcast for testers, developers and software makers who live quality as an attitude."
  },
  {
    "start": 10.459,
    "end": 21.82,
    "text": "Get fresh ideas and sharp insights To grow your mindset To learn new methods And drive real change in how we build software Better software and better teams"
  },
  {
    "start": 22.04,
    "end": 23.02,
    "text": "For a better world."
  },
  {
    "start": 32.7,
    "end": 36.96,
    "text": "Hi I'm Ritchie, software-quality coach keynote speaker and book author."
  },
  {
    "start": 37.74,
    "end": 39.68,
    "text": "My guest today is Nikhil Bhatwar."
  },
  {
    "start": 40.68,
    "end": 50.22,
    "text": "Nikhil is an expert in decentralized systems, his worked-in both startups and large corporations giving him a wide view of real world complexity."
  },
  {
    "start": 51.42,
    "end": 56.0,
    "text": "He also mentors other start ups and speaks regularly at international conferences."
  },
  {
    "start": 56.58,
    "end": 61.22,
    "text": "His talks cover cutting edge topics like software quality and distributed systems."
  },
  {
    "start": 61.56,
    "end": 67.059,
    "text": "In short, Nikhil knows how to build systems that scale & survive the real world."
  },
  {
    "start": 68.539,
    "end": 71.58,
    "text": "In this episode, we talked about property-based testing."
  },
  {
    "start": 72.259,
    "end": 75.8,
    "text": "A method to go beyond human imagination in software testing."
  },
  {
    "start": 75.919,
    "end": 85.52,
    "text": "because of the huge possible combination of these methods How can a system test itself by generating its own test cases?"
  },
  {
    "start": 86.36,
    "end": 90.36,
    "text": "What do you when your test space grows into billions of combinations?"
  },
  {
    "start": 91.72,
    "end": 93.72,
    "text": "and why does some of most critical"
  },
  {
    "start": 93.8,
    "end": 94.1,
    "text": "bugs"
  },
  {
    "start": 94.74,
    "end": 95.28,
    "text": "show up?"
  },
  {
    "start": 95.679,
    "end": 104.86,
    "text": "after seventeen exact steps We explored how property-based testing helps uncover edge cases that humans miss."
  },
  {
    "start": 106.16,
    "end": 115.24,
    "text": "Nikhil explained it in a super practical way, from modeling and generators to shrinking tests for failures of human to understand."
  },
  {
    "start": 116.8,
    "end": 125.0,
    "text": "You'll also hear his take on where this method reaches its limits And How To Start Using It Step By Step In Your Team."
  },
  {
    "start": 125.919,
    "end": 128.0,
    "text": "So now enjoy the episode!"
  },
  {
    "start": 130.72,
    "end": 132.7,
    "text": "nice to have you on the show here in the podcast."
  },
  {
    "start": 133.4,
    "end": 135.1,
    "text": "Absolutely, thank you so much for having me!"
  },
  {
    "start": 135.38,
    "end": 146.579,
    "text": "Yeah... You're traveling a long way here to Frankfurt to the Queesta and I already told me that we'll combine it with some sightseeing and visiting Europe."
  },
  {
    "start": 147.06,
    "end": 148.579,
    "text": "It's actually a beautiful place."
  },
  {
    "start": 149.299,
    "end": 155.239,
    "text": "just for context i actually spent childhood in Germany which was way back."
  },
  {
    "start": 156.239,
    "end": 163.76,
    "text": "My father was actually a nuclear scientist and in Zulich, it wasn't that time where Germany like not used to be separate."
  },
  {
    "start": 164.82,
    "end": 167.88,
    "text": "Zuliche is Deutsche Forschung for Nuclear Physics."
  },
  {
    "start": 168.019,
    "end": 169.859,
    "text": "I don't know German so something like That."
  },
  {
    "start": 170.239,
    "end": 171.98,
    "text": "yeah Yeah And he use too."
  },
  {
    "start": 172.22,
    "end": 174.18,
    "text": "He was the scientists there for few years."
  },
  {
    "start": 174.26,
    "end": 179.54,
    "text": "So i went into german kindergarten and I learned German and I didn't knew English only new Germans."
  },
  {
    "start": 179.62,
    "end": 181.16,
    "text": "It's kind of my first language."
  },
  {
    "start": 182.06,
    "end": 183.9,
    "text": "Then I forgot German because"
  },
  {
    "start": 183.96,
    "end": 184.42,
    "text": "I came back."
  },
  {
    "start": 185.4,
    "end": 187.299,
    "text": "Since then I've rarely ever spoken German."
  },
  {
    "start": 188.239,
    "end": 190.42,
    "text": "But it's kind of, my mom is traveling with me."
  },
  {
    "start": 190.5,
    "end": 194.72,
    "text": "so she was like yeah we used to live there and went this way since those memories are coming back."
  },
  {
    "start": 195.06,
    "end": 195.7,
    "text": "Yeah that's great!"
  },
  {
    "start": 196.28,
    "end": 199.72,
    "text": "So maybe you can reactivate your german language also?"
  },
  {
    "start": 199.92,
    "end": 200.18,
    "text": "I don't know"
  },
  {
    "start": 200.239,
    "end": 202.88,
    "text": "if its good idea on a podcast because people look really silly."
  },
  {
    "start": 204.12,
    "end": 206.82,
    "text": "We can do it in English, no problem."
  },
  {
    "start": 206.98,
    "end": 213.72,
    "text": "Yes we are here on the QS talk from Imbus and you have a speech about property-based testing."
  },
  {
    "start": 214.48,
    "end": 225.299,
    "text": "I read your abstract part, I knew very specific so i want to talk"
  },
  {
    "start": 225.38,
    "end": 225.62,
    "text": "to you."
  },
  {
    "start": 226.6,
    "end": 228.5,
    "text": "So yeah let's start."
  },
  {
    "start": 229.44,
    "end": 230.98,
    "text": "what is property-based testing?"
  },
  {
    "start": 231.04,
    "end": 231.14,
    "text": "Yeah!"
  },
  {
    "start": 231.88,
    "end": 238.46,
    "text": "Let me start with giving a background of when we like my area generally is web services right."
  },
  {
    "start": 239.22,
    "end": 241.859,
    "text": "large scale microservices have thousand services."
  },
  {
    "start": 242.72,
    "end": 250.92,
    "text": "now you're going test them the thing and they can behave in a certain way, In the sense that one service fails."
  },
  {
    "start": 251.019,
    "end": 255.239,
    "text": "The failure passes to second one And you don't actually know it until the fifth six service fails."
  },
  {
    "start": 255.299,
    "end": 256.54,
    "text": "or cascading failure right?"
  },
  {
    "start": 257.14,
    "end": 262.84,
    "text": "The number of test cases That You want to test Or Number Of Failure Modes of A Distributed System is huge."
  },
  {
    "start": 263.9,
    "end": 268.86,
    "text": "So...in a simple mathematical term Assume that you have n services Right?"
  },
  {
    "start": 269.46,
    "end": 273.04,
    "text": "And Certain failures occur when two-or three more services kind of fail."
  },
  {
    "start": 273.56,
    "end": 278.06,
    "text": "so now by Simple Maths It's like NQ where N is, I don't know."
  },
  {
    "start": 278.16,
    "end": 278.84,
    "text": "thousand maybe."
  },
  {
    "start": 279.5,
    "end": 280.72,
    "text": "So n cube becomes what?"
  },
  {
    "start": 281.32,
    "end": 284.8,
    "text": "A billion million something like that and you want to test all these."
  },
  {
    "start": 285.32,
    "end": 285.9,
    "text": "how do you test it?"
  },
  {
    "start": 286.12,
    "end": 287.72,
    "text": "are you going write a million tests cases."
  },
  {
    "start": 288.58,
    "end": 291.1,
    "text": "That's the idea of property based testing."
  },
  {
    "start": 291.14,
    "end": 295.34,
    "text": "comes so fundamental proposition of property-based testing."
  },
  {
    "start": 295.6,
    "end": 300.6,
    "text": "when system gets too complicated It not possible for humans to write every test case."
  },
  {
    "start": 301.72,
    "end": 304.84,
    "text": "Rather we want this test cases to be generated automatically."
  },
  {
    "start": 305.66,
    "end": 306.48,
    "text": "How do we generate them?"
  },
  {
    "start": 307.12,
    "end": 309.5,
    "text": "We know what the behavior of the services, right."
  },
  {
    "start": 310.08,
    "end": 321.08,
    "text": "So if you say that this is the behavior or the service If you pass a certain class of input where expecting a certain Class of output our system can basically Write test cases for you automatically."
  },
  {
    "start": 321.14,
    "end": 327.16,
    "text": "That can generate thousands and thousands of combinations on these tests and automatically test it rather than you writing there."
  },
  {
    "start": 327.42,
    "end": 327.52,
    "text": "Yeah"
  },
  {
    "start": 328.24,
    "end": 328.42,
    "text": "Okay."
  },
  {
    "start": 329.04,
    "end": 338.02,
    "text": "So for example, in a very simple way let's say you have services that request two inputs A and B. And gives an output A plus B. sounds about very simple right?"
  },
  {
    "start": 338.66,
    "end": 343.42,
    "text": "You would write some test cases zero one to three Some negative numbers positive numbers all those things."
  },
  {
    "start": 344.5,
    "end": 347.8,
    "text": "and if those test cases pass Everything is great."
  },
  {
    "start": 348.78,
    "end": 363.46,
    "text": "But the problem Is that In real life systems you Have buffer overflows you have integer or at a certain combination where you approach That edge it is, It might be a possibility that the service would fail because you had a buffer overflow."
  },
  {
    "start": 363.5,
    "end": 365.16,
    "text": "You have an integer overflow right?"
  },
  {
    "start": 365.22,
    "end": 365.92,
    "text": "How do you test those?"
  },
  {
    "start": 366.62,
    "end": 377.24,
    "text": "so rather than testing That you describe the property that well if I send A plus B and The output is C then If i subtract c minus b the output should Be eight."
  },
  {
    "start": 377.34,
    "end": 379.18,
    "text": "Because of A plus b Is equal to see."
  },
  {
    "start": 379.32,
    "end": 384.62,
    "text": "Then c-b is equal To A. So I can generate thousands And thousands Of combination of A&B."
  },
  {
    "start": 385.7,
    "end": 385.92,
    "text": "Right."
  },
  {
    "start": 386.46,
    "end": 394.62,
    "text": "Get the output subtract B and make sure it is a. so your test case Is not actually going to be what you're writing?"
  },
  {
    "start": 395.78,
    "end": 397.64,
    "text": "What input you are sending which is what typically?"
  },
  {
    "start": 397.84,
    "end": 398.34,
    "text": "how do you test?"
  },
  {
    "start": 398.4,
    "end": 398.54,
    "text": "right?"
  },
  {
    "start": 398.6,
    "end": 403.22,
    "text": "You have like okay, this is my set of input in I one i two i three expect the output over."
  },
  {
    "start": 403.46,
    "end": 403.74,
    "text": "Oh three."
  },
  {
    "start": 404.38,
    "end": 405.86,
    "text": "rather you describe your system."
  },
  {
    "start": 407.34,
    "end": 417.96,
    "text": "So I have described my system that the property of this service is, if i take one input and subtract it will be the second input."
  },
  {
    "start": 421.28,
    "end": 429.52,
    "text": "It's a systems job to write these test cases but in real life things are not so simple."
  },
  {
    "start": 430.24,
    "end": 437.68,
    "text": "So typically property-based testing consists you have a modeling language, which in this case is simple equation."
  },
  {
    "start": 437.78,
    "end": 440.38,
    "text": "But in real life will be more complicated modeling languages."
  },
  {
    "start": 440.44,
    "end": 445.4,
    "text": "now we have a lot of formal mathematics to describe these systems like."
  },
  {
    "start": 445.44,
    "end": 447.06,
    "text": "they use TLA plus but there are bunch of"
  },
  {
    "start": 447.12,
    "end": 447.38,
    "text": "them the"
  },
  {
    "start": 447.7,
    "end": 448.78,
    "text": "formal specification."
  },
  {
    "start": 449.54,
    "end": 452.46,
    "text": "so we described these formal specifications."
  },
  {
    "start": 453.0,
    "end": 454.24,
    "text": "that's one component right?"
  },
  {
    "start": 455.2,
    "end": 461.66,
    "text": "Then We Have A Generator Which Will Take The Specification And Will Write The Test Cases For You Or Find The Violation."
  },
  {
    "start": 462.22,
    "end": 462.92,
    "text": "So That Is So."
  },
  {
    "start": 463.0,
    "end": 465.92,
    "text": "now you found something is wrong if your test cases are failing."
  },
  {
    "start": 467.0,
    "end": 468.86,
    "text": "Then, we have a third component called shrinker."
  },
  {
    "start": 469.54,
    "end": 483.0,
    "text": "Now typically because you're writing these test cases and this test cases I would say not super random but intelligently generated from the specification they can have long sequence of failure mode."
  },
  {
    "start": 483.04,
    "end": 484.78,
    "text": "so i'll give real life example."
  },
  {
    "start": 485.6,
    "end": 489.7,
    "text": "A test was done on a Google level DB database or something like that."
  },
  {
    "start": 490.24,
    "end": 497.98,
    "text": "If you replicate seventeen unique steps, there will be a bug which human can anticipate."
  },
  {
    "start": 498.62,
    "end": 500.6,
    "text": "these are the seventeen steps that we do!"
  },
  {
    "start": 501.76,
    "end": 503.38,
    "text": "That would replicate all of them."
  },
  {
    "start": 503.42,
    "end": 507.48,
    "text": "Property based testing were used and within one hour it found that bug Right?"
  },
  {
    "start": 508.38,
    "end": 513.82,
    "text": "Now when generates this test cases generate long sequence as cases right."
  },
  {
    "start": 514.6,
    "end": 516.06,
    "text": "So that's what the generator would do."
  },
  {
    "start": 516.18,
    "end": 517.96,
    "text": "and something goes wrong, you know some things wrong."
  },
  {
    "start": 518.06,
    "end": 523.18,
    "text": "but now for a human if I give your sequence of seventeen steps And say well this is what?"
  },
  {
    "start": 523.24,
    "end": 523.68,
    "text": "The failure."
  },
  {
    "start": 523.74,
    "end": 526.48,
    "text": "Is it will be like yeah i don't Know where exactly the failure is."
  },
  {
    "start": 526.6,
    "end": 529.9,
    "text": "Yeah when i understand there's A failure But these are Seventeen Steps."
  },
  {
    "start": 530.16,
    "end": 532.48,
    "text": "i Don't know which Of the Seventeen step failed."
  },
  {
    "start": 533.34,
    "end": 535.18,
    "text": "so the third Component is a reducer."
  },
  {
    "start": 535.9,
    "end": 546.98,
    "text": "What the reducer does is once you have found a fault, it actually kind of starts shrinking it and saying okay let me try to make exactly where things fail."
  },
  {
    "start": 547.78,
    "end": 549.12,
    "text": "So now we have these three components."
  },
  {
    "start": 549.62,
    "end": 562.38,
    "text": "when I describe my system i have a generator ,you can write your own custom generator or use the standard generator right?I have this generator that takes the specification generates these million complicated cases .These are machine readable."
  },
  {
    "start": 563.14,
    "end": 570.42,
    "text": "We generate these cases, we find these faults and the shrinker will basically reduce this complicated test case for a human-test case."
  },
  {
    "start": 570.48,
    "end": 574.2,
    "text": "And say well... This is exactly where that problem is."
  },
  {
    "start": 574.98,
    "end": 577.42,
    "text": "That's how property based testing would work."
  },
  {
    "start": 578.0,
    "end": 582.7,
    "text": "Obviously in every language you have different kind of frameworks right?"
  },
  {
    "start": 582.82,
    "end": 584.3,
    "text": "Exactly!"
  },
  {
    "start": 585.58,
    "end": 588.0,
    "text": "These frameworks are there?"
  },
  {
    "start": 588.14,
    "end": 589.88,
    "text": "which technology do they have?"
  },
  {
    "start": 590.7,
    "end": 594.62,
    "text": "So.. There're lot them Typically, there are some commercials."
  },
  {
    "start": 594.66,
    "end": 596.76,
    "text": "There's open source so their frameworks."
  },
  {
    "start": 596.8,
    "end": 602.48,
    "text": "for .NET I actually have a very small demo or .NET framework but i give a list of the frameworks."
  },
  {
    "start": 602.52,
    "end": 614.68,
    "text": "for Python This concept started with a tool called QuickCheck which was written in Haskell And then this was ported to multiple languages and now you've FSchef for .Net."
  },
  {
    "start": 614.9,
    "end": 622.9,
    "text": "You can find something like Python, PyChek bunch of technology stacks and a bunch of programming languages."
  },
  {
    "start": 622.96,
    "end": 623.7,
    "text": "you have these frames."
  },
  {
    "start": 625.24,
    "end": 627.16,
    "text": "So yeah, there's no like."
  },
  {
    "start": 627.36,
    "end": 631.32,
    "text": "property based testing is a concept of this."
  },
  {
    "start": 631.4,
    "end": 633.0,
    "text": "how you test the system right?"
  },
  {
    "start": 633.86,
    "end": 637.02,
    "text": "Implementation different people have implemented it in a different way."
  },
  {
    "start": 637.16,
    "end": 637.62,
    "text": "Yeah"
  },
  {
    "start": 637.72,
    "end": 639.68,
    "text": "so that's why they are multiple frameworks."
  },
  {
    "start": 639.76,
    "end": 640.22,
    "text": "I'm perversive."
  },
  {
    "start": 640.3,
    "end": 642.62,
    "text": "well This Is How We Generate The Test Cases."
  },
  {
    "start": 644.24,
    "end": 654.74,
    "text": "Of Course There'S A Commercial Tools Available i think cubic which is being used in automobiles because you know they are mission critical software."
  },
  {
    "start": 654.82,
    "end": 656.82,
    "text": "right the software fails people die."
  },
  {
    "start": 657.2,
    "end": 657.74,
    "text": "Yes, you want"
  },
  {
    "start": 657.82,
    "end": 662.42,
    "text": "to be absolutely sure something is everything works correctly."
  },
  {
    "start": 662.46,
    "end": 663.44,
    "text": "Yeah so they are."
  },
  {
    "start": 664.92,
    "end": 677.72,
    "text": "the main topic or the main goal is too make a very huge coverage of all these combinations and To get more reliability also for this system."
  },
  {
    "start": 677.84,
    "end": 678.1,
    "text": "yeah"
  },
  {
    "start": 678.14,
    "end": 679.98,
    "text": "ultimately The goal is reliability."
  },
  {
    "start": 680.78,
    "end": 684.48,
    "text": "I mean reliability bug-free where they all come first at same point."
  },
  {
    "start": 685.08,
    "end": 689.48,
    "text": "But the key idea is that go beyond the human imagination."
  },
  {
    "start": 689.6,
    "end": 694.1,
    "text": "I mean, when a human is writing a test case he's there's a limit to a human right?"
  },
  {
    "start": 695.42,
    "end": 703.74,
    "text": "If you look at the whole branch of formal mathematics not just for property-based testing You could look at Testing in other systems also like formal mathematics."
  },
  {
    "start": 703.78,
    "end": 712.54,
    "text": "The whole thing Is That number of permutation and combination Of things that can Go wrong way beyond a human can imagine."
  },
  {
    "start": 712.6,
    "end": 721.3,
    "text": "So I'll give you very different examples of property-based testing, there's a branch of mathematics... There is tool called TLA+, that deals with concurrency."
  },
  {
    "start": 722.14,
    "end": 722.76,
    "text": "Now what happens?"
  },
  {
    "start": 722.86,
    "end": 727.96,
    "text": "Is in concurrency systems we have threads and you have logs And all these things go wrong."
  },
  {
    "start": 728.7,
    "end": 732.42,
    "text": "The problem for this system are these bugs are intermittent."
  },
  {
    "start": 733.66,
    "end": 738.58,
    "text": "A certain set of conditions usually caused by external environments have to happen before the system crash."
  },
  {
    "start": 739.28,
    "end": 740.96,
    "text": "So you run your unit test cases."
  },
  {
    "start": 741.06,
    "end": 741.74,
    "text": "everything will work."
  },
  {
    "start": 742.16,
    "end": 744.4,
    "text": "You ran on your production integration test cases."
  },
  {
    "start": 744.5,
    "end": 747.82,
    "text": "Everything is one run on production, everything runs for two months."
  },
  {
    "start": 748.34,
    "end": 750.52,
    "text": "The third month-the first day of the third month fails."
  },
  {
    "start": 751.42,
    "end": 752.36,
    "text": "How do we test those cases?"
  },
  {
    "start": 753.74,
    "end": 760.46,
    "text": "Right so because this isn't a minute and it may not happen how are you testing?"
  },
  {
    "start": 761.2,
    "end": 761.28,
    "text": "So,"
  },
  {
    "start": 761.74,
    "end": 771.78,
    "text": "here you have the same thing because threads can operate in a very different way based on situation and environment which may be different from your testing."
  },
  {
    "start": 773.1,
    "end": 779.12,
    "text": "That's where all formal method comes is go beyond human imagination."
  },
  {
    "start": 779.18,
    "end": 789.92,
    "text": "that creates state space diagram of every possible moves combinations then sees If there's a thread deadlock here, if there is a concurrency or what happens and then can find out."
  },
  {
    "start": 790.28,
    "end": 793.06,
    "text": "well this is the problem that you would have."
  },
  {
    "start": 793.84,
    "end": 799.82,
    "text": "And This particular one TLA plus has actually been used by Amazon AWS."
  },
  {
    "start": 801.3,
    "end": 802.66,
    "text": "There's an article I can point it out."
  },
  {
    "start": 803.2,
    "end": 804.56,
    "text": "It's publicly available."
  },
  {
    "start": 805.04,
    "end": 807.92,
    "text": "Or if you Google AWS TLA Plus Formal Methods."
  },
  {
    "start": 807.96,
    "end": 818.78,
    "text": "they write a paper on how AWS use these formal methods to uncover bugs which otherwise would cause the system to fail intermittently."
  },
  {
    "start": 820.5,
    "end": 826.3,
    "text": "and basically, the idea was that you sometimes have to write a complete rewrite of your system."
  },
  {
    "start": 826.8,
    "end": 830.78,
    "text": "because if there is fundamental problem in design then what do we do?"
  },
  {
    "start": 831.74,
    "end": 835.28,
    "text": "Property-based testing is kind of same thing other way around."
  },
  {
    "start": 836.5,
    "end": 845.6,
    "text": "Here I've described how you designed this system takes the same idea and says, okay fine."
  },
  {
    "start": 845.76,
    "end": 847.04,
    "text": "I have a software that is working."
  },
  {
    "start": 847.1,
    "end": 847.76,
    "text": "how do i test it?"
  },
  {
    "start": 848.84,
    "end": 853.72,
    "text": "But the key idea remains the same That human imagination works to a certain point."
  },
  {
    "start": 854.08,
    "end": 864.2,
    "text": "once you go out at the scale The number of combinations of things that can go wrong Is so huge that It is not practical for a human to think or implement those cases."
  },
  {
    "start": 864.46,
    "end": 871.78,
    "text": "So in this specific case You design model points you can combine."
  },
  {
    "start": 872.68,
    "end": 873.18,
    "text": "Describe"
  },
  {
    "start": 873.24,
    "end": 880.18,
    "text": "your system is how I'm going to word it because for test, To generate It has some kind of specification."
  },
  {
    "start": 881.4,
    "end": 884.86,
    "text": "property based testing in simple form Is you describe?"
  },
  {
    "start": 885.7,
    "end": 888.7,
    "text": "Properties off the system there's a property right."
  },
  {
    "start": 889.14,
    "end": 900.52,
    "text": "so For example let say that if i am designing an e-commerce systems Amazon dot com and You could describe a property that every time, A person makes a purchase."
  },
  {
    "start": 900.72,
    "end": 903.66,
    "text": "Let's say I purchased a box of chocolates because i have a sweet tooth."
  },
  {
    "start": 903.72,
    "end": 904.64,
    "text": "I love chocolates right?"
  },
  {
    "start": 905.28,
    "end": 918.88,
    "text": "So Every Time I make a purchase then from the inventory if n is The number of chocolate that I've purchased form the inventory Before the transaction and after the transaction the difference should be n cos I've removed chocolates from my inventory."
  },
  {
    "start": 918.98,
    "end": 919.12,
    "text": "Right?"
  },
  {
    "start": 919.22,
    "end": 925.92,
    "text": "Yeah, i'm also going to have a property of the system that My revenue for amazon has to increase by n into the price Of the chocolate."
  },
  {
    "start": 926.6,
    "end": 930.86,
    "text": "so i am now describing properties of A system based on The transaction."
  },
  {
    "start": 931.52,
    "end": 933.42,
    "text": "Now you would say what's the big deal?"
  },
  {
    "start": 934.02,
    "end": 942.62,
    "text": "the Big deal is That in real life systems You are using eventual Consistencies because it's multi-threaded Systems right."
  },
  {
    "start": 943.14,
    "end": 948.94,
    "text": "So in a simple System if you were To implement This is a very simple thing, unlikely to run into problem."
  },
  {
    "start": 949.0,
    "end": 957.38,
    "text": "But that's not how the same systems are implemented because these are distributed systems working in multiple databases and different data centers right?"
  },
  {
    "start": 958.0,
    "end": 962.58,
    "text": "It could happen that this property is true for one data center but not on data center too."
  },
  {
    "start": 964.0,
    "end": 965.24,
    "text": "so you test those conditions."
  },
  {
    "start": 966.12,
    "end": 968.8,
    "text": "So your now describing properties of system."
  },
  {
    "start": 968.86,
    "end": 970.98,
    "text": "The system is writing tests"
  },
  {
    "start": 972.14,
    "end": 986.32,
    "text": "This so I understand it correct for this the properties you already mentioned for putting that The end part from out from the stock and Pointing up their revenue."
  },
  {
    "start": 986.88,
    "end": 995.18,
    "text": "You go one step further Out of the system and describe to system also with the data center Properties."
  },
  {
    "start": 995.52,
    "end": 996.1,
    "text": "yeah, yes"
  },
  {
    "start": 996.22,
    "end": 997.1,
    "text": "So essentially."
  },
  {
    "start": 998.9,
    "end": 1001.12,
    "text": "Now here thing is there's a div."
  },
  {
    "start": 1001.56,
    "end": 1004.98,
    "text": "you could if your writing unit test see How do you specify?"
  },
  {
    "start": 1005.54,
    "end": 1007.08,
    "text": "There are multiple ways of specifying."
  },
  {
    "start": 1007.66,
    "end": 1013.26,
    "text": "You could have a specification at the service level or function-level, and you can have a system-level."
  },
  {
    "start": 1013.98,
    "end": 1018.54,
    "text": "If you specify it as a service-level then that's typically what unit test would be."
  },
  {
    "start": 1018.92,
    "end": 1022.88,
    "text": "but if you specify in a system level this is an integration test right!"
  },
  {
    "start": 1024.5,
    "end": 1026.939,
    "text": "And people usually do both makes sense to me."
  },
  {
    "start": 1029.0,
    "end": 1030.439,
    "text": "And what do you think?"
  },
  {
    "start": 1032.02,
    "end": 1037.0,
    "text": "Where are the limits or where it's not good to use property-based testing."
  },
  {
    "start": 1039.52,
    "end": 1050.48,
    "text": "I Think, The limits would be that certain tests tend to be destructive For example way back and maybe things have better now but Way Back was actually working at Blackberry."
  },
  {
    "start": 1051.32,
    "end": 1057.34,
    "text": "So when You test It is a phone call for which your being built."
  },
  {
    "start": 1058.179,
    "end": 1062.56,
    "text": "If you're writing millions and millions of test cases, then your making million phone calls."
  },
  {
    "start": 1063.12,
    "end": 1063.36,
    "text": "Right?"
  },
  {
    "start": 1063.719,
    "end": 1066.26,
    "text": "And for those million phone call you are going to get a huge bill!"
  },
  {
    "start": 1067.62,
    "end": 1076.34,
    "text": "The same thing is gonna be true if you testing the system at let's say... You building a system on top of AWS & you write some tests that require writing to storage etc."
  },
  {
    "start": 1078.159,
    "end": 1081.82,
    "text": "You know, you're being charged for all the resources that are using for test cases."
  },
  {
    "start": 1081.98,
    "end": 1087.62,
    "text": "And now we were writing like a million plus test case is automatically so your costs can go out of control."
  },
  {
    "start": 1087.679,
    "end": 1098.399,
    "text": "So I would say property-based test cases aren't good where The resources you use in testing incurs huge cost because"
  },
  {
    "start": 1100.1,
    "end": 1100.82,
    "text": "it can spiral."
  },
  {
    "start": 1103.179,
    "end": 1107.459,
    "text": "When when somebody listens now and says, oh I want to start with this too."
  },
  {
    "start": 1108.84,
    "end": 1112.26,
    "text": "Do you have one two three tips from starting?"
  },
  {
    "start": 1112.379,
    "end": 1117.86,
    "text": "And also One or Two things we have to be aware of if We start?"
  },
  {
    "start": 1118.199,
    "end": 1118.219,
    "text": "um"
  },
  {
    "start": 1119.5,
    "end": 1124.199,
    "text": "i think there's a lot Of information on the internet and There is good reference in terms of books and Internet."
  },
  {
    "start": 1124.26,
    "end": 1127.919,
    "text": "so these days Information Is quite cheaply available on The net."
  },
  {
    "start": 1130.219,
    "end": 1135.659,
    "text": "So depending on you know framework tools if you search on the net, I actually did that."
  },
  {
    "start": 1135.719,
    "end": 1136.919,
    "text": "You get a lot of references."
  },
  {
    "start": 1138.0,
    "end": 1146.32,
    "text": "The key thing and like thats true for all test cases not just property based is to always start small then grow big."
  },
  {
    "start": 1149.26,
    "end": 1152.84,
    "text": "If i am designing a distributed system let me try with one service."
  },
  {
    "start": 1156.659,
    "end": 1158.86,
    "text": "Go on and go on, and expand my scope."
  },
  {
    "start": 1159.54,
    "end": 1168.76,
    "text": "It's just better to grow organically because when you're writing any kind of Any new tool in an organization whether it is property-based testing?"
  },
  {
    "start": 1169.34,
    "end": 1172.159,
    "text": "Is not just a programming thing the right your?"
  },
  {
    "start": 1172.62,
    "end": 1174.179,
    "text": "You have to make cultural changes."
  },
  {
    "start": 1175.159,
    "end": 1176.639,
    "text": "People think in a certain way."
  },
  {
    "start": 1176.74,
    "end": 1179.5,
    "text": "now we are forcing them to think in different ways."
  },
  {
    "start": 1183.02,
    "end": 1186.52,
    "text": "You have to build that culture, the shift of mindset."
  },
  {
    "start": 1186.78,
    "end": 1186.98,
    "text": "Right?"
  },
  {
    "start": 1187.379,
    "end": 1189.06,
    "text": "So there's a cultural component into it."
  },
  {
    "start": 1189.139,
    "end": 1192.28,
    "text": "and then you have a large army of people in a large organization."
  },
  {
    "start": 1192.74,
    "end": 1197.08,
    "text": "right changing thousand peoples mind is not that easy."
  },
  {
    "start": 1197.36,
    "end": 1207.84,
    "text": "yeah And I've worked on similar projects where we were working on Not so much testing new built systems and i had this shiny new build system when was showcasing."
  },
  {
    "start": 1207.959,
    "end": 1211.379,
    "text": "nobody used why because they had skepticism."
  },
  {
    "start": 1212.84,
    "end": 1220.12,
    "text": "a very tough part of my job, actually probably say toughest part of My Job is not to write code."
  },
  {
    "start": 1220.899,
    "end": 1224.32,
    "text": "Toughest Part Of My Job Is Convincing People."
  },
  {
    "start": 1225.0,
    "end": 1230.86,
    "text": "To Do That At A Stage Where I Am You Know Convinced People Is A Hard Job."
  },
  {
    "start": 1231.32,
    "end": 1232.36,
    "text": "These Are People Like I'm."
  },
  {
    "start": 1232.419,
    "end": 1234.36,
    "text": "Twenty Years Of Experience What This Is?"
  },
  {
    "start": 1234.419,
    "end": 1235.02,
    "text": "What Are You Telling Me?"
  },
  {
    "start": 1236.379,
    "end": 1237.899,
    "text": "And Now you have to deal with it."
  },
  {
    "start": 1237.939,
    "end": 1242.699,
    "text": "So generally, when you start small and grow big... And I'm not just talking about property-based testing."
  },
  {
    "start": 1242.74,
    "end": 1255.919,
    "text": "this is actually even if use chaos testing or something like that the principles still stay the same That When You Start Small & Grow Big If there are any risks of implementation some roadblocks you will find out early right?"
  },
  {
    "start": 1255.959,
    "end": 1257.54,
    "text": "The agile philosophy failed fast!"
  },
  {
    "start": 1258.139,
    "end": 1264.179,
    "text": "Also..if your tool is working for one service then it probably will work for another service."
  },
  {
    "start": 1264.24,
    "end": 1265.8,
    "text": "It's easy to convince people."
  },
  {
    "start": 1266.74,
    "end": 1274.82,
    "text": "One thing that I've always tried is, if you're working in a large organization we have fifty teams."
  },
  {
    "start": 1274.919,
    "end": 1277.26,
    "text": "pick one team which is willing to cooperate with me."
  },
  {
    "start": 1278.8,
    "end": 1281.12,
    "text": "We'll have property-based testing and this new tool."
  },
  {
    "start": 1281.219,
    "end": 1290.58,
    "text": "whatever changes your making show them the value And let them go and preach those values to other members of the team."
  },
  {
    "start": 1290.62,
    "end": 1297.5,
    "text": "Because here, when you're introducing a new technology basically... You are a seller and your developers are customers."
  },
  {
    "start": 1297.54,
    "end": 1298.74,
    "text": "they have to buy that idea."
  },
  {
    "start": 1298.84,
    "end": 1300.939,
    "text": "let's use property-based testing right?"
  },
  {
    "start": 1301.74,
    "end": 1303.04,
    "text": "And standard marketing."
  },
  {
    "start": 1303.52,
    "end": 1308.959,
    "text": "if some seller is telling me my product is great like he gonna say it obviously!"
  },
  {
    "start": 1309.58,
    "end": 1312.06,
    "text": "But then get recommendation from fellow customer."
  },
  {
    "start": 1312.3,
    "end": 1313.419,
    "text": "oh no I used this product."
  },
  {
    "start": 1313.459,
    "end": 1313.919,
    "text": "its awesome."
  },
  {
    "start": 1314.699,
    "end": 1318.659,
    "text": "then you have a lot more confidence because obviously there's conflict of interest, right?"
  },
  {
    "start": 1318.879,
    "end": 1320.52,
    "text": "I would want to buy myself this."
  },
  {
    "start": 1320.58,
    "end": 1323.459,
    "text": "So i'm gonna say good things about it anyway even if its shitty"
  },
  {
    "start": 1323.5,
    "end": 1323.56,
    "text": "yeah"
  },
  {
    "start": 1325.24,
    "end": 1329.82,
    "text": "so that organic growth has to be their large organization."
  },
  {
    "start": 1329.899,
    "end": 1331.78,
    "text": "If your using like from learning perspective."
  },
  {
    "start": 1332.1,
    "end": 1332.86,
    "text": "thats the whole difference."
  },
  {
    "start": 1336.659,
    "end": 1341.159,
    "text": "one major topic can be in a team or an organization."
  },
  {
    "start": 1341.26,
    "end": 1352.219,
    "text": "If you have all the stuff of combinations and this formal description, there is much more test cases than I can understand."
  },
  {
    "start": 1352.86,
    "end": 1354.6,
    "text": "so how do deal with it?"
  },
  {
    "start": 1354.939,
    "end": 1358.699,
    "text": "With the topic of trust trusting all these stuff who gets out?"
  },
  {
    "start": 1360.639,
    "end": 1361.419,
    "text": "I'm not clear about"
  },
  {
    "start": 1361.459,
    "end": 1362.0,
    "text": "your test."
  },
  {
    "start": 1362.719,
    "end": 1370.06,
    "text": "So normally a tester has his test cases and they are very clear one step after another, And i know what their do... ...and can check them."
  },
  {
    "start": 1370.719,
    "end": 1383.159,
    "text": "that my thing is so.. ..I trust these test cases I designed with this property-based testing where there's lot of combinations who run.... ...and don't even maybe see them all!"
  },
  {
    "start": 1384.159,
    "end": 1386.12,
    "text": "How can I trust them?"
  },
  {
    "start": 1386.98,
    "end": 1391.3,
    "text": "When you run a property-based tool, when the test case fails."
  },
  {
    "start": 1391.34,
    "end": 1394.36,
    "text": "You actually get complete sequence of what happened?"
  },
  {
    "start": 1395.28,
    "end": 1401.36,
    "text": "So there...you can see if it's valid one and write for that specific one."
  },
  {
    "start": 1402.82,
    "end": 1404.639,
    "text": "There are millions of things that go wrong."
  },
  {
    "start": 1405.26,
    "end": 1407.419,
    "text": "I agree in certain cases is possibility."
  },
  {
    "start": 1407.62,
    "end": 1408.62,
    "text": "they're false negatives."
  },
  {
    "start": 1410.379,
    "end": 1415.899,
    "text": "It isn't failure but maybe bugging how to describe your system That can happen,"
  },
  {
    "start": 1416.419,
    "end": 1416.6,
    "text": "right?"
  },
  {
    "start": 1417.1,
    "end": 1421.199,
    "text": "So the thing is you can all... You should verify that the failure that happened."
  },
  {
    "start": 1421.24,
    "end": 1422.179,
    "text": "Is it actually a failure?"
  },
  {
    "start": 1422.219,
    "end": 1423.5,
    "text": "Right!"
  },
  {
    "start": 1423.78,
    "end": 1425.32,
    "text": "Yeah so what the system is doing?"
  },
  {
    "start": 1426.04,
    "end": 1432.82,
    "text": "It's kind of not so much replacing a tester more than assisting a tester."
  },
  {
    "start": 1433.98,
    "end": 1435.32,
    "text": "A million things go wrong."
  },
  {
    "start": 1435.58,
    "end": 1437.82,
    "text": "Human can't complement What this system has done."
  },
  {
    "start": 1438.959,
    "end": 1442.82,
    "text": "from those millions these are the twenty things could potentially go wrong."
  },
  {
    "start": 1443.48,
    "end": 1447.219,
    "text": "then I as a human, don't have to go through all the million combinations."
  },
  {
    "start": 1448.78,
    "end": 1459.719,
    "text": "Now in those twenty it could be that some of them are false negatives but there's always a human supervision because once you begin okay this is something that has failed and i had to fix it first thing."
  },
  {
    "start": 1459.76,
    "end": 1463.08,
    "text": "we understand what happening And This Is Where The Role Of Shrinkar."
  },
  {
    "start": 1464.62,
    "end": 1466.659,
    "text": "that's exactly what the shrinker is trying to tell you."
  },
  {
    "start": 1466.74,
    "end": 1469.0,
    "text": "It is telling me where things went wrong?"
  },
  {
    "start": 1469.24,
    "end": 1471.639,
    "text": "Yeah, I think this is a shift too."
  },
  {
    "start": 1471.959,
    "end": 1473.419,
    "text": "see there as an assistant."
  },
  {
    "start": 1474.159,
    "end": 1475.399,
    "text": "for yeah"
  },
  {
    "start": 1475.879,
    "end": 1481.8,
    "text": "so separate from property-based testing with all this generative AI, there's a lot of debate on."
  },
  {
    "start": 1482.199,
    "end": 1483.26,
    "text": "humans are going to be replaced."
  },
  {
    "start": 1483.36,
    "end": 1485.1,
    "text": "I'm like... Humans aren't gonna replace!"
  },
  {
    "start": 1485.24,
    "end": 1486.719,
    "text": "AI is not replacing humans."
  },
  {
    "start": 1486.82,
    "end": 1493.939,
    "text": "it's assisting human in becoming more productive and that's exactly what property based testings doing for you."
  },
  {
    "start": 1494.3,
    "end": 1497.34,
    "text": "It just making you more productive Not replacing you."
  },
  {
    "start": 1498.12,
    "end": 1498.78,
    "text": "A great topic."
  },
  {
    "start": 1499.399,
    "end": 1500.52,
    "text": "Thank you very much, Nikhil."
  },
  {
    "start": 1500.639,
    "end": 1503.28,
    "text": "It was very interesting for me such a new topic from me too."
  },
  {
    "start": 1503.439,
    "end": 1505.74,
    "text": "so I have a lot of questions."
  },
  {
    "start": 1505.82,
    "end": 1507.459,
    "text": "So thank You very much."
  },
  {
    "start": 1507.54,
    "end": 1510.0,
    "text": "to give us this insight or we'll put some information."
  },
  {
    "start": 1510.06,
    "end": 1516.399,
    "text": "Maybe you have some tips and references We can put in the show notes so everybody Can read absolutely as if there are a lot."
  },
  {
    "start": 1516.959,
    "end": 1526.08,
    "text": "And yeah i wish you A good time here at The QuestHack and a Good speech afterwards and uh...a good Time In Europe For Travelling Absolutely!"
  },
  {
    "start": 1526.52,
    "end": 1527.459,
    "text": "I look forward To it quite"
  },
  {
    "start": 1527.5,
    "end": 1527.719,
    "text": "a Lot."
  },
  {
    "start": 1527.919,
    "end": 1529.5,
    "text": "Yeah very much to be here."
  },
  {
    "start": 1529.959,
    "end": 1532.56,
    "text": "Thank you, bye!"
  }
]