Enterprise Python: Software That Lives Long And Prosper
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 131 | |
Author | ||
Contributors | ||
License | CC Attribution - NonCommercial - ShareAlike 3.0 Unported: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this | |
Identifiers | 10.5446/69433 (DOI) | |
Publisher | ||
Release Date | ||
Language |
Content Metadata
Subject Area | ||
Genre | ||
Abstract |
|
00:00
SoftwareEnterprise architecturePresentation of a groupGoodness of fitBitComputer animation
00:29
SoftwareConnected spaceMathematicsEnterprise architecture
00:50
PlastikkarteEnterprise architectureSystem administratorSoftware industryImage registrationSoftwareProduct (business)
01:15
SoftwarePlastikkarteSign (mathematics)PrototypeProduct (business)Electronic signatureComputer animation
01:49
Product (business)Real numberPrototypeComputer animation
02:23
Enterprise architectureReal numberSoftwarePerfect groupIterationBuildingComputer animation
02:43
Process (computing)Design of experimentsEnterprise architectureDependent and independent variablesSoftwareComputer animation
03:05
Enterprise architectureCharacteristic polynomialSoftwareElectronic signaturePhysical system2 (number)Computer animation
03:29
Group actionSoftwareService (economics)Enterprise architectureComputer animation
03:53
SoftwareCondition numberConcurrency (computer science)Human migrationINTEGRALBit rateEnterprise architectureComputer animation
04:13
Cloud computingInflection pointCanadian Light SourceEnterprise architectureMultiplication signSoftwareJava appletProgramming languageComputer programBuildingReal numberSoftware engineeringInstance (computer science)Power (physics)Computer animation
04:50
Computer hardwareVideo gameLine (geometry)Expert systemEnterprise architectureSoftwareTransportation theory (mathematics)BuildingAxiom of choiceJava appletGoodness of fitAlgebraic closureCore dumpProgramming languageComputer animation
05:52
System of linear equationsSoftwareCodeEnterprise architecturePublic domainINTEGRALParameter (computer programming)Projective planeComputer programOperator (mathematics)TwitterDecision theoryProgramming languageJava appletHypermediaOperating systemParadoxValuation (algebra)Computer animationLecture/Conference
07:39
Software developerProgramming languageSystem on a chipProgramming languageEnterprise architectureHypothesisEuler anglesInstance (computer science)TwitterComputer animation
08:02
Software developerProgramming languageComputer-assisted translationEnterprise architectureTwitterBuildingSoftwareService (economics)Computer hardwareBand matrixHigh availabilityVirtual machineMathematicsVector potentialOdds ratioJava appletComputerResponse time (technology)ArchitectureClosed setSemiconductor memoryComputer programInstance (computer science)Open sourceOffice suiteWord2 (number)BefehlsprozessorFreeware1 (number)BitBit rateProgramming languageComputer animation
10:18
Data acquisitionPrisoner's dilemmaAuthorizationTerm (mathematics)Computer animation
10:41
Source code
11:03
Keyboard shortcutVirtual machineEmailGoodness of fitMeeting/Interview
11:28
Virtual machineEmailKeyboard shortcutComputer animation
11:49
Shift operatorDifferent (Kate Ryan album)Point (geometry)Multiplication signTerm (mathematics)Parity (mathematics)MathematicsComputer animation
12:23
Software developerVulnerability (computing)CASE <Informatik>Enterprise architectureDifferent (Kate Ryan album)Programming languageShift operatorComputer animation
12:45
Set (mathematics)Computer programCompilerProgramming languageType theoryCodeSoftware bugGrand Unified TheoryComputer animation
13:28
Programming languageSoftwareSoftware developer1 (number)Type theoryEnterprise architectureComputer animation
14:09
Programming languageEnterprise architectureSoftwareMultiplication signType theoryPrototypeRouter (computing)BuildingDigital rights managementEmulatorProduct (business)Phase transitionFluid staticsComputer configurationFocus (optics)Error messageComputer programComputer animationDrawing
15:26
Enterprise architectureSuccessive over-relaxationSoftwareMultiplication signAnalogyEnterprise architectureWaveChemical equationType theoryProgramming languageComputer animation
15:50
Type theoryValidity (statistics)Functional programmingSoftwareCodeComputer animation
16:27
2 (number)Software engineeringComputer programSoftwareMultiplication signComputer animation
16:52
Computer virusCodeComputer programProof theoryProgramming languageSoftwareArithmetic meanTerm (mathematics)ResultantSpreadsheetPublic domainScaling (geometry)Software developerComplex (psychology)Computer animation
17:50
PrototypeLattice (order)Enterprise architectureSelf-organizationSoftware developerProduct (business)Computer animationMeeting/Interview
18:20
Computer programFeedbackPrototypeComputer configurationProgramming languageComputer animation
18:46
BlogProduct (business)Machine visionSeries (mathematics)SoftwareEnterprise architectureProgramming languagePrototypeClient (computing)Public domainMessage passingSoftware developerSoftware bugType theoryComputer animation
19:22
Enterprise architectureSoftwareSoftware developerStandard deviationType theoryEnterprise architectureProgramming languageBuildingComputer animation
19:44
BuildingStandard deviationPhase transitionSoftwareEnterprise architecture
20:04
Design of experimentsArchitectureSoftware testingService (economics)Event horizonPublic domainEnterprise architectureMorphismusSoftwareComputer programEnterprise architectureOpen sourceElectric generatorPattern languageMedical imagingSelf-organizationLatent heatStandard deviationLibrary (computing)Java appletArchitectureComputer animation
21:23
Optical character recognitionEnterprise architectureDatabaseSoftware frameworkTelecommunicationEvent horizonSocial classSoftwareOperator (mathematics)ImplementationType theoryWebsiteQR codeData storage deviceSound effectState of matterEvent horizonSocial classNewsletterBuildingProjective planeTelecommunicationEnterprise architectureFlash memoryDataflowLibrary (computing)Communications protocolData structure2 (number)Cartesian coordinate systemSoftware frameworkDatabaseDampingOnline helpReading (process)Structural loadComputer animation
22:59
Mountain passContent (media)Event horizonAdvanced Encryption StandardSineFinite-state machineSoftware developerComputer animation
23:20
SatelliteData typeMultiplication signLatent heatComputer programType theoryLecture/Conference
23:43
Type theoryCASE <Informatik>Latent heatError messageRight anglePhysical systemForcing (mathematics)
24:23
Roundness (object)Video gameLecture/ConferenceComputer animation
Transcript: English(auto-generated)
00:04
So good afternoon, everyone. Hope you're having a nice conference so far. As you can see remotely presenting is a bit weird. So given that the burden is on the presenter to make it more engaging, just leave that with me.
00:22
I hope you enjoy this talk. Today, what I'm going to do is I'm going to talk about the kind of enterprise software that never gets a spotlight. And yet, it's gone through one of the most radical changes in the industry. The history of enterprise subways always
00:42
have a deep connection to my own career. And I have the feeling that it got connection to yours too. So even if you don't see it that way, just leave that with me. So let me explain, like five years ago, I was working for a small enterprise software company in Barcelona. And this company was developing products for tax advisors.
01:04
And that made most of its revenue for a card registration product, a software that allows you to get your card registered with the administration. And as you can imagine, COVID hit us directly. During lockdowns, nobody was driving,
01:21
so nobody needed to register a card. But thankfully, the team I was working on developed a prototype for an electronic signature product, a software that lets you sign documents online. Customers have been very hesitant in the beginning to adopt it because they didn't see even me
01:41
to do online what could be done face-to-face. But once we were at home, this product was the only thing they wanted from us. It took us a week or so to go from this prototype to serving real users. And we did a course in Python.
02:03
I bet that most of you had a similar experience during the COVID lockdowns. A neglected product suddenly becomes a DJ for a company you were working for. And it has to go live, however crude, because the customers think that, quote unquote, yesterday.
02:21
Like, I presume you do, right? Those hectic days where for many companies, they're fast, real exposure to a new way of building software. One that emphasizes speed over certainty and iteration over perfection. COVID-19 changed the world, and it also changed how enterprises build software.
02:44
My name is Alvaro Durán. I am the tech advisor for Kiwi.com for back-end. It is the lead global travel tech company and is headquartered in the Czech Republic. And I admit that I build enterprise software, specifically payments.
03:01
What happens after you could pay is my responsibility. So what do I even mean by enterprise software? I obviously mean electronic signatures, I mean payments, and I mean travel reservations, but I also mean more than that. There's actually three characteristics that every enterprise software has in common.
03:21
First, enterprise software often has a lot of persistent data. It's what makes these systems valuable. Second, this data is accessed and manipulated concurrently by many users. This is how the data has been produced through the actions of these users. And third, this software never gets built in isolation,
03:43
but rather it's integrated with all the services. Enterprise software is meant to be a piece of a great puzzle, piping data from one service to another. Data, concurrency, and integrations. That's what it gives enterprise software its reputation.
04:01
Now I'll ask you this. Isn't it like the software you build with nerve-wracking data migrations with elusive rate conditions or unnecessarily difficult APIs? I want you to admit it to yourself that you build enterprise software.
04:22
For a long time, some people thought that Python was not a language for real software engineer. Like back in the nineties, we have the tool called Java and C-Sharp, and they established its supremacy with two powerful features. One, you could build programs in Java once
04:41
and you could run them everywhere. And you could also count on an IT powerhouse like Oracle to support the language. Like for instance, banks, they are the quintessential enterprise software. Enterprise company, sorry. Many banks treat technology as a non-core competency,
05:01
and it's expected from executives to just outsource it to its best of experts. They are actually happy to run licensed software using like Java, as I said, because that established clear lines of blame and it allowed to extend the life of the old hardware.
05:21
So banks chose Java because it was the quote, professionals language. That said, new banks that did change up are for good. In the UK, Monzo is building its tech infrastructure and Go, and in Brazil, new bank has embraced Clojure. Go and Clojure aren't bad choices
05:41
to build enterprise software. In fact, at ewii.com, we use Go to manage the transportation data we need to come up with the itineraries that we sell to our customers. But for everything else, we speak Python. I learned how I built enterprise software
06:01
by reading books written in Java, like domain-driven design, work effectively with legacy code or clean code. So imagine my surprise when in 2018, a tech company called Dropbox IPO'd at an $8 billion valuation, having built most of its software in Python.
06:23
Data? Check. Media to the users? Check. Integration with annoying operating systems? Check. Dropbox was the first enterprise company I know that was built entirely in Python. It confused the hell out of me.
06:43
What was interesting though, is that Dropbox had been initially backed by a VC firm you probably know, Y Combinator, the VC started by Paul Graham. And Paul Graham had written an article in 2004, I think, called the Python Paradox,
07:01
in which he said that you could get smarter programmers to work on a Python project than you could to work on a Java project, because in the end, languages created by people who cared about programming will win. Some people have dismissed this argument though,
07:20
because it feels like Vee Gee, Saigon for his particular taste. And I agree with that sentiment. Choosing a language because it's trendy, is not a sound business decision. A trend is always a trap and out-trending the competition is exhausting and fragile. And in fact, if trends were all that matter,
07:43
then Rust will be more prevalent, given that it's been the most admired language for years. But I think Paul Graham was onto something else. My thesis is this, just like COVID has shaken the enterprise attitude towards
08:01
like for instance, working remotely, all the global trends have shaken how enterprises build up. What are these trends? Well, at least I identified four of them. First, this is a world where computers are faster, really faster than ever. AWS NARF is instanced with dozens of terabytes of memory,
08:24
close to 900 bits of CPUs and 200 gigabytes per second of network bandwidth. And that's a very powerful hardware, and it's so powerful that makes efficient programming languages not as relevant as they used to be.
08:41
We can trade some of that efficiency though, for something more valuable. That's why the second trend is to move towards the service oriented architecture, pioneered in the enterprise by Amazon, and now effectively standard practice everywhere else. SOA gives us high availability, safer changes and specialized teams.
09:01
And in an architecture where most of the response time is due to network latency, performance is no longer a competitive advantage. Third, scaling up hardware rather than building an efficient machine would be prohibitively expensive with Liza software. That's why many enterprises have leaned into our preference
09:24
for open source software. It's works, it's great, and it's free. And fourth, none of these matter if the only enterprises out there were the ones that had already built everything they needed in Java. However, today, companies that help people have better lives with software
09:42
find themselves with billions of users as potential customers, and they find themselves too competing against these Java powerhouses. That's because our ways of living have become dominated by computers. We live in a tech society. Now here's a team that runs across all these four trends.
10:02
Speed, in the Java days, big, eight is slow, and now it's the first that is to slow. Have you ever heard of the word disruption? Most people believe it's just another word for new, but it's not. Disruption is a term coined by Clayton Christensen,
10:23
the author of the Innovators Dilemma. Disruptive technology is one that wins not by being superior in a static world, but by being adapted to a world we are already migrating into. No disruptive technology gets taken seriously in the beginning, but in the end, they win anyway.
10:41
This, I think, works best with an example. Let's, do you remember where you were when the iPhone came out in 2007? Steve Ballmer, then the CEO of Microsoft, was in front of a journalist who was asking him what he made of that new Apple device. And you know what he said?
11:01
He laughed at it. That is the most expensive phone in the world, and it doesn't appeal to business customer. Because it doesn't have a keyboard, which makes it not a very good email machine. And Ballmer has received a lot of backlash for this comment, but I think he was making
11:22
a perfectly reasonable remark, because he was actually quoting his business customers. One, business customers need email machines. Two, email machines must have keyboards. Three, only business customers are willing
11:41
to pay for expensive phones. And therefore, expensive phones must have keyboards. We've all seen technology that's been used by a billion users that no longer exist, like Nokia brick phones. Disruption implies that quality is a shift in terms, because it means different things
12:01
at different points in time. That's actually what kills billion user technology. The interplay between tech acceleration and the competitive business landscape. New technology changes users' needs and priorities, and gaps in the markets get addressed by entrepreneurs who shuffle tech around,
12:20
and they just see what sticks. And what I've learned with these is that Python, it is a case of disruption. And dismissed as a hobbyist toy, it took over when enterprise software development shifted. Python now dominates because its strengths have become indispensable, and its weaknesses have become irrelevant.
12:40
And I want to talk about two features of the language that made all the difference. The first feature is start typing. Now, some of you may think that not having types is the absence of a feature, but I disagree. Adding a feature always comes at the expense of something else. Performance and correctness are the two reasons
13:01
why people believe statically typed languages are superior. By being explicit about types, the compiler can make the program run faster and enforce a set of gut rails on the code, preventing certain bugs. As I said, performance and correctness are the chief benefits of statically typed code.
13:22
The question is, what types force you to speed up, to give up, yeah, from the slip, speed of development? A programming language that force you to use types is by definition one that slows you down. So the question is, is what you get
13:40
worth what you're paying for? Are performance and correctness always more desirable than speed of development? And the answer is no, of course not, not always. And even for enterprise software, what you need early on is speed of development, that is the language most desirable feature. Performance and correctness are absolutely amazing things
14:03
but only once you validate it that there's a business need that can be satisfied with your software. So many times, we engineers focus on correctness from the very beginning. We are even encouraged to, because managers understand that high quality requires time.
14:22
But as the deadline moves in, you start cutting corners, you start using undefined types like any or optional, and you start eroding the benefits you sought early on. And in the end, it looks nothing like what you envisioned. Actually, dark typing and static typing
14:40
delineate the two phases every enterprise software product must go through, which is building the right thing and building the thing right. What happens when you remove the need for types in a programming language? The program becomes slower. You may introduce errors, but you're faster
15:02
and therefore you're less afraid to throw it away and start better, start from a better place. Many companies are building great products using statically typed languages. I have nothing against them, but there's an opportunity to emulate Picasso and build many prototypes looking for the simplest,
15:22
most elegant and most valuable option. The opportunity to spend less time on what could go wrong and spend more time on what did and to use the surf analogy will be like surfing a next wave more playfully rather than overthinking your stance and your balance.
15:42
That opportunity is not available for companies building enterprise software with statically typed language, but it is with Python. How? With my Python. In the play, you've got like these two pieces of code which are actually valid Python code. It's the same function written in two different ways
16:02
and they're both valid. One is not typed and the other is statically typed. And with tools like MIPI, you can add types to your software product incrementally. That's the trick. And you can guess in which company was the inventor of these tool working for
16:22
when he started working on MIPI? Well, it was Dropbox actually. The second feature of Python that I want to talk about is not really a feature, it's you. And what I mean by that, one of the consequences of our tech society is that now everyone understands the value of software.
16:41
But for a long time, hiring was difficult. There weren't enough people who were in the arcane world of programming. When software engineer was done in Java, even the juniors were accomplished programmers. As you know, Python was invented as a successor to ABC, a programming language intended to make beginners more comfortable with code.
17:01
It is undeniably easy to get started with Python. If hello world examples are some kind of proof of that, Python is definitely the simplest. As a result, Python is by far the most popular language to teach to vernacular developers. You might know them for another name, quote, non-professionals. But I think that term is misleading
17:21
because they are professionals just as something else. They create software in their own domain, be it biology, physics, and finance. And software is just a means to an end, not an end in itself. Before learning Python, they might use MATLAB, spreadsheets, R,
17:42
but once they need a more complex or required scale beyond what these tools can provide, they always turn to Python. Why is that relevant? Well, future enterprise products will most likely come from teams of vernacular developers. Let me put it like this. Let's say you are an executive for a large organization
18:02
and you're meeting these two. There are a couple of scientists that have developed an AI prototype and they obviously did it in Python because they aren't engineers and they don't want to be. Their expertise is precisely in the problem they solve with that prototype. So in your opinion,
18:21
which of these two options have more chances of success? One, another team takes that prototype and translate it to a something written in a serious programming language, or two, this team takes the prototypes live, iterates aggressively with their customer's feedback and hires some engineers to help them productize it.
18:43
I haven't seen any research on this, but my money will be on option two. The reason is that vernacular developers have the domain knowledge to build the enterprise software of the future and they no longer need the serious programming language to do it. They are the most innovative minds available with Python, the tools to build are no longer an obstacle.
19:03
And the other reason that I have is that I actually saw it myself. When I was working on Edge tier, that's exactly what happened. Its founders developed an AI tool to detect anomalies in the messages sent to client support teams. And once they evaluated the need, Edge tier founders didn't rewrite the prototype in Java. They productized it all in Python.
19:23
Dark typing and the rise of the vernacular developers are two ways in which Python has challenged a long-haul assumption that only, quote, serious languages can be used to build enterprise software. And the only question that remains is, how? What are the good standards for building enterprise software in Python?
19:43
And the answer is, they're not, we don't have them yet. There are no standards on how to build enterprise software in Python. What do exist though, are standards for building in Java retrofitted into Python. That's the phase that most disruptive technology
20:00
goes through in the early days, and it's called ischemicomorphism. It happened, for example, when the TV was invented. The fast news programs on television were just someone repeating on camera what they had just broadcasted on radio. They were just radio programs with images. The same is happening now in enterprise software.
20:20
Java still exerts a powerful influence in the enterprise world, and many of the patterns we use in Java have been ported successfully into Python. And in fact, this book, Architectural Patterns with Python, AKA Cosmic Python, is exactly that, a great stepping stone for building enterprise software in Python,
20:41
but only a stepping stone. Like radio programs on TV, Java enterprise patterns in Python can work, but we can do so much more than that. And what does more look like? I don't know, I'm not sure. As my generation, who is more proficient in Python, start reaching stuff-class roles in big organizations,
21:03
we'll see the emergence of standards for building enterprise software specific to Python. Early this year, I wanted to figure it out myself, so I built an open-source library to build payments, the kind of enterprise software I know well, and it's called Acquiring.
21:20
And a few relevant design ideas that I used it are these. Oh, yeah. Yes, sorry about that. A few real ideas about how I built this library
21:40
were these, first, framework and database agnoticism. This library can work with any framework you use, like Django, Flask, or fast API, and any database engine. That's helpful for enterprises who want to decommission certain technology they're using, but don't want to rewrite the whole application from scratch. Second, structural duct typing with protocols.
22:03
And I've been talking about how incremental typing is good, but I've found that separating type hints from the implementation are even better. Immutable data classes. Immutability helps engineers follow the flow of data more easily, because certain operations on the data encapsulated in classes is prohibited,
22:21
or at least heavily discouraged. And last, event-driven communication. Rather than updating the state of classes, I think that keeping an immutable log of events is much more effective. The ability benefits are worth sacrificing, be it a read load and more storage sites. And if these ideas are appealing to you,
22:40
it would mean the world to me if you gave this project a start on GitHub. I'm preparing a workshop on how to build enterprise software using these ideas. And if you're interested in attending, let me know by just going through this QR code and subscribe to my newsletter, where I've already shared a loose transcript of this talk. Or maybe you even want to join my team at kiwi.com.
23:03
In that case, feel free to stop by the booth and let the folks know that I sent you, especially if you're an Angular developer. And I'm more than happy to answer questions now, or you can join the discussion and the Kiwi.channel on Discord. Enjoy the rest of the conference.
23:28
Yeah, thanks a lot for the talk. We don't really have a lot of time. That's why I'm going to do one quick question that came in over Discord. Why do you think that using type hints in Python slows programmers down?
23:41
Any specific reason? Well, for starters, you need to think about what the types are using. You might find situations where, even though you're making a mistake, that mistake is sensible. And you need to force-feed the type into the system, rather than just let it be.
24:02
It's not an error that I'm really concerned about, and I can move on into something else. That's a very specific use case that I found. I know you're introducing errors by doing that, but the question again is, what is your priority now? Get something on the market or get something correct next week.
24:22
All right. Thanks a lot for your live talk, and a warm round of blossom room again.