Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Привет!

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

The Books that Every Programmer Must Read (2015)

Slide 10

Slide 10 text

The blog post I still have to write :-)

Slide 11

Slide 11 text

Teach Yourself Programming in 10+ years (2016)

Slide 12

Slide 12 text

Longest talk in the history of conferences!

Slide 13

Slide 13 text

Third time is a charm!

Slide 14

Slide 14 text

Божидар

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

@bbatsov

Slide 24

Slide 24 text

emacsredux.com

Slide 25

Slide 25 text

metaredux.com

Slide 26

Slide 26 text

#7 on the list of top white hackers in Bulgaria!

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Божидар Батсов

Slide 29

Slide 29 text

стацковарфлоу

Slide 30

Slide 30 text

Expert in cyber security

Slide 31

Slide 31 text

Expert in the following programming languages: Unix, Emacs, Perl and Ruby

Slide 32

Slide 32 text

The Don Juan of IT in Bulgaria

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

slide intentionally left blank

Slide 35

Slide 35 text

Bonus talk

Slide 36

Slide 36 text

Personal Finance in 3 minutes

Slide 37

Slide 37 text

Disclaimer: That’s not an investment advice. Just some food for thought.

Slide 38

Slide 38 text

53 billion BGN in bank deposits.

Slide 39

Slide 39 text

Current interest rate on deposits is around 0%.

Slide 40

Slide 40 text

Official annual inflation in Bulgaria: 3%

Slide 41

Slide 41 text

Real annual inflation in Bulgaria: Don’t ask!

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Invest some of your savings in a low-cost mutual index fund

Slide 44

Slide 44 text

S&P 500

Slide 45

Slide 45 text

The average annualized total return for the S&P 500 over the past 90 years is 9.8 percent.

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

moneyforsomething.com

Slide 50

Slide 50 text

ETFmatic

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

The Main Event

Slide 53

Slide 53 text

The Groundhog Development Method

Slide 54

Slide 54 text

What the f*ck is a groundhog?

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

The Groundhog DAY Development Method

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

8.0/10

Slide 63

Slide 63 text

Life has a funny way of repeating itself…

Slide 64

Slide 64 text

Software development has a funny way of repeating itself

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

From greenfield to legacy in 2 years

Slide 67

Slide 67 text

Case Studies

Slide 68

Slide 68 text

A Study in Groundhogs

Slide 69

Slide 69 text

Booking Engine

Slide 70

Slide 70 text

• 15 year old codebase • A “magnificent” monolith • 500,000+ lines of C++ code • No automated tests • Pretty poor design • make clean install was taking 20-30 minutes • all the classes were prefixed with “Lin”

Slide 71

Slide 71 text

Let’s rewrite it in Java and that would fix all the problems!

Slide 72

Slide 72 text

The (Rewrite) Wasteland

Slide 73

Slide 73 text

Big Bang Rewrites Almost Always Fail

Slide 74

Slide 74 text

• Stabilize the existing system • Try to isolate some bounded contexts in it (e.g. billing, client-facing functionality, internal functionality) • Start extracting those components one by one (rewriting them if this seems highly beneficial)

Slide 75

Slide 75 text

Small improvements over a long period of time really add up!

Slide 76

Slide 76 text

Compound Interest Rate

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

Content Management System

Slide 79

Slide 79 text

• part of a huge multi-purpose Rails monolith (1,5 million lines of code) • the inability to quickly iterate on the CMS functionality impacted directly the revenue of the business • the CMS functionality was relatively simple

Slide 80

Slide 80 text

Let’s extract the CMS into a separate application!

Slide 81

Slide 81 text

Original estimate - 6 months

Slide 82

Slide 82 text

3 years later…

Slide 83

Slide 83 text

• the extraction was mostly done, but still not quite • the new project was already considered legacy itself • internal conflicts within the team introduced a node.js rendering layer on top of the original CMS app, as some FE devs “disliked” Rails • the development process was still much slower than the goal we set out to achieve

Slide 84

Slide 84 text

No content

Slide 85

Slide 85 text

What’s the moral of the story?

Slide 86

Slide 86 text

Any estimate with a 3+ months of a horizon is highly speculative.

Slide 87

Slide 87 text

Sometimes WordPress is not a bad thing…

Slide 88

Slide 88 text

Don’t become victims of the “Not Invented Here” syndrome

Slide 89

Slide 89 text

Quote Streaming Service

Slide 90

Slide 90 text

• Implemented in node.js • Solid test coverage • Pretty small codebase (around 5k) • Serious performance issues • Frequent crashes • It was deemed “unfixable”

Slide 91

Slide 91 text

node.js is the problem

Slide 92

Slide 92 text

Let’s rewrite this in Clojure!

Slide 93

Slide 93 text

• we’ve encountered serious issues in an upstream Clojure library • there was a lot of internal opposition in the company towards the new service because supposedly “Clojure was too weird” • eventually we rewrote the service back to node.js • no performance issues • no crashes

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

Everything is fixable.

Slide 96

Slide 96 text

A tool is only as good as the person wielding it.

Slide 97

Slide 97 text

The choice of a tech stack should be aligned with the people who are supposed to use it.

Slide 98

Slide 98 text

No content

Slide 99

Slide 99 text

RuboCop

Slide 100

Slide 100 text

1,500,000 downloads

Slide 101

Slide 101 text

• features that add a lot of complexity get rejected • features that are not aligned with the core goals of the project get rejected • supporting obscure practices get rejected • inclusion of extra runtime dependencies happen extremely rarely • remove features

Slide 102

Slide 102 text

Flexible Extension Mechanism

Slide 103

Slide 103 text

Simplicity is a design choice.

Slide 104

Slide 104 text

nREPL

Slide 105

Slide 105 text

800,000 downloads

Slide 106

Slide 106 text

•no runtime dependencies •almost no breaking changes •super flexible extension mechanism

Slide 107

Slide 107 text

No content

Slide 108

Slide 108 text

Dependencies are the highway to hell

Slide 109

Slide 109 text

Stability is a design choice.

Slide 110

Slide 110 text

Hammock time

Slide 111

Slide 111 text

Hammock-driven Development https://www.youtube.com/watch?v=f84n5oFoZBc

Slide 112

Slide 112 text

Different design approaches for libraries/tools and applications.

Slide 113

Slide 113 text

slide intentionally left blank

Slide 114

Slide 114 text

No content

Slide 115

Slide 115 text

No content

Slide 116

Slide 116 text

Keep it simple

Slide 117

Slide 117 text

Limit external dependencies.

Slide 118

Slide 118 text

Be very cautious with adding new features.

Slide 119

Slide 119 text

Remove features that are rarely used/didn’t work out.

Slide 120

Slide 120 text

Breaking Changes!

Slide 121

Slide 121 text

No content

Slide 122

Slide 122 text

Don’t rewrite anything (big)!

Slide 123

Slide 123 text

Say “No!” to hype-driven development

Slide 124

Slide 124 text

If you’re always chasing after the next hot technology then you’re never building something valuable.

Slide 125

Slide 125 text

Incremental design

Slide 126

Slide 126 text

Design

Slide 127

Slide 127 text

Legacy is “complex”

Slide 128

Slide 128 text

Micro-services are not a silver bullet

Slide 129

Slide 129 text

I used to have one big problem, now I have many micro problems.

Slide 130

Slide 130 text

Learn how to deal effectively with legacy code

Slide 131

Slide 131 text

No content

Slide 132

Slide 132 text

No content

Slide 133

Slide 133 text

What’s the best way to learn that fire burns?

Slide 134

Slide 134 text

You have to get burned.

Slide 135

Slide 135 text

There’s no substitute for experience.

Slide 136

Slide 136 text

Felina

Slide 137

Slide 137 text

Credits twitter: @bbatsov github: @bbatsov https://metaredux.com https://emacsredux.com HackConf 2019 Sofia, Bulgaria 12.10.2019