Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alroniks/fe1e7382bc10f525770d to your computer and use it in GitHub Desktop.
Save alroniks/fe1e7382bc10f525770d to your computer and use it in GitHub Desktop.
1
00:00:00,000 --> 00:00:23,042
alright everyone I do it so it's ok so
she asked me to talk at Larkin goes to
2
00:00:23,042 --> 00:00:28,064
the last year was obliged i enjoy to
throw out hope some of you that reappear
3
00:00:28,064 --> 00:00:34,121
in this year also enjoyed it and
basically would like but it's like local
4
00:00:35,021 --> 00:00:39,064
don't really care what you're talking
about but like what would be the talk
5
00:00:39,064 --> 00:00:49,963
under that so I wanted to basically I
can run my usual spill was like peace
6
00:00:50,539 --> 00:00:56,610
respect introduction or BDD or more than
by example like a basic theme not very
7
00:00:56,061 --> 00:01:01,152
connected to the Laurel and then we can
agreed on it and then a couple of next
8
00:01:02,052 --> 00:01:07,651
week's I was opening a checking it up
are going through the BDD hashtag and
9
00:01:08,119 --> 00:01:12,860
like seeing the street every now and
then which was like how do I unit test
10
00:01:12,086 --> 00:01:17,775
my eloquent model or how do I unit is
this controller how do I test drive that
11
00:01:18,549 --> 00:01:27,540
thing and it kind of hurts me that
there's a set of questions that we do
12
00:01:27,054 --> 00:01:31,125
have answers for between them speak
about them and whatever kind of Corey
13
00:01:32,025 --> 00:01:35,574
fight there are a lot of things that we
like using in terms of explaining things
14
00:01:35,799 --> 00:01:41,350
there's a context think about the things
in in terms of the context but never
15
00:01:41,035 --> 00:01:48,764
actually explain what this context is
about so I basically decided to talk
16
00:01:49,079 --> 00:01:58,540
about that and if you wish Taylor talk
for this conference I'm results
17
00:01:58,054 --> 00:02:02,057
or constantine career shops have
problems pronounce my last name all of
18
00:02:02,084 --> 00:02:13,088
them at a normal thing for russian noise
I'm and basically did 23 mistakes in my
19
00:02:13,088 --> 00:02:20,166
life big ones he had been respect caring
about the deity too much I work as a
20
00:02:21,066 --> 00:02:26,072
team to practice manager in the company
called in London and the things that I
21
00:02:27,026 --> 00:02:33,034
love are needed to related stuff
learning how to communicate inside and
22
00:02:33,034 --> 00:02:37,036
outside of the codebase how people
communicate between each other before
23
00:02:37,036 --> 00:02:39,885
the develops after how people
communicate with each other through the
24
00:02:40,209 --> 00:02:47,650
software and that's basically where my
wall tangent on DVD comes from working
25
00:02:47,065 --> 00:02:52,164
company called where people call me as a
bid to practice manager to do crazy
26
00:02:53,064 --> 00:02:58,118
things like that I'm preaching I like to
say that everything that I'm showing and
27
00:02:59,018 --> 00:03:04,023
everything I'm talking about his actual
things that we do it's not some
28
00:03:04,023 --> 00:03:07,122
arbitrary original stuff that I think of
in the corner of the company and then
29
00:03:08,022 --> 00:03:13,093
nobody in the company if you speak with
people in and we actually leave by the
30
00:03:13,093 --> 00:03:17,139
principles Woodbridge right
31
00:03:18,039 --> 00:03:24,080
so that's a bit about me just to give
you a context but what is this talk
32
00:03:24,008 --> 00:03:33,417
about right because software costs mean
muxing what is it about estimation heard
33
00:03:34,209 --> 00:03:40,160
some some some people are talking about
estimation no its not so what is it that
34
00:03:40,016 --> 00:03:41,027
right
35
00:03:41,027 --> 00:03:47,101
very tricky talk arm that larval facades
and flick among suspecting developers
36
00:03:48,001 --> 00:03:55,014
bad idea that is active records and
eloquent other frameworks superiority
37
00:03:55,014 --> 00:04:03,110
over larval killing kittens and other
subjective from destructive crap like
38
00:04:04,001 --> 00:04:16,020
that is not in stock right sorry does
somebody know
39
00:04:16,029 --> 00:04:22,114
well actually the stock is about this
talk is about introducing in trying to
40
00:04:23,014 --> 00:04:27,036
make sense of development costs that's a
topic that nobody talks about it and I
41
00:04:27,036 --> 00:04:30,071
think it's a shame because if you think
if you look at the software from
42
00:04:30,071 --> 00:04:36,124
communication and economical perspective
of things that you kind of didn't
43
00:04:37,024 --> 00:04:43,082
thought about before start making sense
they start clicking the stock is also
44
00:04:43,082 --> 00:04:50,157
highlighting the context of tools and
practices we use Active Record I would
45
00:04:51,057 --> 00:04:55,060
not I would definitely not criticize the
tools themselves but I will critically
46
00:04:55,006 --> 00:04:59,031
consider them and show the context in
which the stores are very small and the
47
00:04:59,085 --> 00:05:04,183
context in which the stores might not be
a good fit for this stock is involved
48
00:05:05,083 --> 00:05:10,087
seen the context for the tools and
trying to find and understand why for
49
00:05:10,087 --> 00:05:16,095
some people this particular tool works
amazingly does magic and wonder why for
50
00:05:16,095 --> 00:05:20,103
some other projects and other teams do
stories like is the most horrendous
51
00:05:21,003 --> 00:05:27,024
horrible thing they ever did the most
important beads in this introductory
52
00:05:27,024 --> 00:05:32,120
slide is this talk is about is based on
years of observations and experience the
53
00:05:33,002 --> 00:05:37,095
stock is based on me going through the
three different companies client
54
00:05:38,013 --> 00:05:42,034
companies of seven projects small
projects big projects complex projects
55
00:05:42,034 --> 00:05:48,113
obvious projects small team medium team
big teams with a different context and
56
00:05:49,013 --> 00:05:53,017
finding some patrons and some
repercussions what the stock is not it's
57
00:05:53,053 --> 00:05:59,061
not built based on the actual data
collection analysis I will show some
58
00:05:59,061 --> 00:06:03,093
graph that represents my observations
and experience those graphs do not
59
00:06:03,093 --> 00:06:08,093
represent a collection of data throw the
world and analysis of the date right
60
00:06:08,093 --> 00:06:15,116
it's purely talk from my contacts and I
hope you'll see some repercussions worse
61
00:06:16,016 --> 00:06:19,049
things that you do a new senior
day-to-day lives and if you do then
62
00:06:19,049 --> 00:06:21,072
means we were coming from the same place
63
00:06:21,072 --> 00:06:25,085
if you don't maybe you're coming from
the different context the one that I
64
00:06:25,085 --> 00:06:33,107
never seen before yet so just to
simplify another name for the stalk and
65
00:06:34,007 --> 00:06:44,066
the easier one is a context the talk
right software costs so when you when
66
00:06:44,066 --> 00:06:49,081
you talk about costs usually think about
things like money right that's a
67
00:06:49,081 --> 00:06:56,127
background there in the software costs
means slightly different thing used in
68
00:06:57,027 --> 00:07:01,056
the software will not talking about
costs were talking about time how long
69
00:07:01,056 --> 00:07:06,063
does it take to do this or how long does
it take to do this thing how long does
70
00:07:06,063 --> 00:07:13,118
it take to deliver project that's a cost
of the project and if you're struct
71
00:07:14,018 --> 00:07:19,021
everything we do with our projects with
our products you can basically
72
00:07:19,048 --> 00:07:25,062
aggregated into three different chunks
of work there is a time it takes you to
73
00:07:25,062 --> 00:07:29,136
ride and toilet test code in the first
place and even if you're not using
74
00:07:30,036 --> 00:07:35,129
automation by the way you're still
testing I don't like to yourself you are
75
00:07:36,029 --> 00:07:42,081
writing code and you open in a browser
hey you're testing you are testing no
76
00:07:42,081 --> 00:07:46,162
matter which tools you use your always
destined the work after you did it
77
00:07:47,062 --> 00:07:52,107
that's a normal state of mind but in
addition to just like introducing things
78
00:07:53,007 --> 00:07:54,016
are writing things in the first place
79
00:07:54,097 --> 00:08:01,130
you do start after after a while feeling
the urge to change them right and this
80
00:08:02,003 --> 00:08:06,074
this phase where like your writing a new
stuff faces out and let's start phasing
81
00:08:07,001 --> 00:08:14,007
in is this needs to change the existing
things right time to change code and
82
00:08:14,061 --> 00:08:18,137
tests and again the same was test if you
are not doing automation it doesn't mean
83
00:08:19,037 --> 00:08:24,041
you're not doing your adopted us right
if you introduce an authentication
84
00:08:24,041 --> 00:08:28,087
mechanism in front of your website and
you're not doing any automation you
85
00:08:28,087 --> 00:08:31,066
still will do tests and it means you
need to update your manual test
86
00:08:31,849 --> 00:08:34,870
routine to go through this
authentication mechanism every time you
87
00:08:34,087 --> 00:08:39,186
need to test new feature and then there
is the third set of things are times
88
00:08:40,086 --> 00:08:45,425
that was spend a lot of people talk
about actually a lot of people talk
89
00:08:46,199 --> 00:08:51,207
about not a lot of people doing them
time to reflect her cold and tests and
90
00:08:51,279 --> 00:08:55,160
we're talking a lot about like oh you
need to reflect her at the centerpiece
91
00:08:55,016 --> 00:08:59,425
of TDD or chrome is like one when it
goes into actual delivery is very very
92
00:08:59,569 --> 00:09:03,590
hard to do these things and it's very
very hard to reason why we need in the
93
00:09:03,779 --> 00:09:08,790
first place so for the purpose of this
talk I will give this three different
94
00:09:08,079 --> 00:09:13,106
distinct sections names and we're going
to explore in time to time to write and
95
00:09:14,006 --> 00:09:17,011
test called I will call it from now on
96
00:09:17,011 --> 00:09:23,013
cost of introduction time to change cold
and tests is a cost of change and that's
97
00:09:23,013 --> 00:09:27,892
a cost that you most likely hear a lot
about when you're in a jail conferences
98
00:09:28,009 --> 00:09:33,220
or you're trying to talk with somebody
about the Legacy Project time to reflect
99
00:09:33,022 --> 00:09:41,631
our content as I will call it cost of
ownership rights a cost of only coat so
100
00:09:41,829 --> 00:09:45,430
we'll go through each one of them and I
will try to give you enough context
101
00:09:45,043 --> 00:09:49,074
information so that you can start making
sense of those forces and then we will
102
00:09:49,074 --> 00:09:54,166
go into seen how we can make this three
forces play with each other and how we
103
00:09:55,066 --> 00:09:59,129
can make sense of them so that we
develop software taken them into account
104
00:10:00,029 --> 00:10:06,188
which is the normal state of mind for
engineers the cost of introduction
105
00:10:06,449 --> 00:10:11,544
essentially is a time it takes to
introduce new natural independent the
106
00:10:12,399 --> 00:10:18,443
coupled application logic to the good
example of this might be if you're
107
00:10:18,839 --> 00:10:22,842
building a lot of application created
new controller of arbitrary complexity
108
00:10:23,139 --> 00:10:28,220
or creating new elegant model or
creating new form right so time it takes
109
00:10:28,949 --> 00:10:35,120
to create completely new controller or
completely new model that time is a cost
110
00:10:35,012 --> 00:10:38,088
of introducing the concept into the card
base
111
00:10:38,088 --> 00:10:43,142
so that your business model has is it
has very clear direct correlation to the
112
00:10:44,042 --> 00:10:49,044
business value the more controllers you
create more value there is to the
113
00:10:49,044 --> 00:10:54,070
project more models you create a more
vital areas to the project this cost
114
00:10:54,007 --> 00:10:58,048
also has direct relation to the lines of
code number of lines of code and it
115
00:10:59,011 --> 00:11:03,013
basically means the more lines of code
require more time to write them so the
116
00:11:03,013 --> 00:11:09,112
less lines of code means cheaper cost of
introduction those two first fighters
117
00:11:10,012 --> 00:11:15,047
basically mean that this cost is
relatedly easy to optimize for usually
118
00:11:15,047 --> 00:11:19,144
by generalization or convicted interdict
introduction of convenience there so it
119
00:11:20,044 --> 00:11:25,108
doesn't mean it means if your cost is
directly related with amount of lines of
120
00:11:26,008 --> 00:11:31,105
code and less lines of code you have the
cheaper it is to introduce thing it's
121
00:11:32,005 --> 00:11:35,071
very easy to optimizing just like you
makes some sense something introduced a
122
00:11:35,071 --> 00:11:41,075
ball with less lines in addition to
attribute this cost has very interesting
123
00:11:41,075 --> 00:11:48,154
dynamic associated to the first and the
key dynamics areas visible it is visible
124
00:11:49,054 --> 00:11:54,067
from the outset you start project and
the first and only cost you probably
125
00:11:54,067 --> 00:11:57,146
sees how long it takes you to create new
controller how long it takes you to
126
00:11:58,046 --> 00:12:03,051
create a new route and how long it takes
you to creating you for this very
127
00:12:03,051 --> 00:12:07,103
visible is very clear you can show it to
the business and after quite some time
128
00:12:08,003 --> 00:12:13,099
after working on a floral projects even
business can understand how much it
129
00:12:13,099 --> 00:12:21,114
costs to create a controller and Laurel
or any other framework these costs
130
00:12:22,014 --> 00:12:28,082
losses relevancy over the project
lifetime so the longer project goes the
131
00:12:28,082 --> 00:12:33,180
less important this coast is a good
example of this is you do not create
132
00:12:34,008 --> 00:12:38,060
controllers new controllers and forms
throughout the project life time there
133
00:12:39,032 --> 00:12:44,057
is a phase where you start creating less
and less controllers less and less forms
134
00:12:44,057 --> 00:12:47,063
and when you start doing is you start
changing the existing ones rather than
135
00:12:48,017 --> 00:12:52,064
trying to create a new new new
controller you can't logically more but
136
00:12:52,064 --> 00:12:58,083
I didn't you stuff on top and as I said
previously discussed a stable across
137
00:12:58,083 --> 00:13:01,177
multiple projects to the time it takes
to create a controller in this project
138
00:13:02,077 --> 00:13:06,130
in larval is exactly the same amount of
time it takes to create exactly same
139
00:13:07,003 --> 00:13:11,078
controller or exactly same complexity
level controller and another project
140
00:13:12,005 --> 00:13:20,076
business loves it right that's amazing
actually think I feel that most people
141
00:13:20,076 --> 00:13:25,091
focus on the first one and a third one
it is visible from the outside makes it
142
00:13:25,091 --> 00:13:29,104
very easy to sell it is stable across
projects means you optimize it for one
143
00:13:30,004 --> 00:13:36,102
project left to live for another project
also I reckoned
144
00:13:37,002 --> 00:13:42,008
attribute or dynamic part that you need
to focus most about is not this to this
145
00:13:42,008 --> 00:13:49,012
will cost of introduction losses
relevancy over the project last time the
146
00:13:49,012 --> 00:13:54,056
longer project goes the less you
benefits unless you care about this one
147
00:13:54,056 --> 00:14:04,097
so goes the construction is relatable
EEZ to optimize for right so there are
148
00:14:04,097 --> 00:14:08,133
usually two ways to optimize for
customer interaction with number one is
149
00:14:09,033 --> 00:14:13,117
convenience later so you introduced
convenience player in your framework on
150
00:14:14,017 --> 00:14:18,099
your tall set and that's how you
optimize for a good example of
151
00:14:18,099 --> 00:14:26,166
convenience is service locator as you
probably know in local sushi go with
152
00:14:27,066 --> 00:14:33,089
dependency injection and you will end up
with like was the code base that is like
153
00:14:33,089 --> 00:14:35,978
this right you need to inject the cash
service and then you need to use the
154
00:14:36,779 --> 00:14:44,430
service later on in comparison to just
use it just like one line that's a very
155
00:14:44,043 --> 00:14:47,137
good example convenience lear keep in
mind I'm not saying I'm not saying this
156
00:14:48,037 --> 00:14:51,126
is bad I'm not saying this is good I'm
just giving a context it's just two
157
00:14:52,026 --> 00:14:59,031
different ways to do the same job and
this one takes more lines another
158
00:14:59,076 --> 00:15:02,965
example from outside liable that's a
symphony so you have a base controller
159
00:15:03,649 --> 00:15:08,230
which also makes it easier to do trivial
tasks in one single line of code because
160
00:15:08,023 --> 00:15:10,111
you extend from the base controller and
just called this matter on the base one
161
00:15:11,011 --> 00:15:16,860
right another way to optimize for cost
of introduction is generalization so you
162
00:15:16,959 --> 00:15:20,972
take some problem which is very specific
for the particular the main or that
163
00:15:21,089 --> 00:15:25,176
particular business and you trivialize
it you generalize it to the point where
164
00:15:25,959 --> 00:15:31,984
it is reusable across domains a good
example of this is ActiveRecord rights
165
00:15:32,209 --> 00:15:37,920
activities you have a business object in
your code base and then you need to
166
00:15:37,092 --> 00:15:40,141
store information you need to store this
object somewhere in the persistence
167
00:15:41,041 --> 00:15:44,072
layer so usually like the manual way of
doing this is you introduce some
168
00:15:44,072 --> 00:15:48,080
persistence responsible object that will
store this thing manually maybe we'll
169
00:15:49,052 --> 00:15:56,061
connect sturdy ball to the database now
people recognize that there is a set of
170
00:15:56,061 --> 00:16:00,077
options that you doing most of the
projects so why do you need to create
171
00:16:00,077 --> 00:16:03,886
this again and again and again why can't
we just like colds this hole in the base
172
00:16:04,579 --> 00:16:10,350
class that will that will provide you
was like most of the 70 90% of the
173
00:16:10,035 --> 00:16:14,107
methods that you will need to use and
that's what ActiveRecord it takes less
174
00:16:15,007 --> 00:16:17,086
lines of codes takes less work
175
00:16:17,149 --> 00:16:25,920
convenience even despite was another
great example from outside of horrible
176
00:16:25,092 --> 00:16:26,158
and I think it's Tyler
177
00:16:27,058 --> 00:16:32,085
so if you don't know there is a pot
during a flight from Ganga for which
178
00:16:32,085 --> 00:16:36,143
subscriber an issue the way in
subscriber access you have an interface
179
00:16:37,043 --> 00:16:40,126
and you have some somebody that is
dependent on this interface or whenever
180
00:16:41,026 --> 00:16:43,035
something happens you just call this
method in interface that's how events
181
00:16:44,016 --> 00:16:47,085
tribal words somebody looked into the
subscriber and said look we need to
182
00:16:47,085 --> 00:16:50,103
create interfaces all the time and
implement them all the time that kind of
183
00:16:51,003 --> 00:16:54,077
a lot of muscle generalize it and create
events Pacha
184
00:16:54,077 --> 00:16:57,091
so that's another example of
generalizing on events described
185
00:16:57,091 --> 00:17:02,092
resulted in events Pacha even more
interesting one as dependency injection
186
00:17:02,092 --> 00:17:06,147
container that's a generalization on
dependency injection so you have a
187
00:17:07,047 --> 00:17:11,062
normal object-oriented code were you
need to create a service and you have a
188
00:17:11,062 --> 00:17:15,137
couple of defenses dependency possible
to manually and then somebody looked at
189
00:17:16,037 --> 00:17:23,053
it look it's too many lines of code is
too complex to buy the things around us
190
00:17:23,053 --> 00:17:26,069
generalize it was created dependency
injection container that will do all
191
00:17:26,069 --> 00:17:35,072
these things for us so the thing that
I'm trying to say here is very easy to
192
00:17:35,099 --> 00:17:41,110
optimize for the cost of introduction
and no matter what you think
193
00:17:42,001 --> 00:17:47,086
optimizing for custom introduction is
not inherently about that's what level
194
00:17:47,095 --> 00:17:50,178
does a lot and that's actually a good
thing but it's a good thing in the
195
00:17:51,078 --> 00:17:59,133
context and the context is this is a
cut-off point for of the product so kind
196
00:18:00,033 --> 00:18:04,119
of point is when you need to stop
working on the project or product when
197
00:18:05,019 --> 00:18:09,033
the product is ready and you will
probably never touching it again you
198
00:18:09,033 --> 00:18:10,088
will not updated
199
00:18:10,088 --> 00:18:14,117
not just any complex changes to it
you'll probably action there and
200
00:18:15,017 --> 00:18:19,110
simplify things from this point on no
new features will be added a good
201
00:18:20,001 --> 00:18:26,040
example of cut off base project is based
that's how first become the second base
202
00:18:26,049 --> 00:18:31,143
camp created they had a very low or
limited kind of point they created based
203
00:18:32,043 --> 00:18:35,109
company said no more features ever just
simplify what we have
204
00:18:36,009 --> 00:18:44,010
here if you have a project was really
short cut-off point it means the cost of
205
00:18:44,001 --> 00:18:47,053
introduction is probably the cost you
need to worry about and that probably is
206
00:18:47,062 --> 00:18:51,991
the only cause you to worry about
because when you kind of when this like
207
00:18:52,549 --> 00:18:57,590
introduction of new controller phases
out a project and it benefited from
208
00:18:57,059 --> 00:19:01,076
introducing control is really really
quickly introduce informs really really
209
00:19:01,076 --> 00:19:06,145
quick and then it kind of becomes
trickier but no problem project and
210
00:19:07,045 --> 00:19:12,059
other projects and that's something that
I feel many of you probably experienced
211
00:19:12,059 --> 00:19:17,388
and that's something that I experienced
a lot on the short projects right if the
212
00:19:17,919 --> 00:19:21,700
product life is short enough to not
encounter loss of cost of introduction
213
00:19:21,007 --> 00:19:29,048
relevancy than the cost of introduction
it only cost optimized but keep in mind
214
00:19:30,011 --> 00:19:36,110
Kenyans based projects either die a hero
or live long enough to see themselves
215
00:19:37,001 --> 00:19:50,048
and that's doable and I cost cost of
change and that's the reason why
216
00:19:50,057 --> 00:19:58,266
comedians based projects if they live
long enough to change the time it takes
217
00:19:58,779 --> 00:20:03,817
to adapt existing application logic your
existing controllers your existing forms
218
00:20:04,159 --> 00:20:12,130
to new business realities on the ongoing
basis and also has set up attributes so
219
00:20:12,013 --> 00:20:15,074
it also has direct correlation to
business value the more changes you do
220
00:20:15,074 --> 00:20:19,096
the more value to the business and has
no direct relation two lines of code
221
00:20:19,096 --> 00:20:21,665
whatsoever
222
00:20:22,529 --> 00:20:27,210
introducing hundred lines according to
my dad doesn't necessary removing
223
00:20:27,021 --> 00:20:30,035
hundred lines of court might add value
not necessary
224
00:20:30,035 --> 00:20:34,038
replacing one hundred lines of code was
dumb mines of God my action a huge
225
00:20:34,038 --> 00:20:40,082
amount of value there is no correlation
cost of change also very much affected
226
00:20:40,082 --> 00:20:43,176
by generalization
227
00:20:44,076 --> 00:20:48,097
the worst thing about the cost of
changes that in and it isn't visible
228
00:20:48,097 --> 00:20:51,190
from the outside its complete opposite
of course introduction when you just
229
00:20:52,009 --> 00:20:56,076
start a project you have no idea what
cost of changes the problem was cost of
230
00:20:57,057 --> 00:21:02,080
changes that it gains relevancy during
the project last time and it starts
231
00:21:02,008 --> 00:21:07,089
exponentially increasing so there is the
point where you stop introducing your
232
00:21:08,061 --> 00:21:12,090
new controllers and then you need to
update the existing ones and forms and
233
00:21:12,009 --> 00:21:12,108
entities
234
00:21:13,089 --> 00:21:17,160
skating really rehired know is getting
really really hard no I can't do it
235
00:21:18,006 --> 00:21:26,087
anymore right that's a cost of change
change increases exponentially over time
236
00:21:27,041 --> 00:21:31,079
I want to give you a very short example
let's say would have this like very
237
00:21:31,079 --> 00:21:39,116
simplistic search mechanism it searches
packages on arbitrary package management
238
00:21:40,016 --> 00:21:46,093
system let's say you don't know what's
written down that's kind of part of the
239
00:21:46,093 --> 00:21:49,125
point so you need to learn what what is
there before you can do anything so
240
00:21:50,025 --> 00:21:57,111
let's say we want to tax support into
this thing to raise your hands if you
241
00:21:58,011 --> 00:22:08,102
think that it will take up to a day
lower less than a day I know you will go
242
00:22:09,002 --> 00:22:13,011
back and that's exactly what you will
say to your project manager desde ok two
243
00:22:13,092 --> 00:22:14,178
days two days
244
00:22:15,078 --> 00:22:24,165
today's going three days alright so two
days somewhere ok you know let's not do
245
00:22:25,065 --> 00:22:30,068
this situation let's wait right let's do
something else there's some something
246
00:22:30,068 --> 00:22:34,069
else more important than tax so you're
working for a couple of situations maybe
247
00:22:34,069 --> 00:22:40,107
a monster to you know what let's not
talk now
248
00:22:41,007 --> 00:22:46,446
it's the same search right same time
same amount of functionality nothing
249
00:22:46,509 --> 00:22:50,535
changed about requirements raise your
hand if you still think it's two days
250
00:22:50,769 --> 00:22:54,580
raise your hand if you think it's four
days
251
00:22:54,058 --> 00:23:04,066
ok five days right you know what let's
not do it now let's do it later
252
00:23:05,038 --> 00:23:12,053
but here's the thing
253
00:23:12,053 --> 00:23:14,151
exponential increase of course the
changes not inherently a program of
254
00:23:15,051 --> 00:23:19,139
every project and that's a challenge was
discussed at the challenge was talking
255
00:23:20,039 --> 00:23:22,093
about the cost of changing saying like
you need to worry about the cost of
256
00:23:22,093 --> 00:23:25,119
change the reality is not every project
needs to worry about the cost of change
257
00:23:26,019 --> 00:23:32,072
quite well because you have a cut-off
planes again if your project
258
00:23:32,072 --> 00:23:39,088
stuff's just before you need to change
things start changing thanks to care
259
00:23:39,088 --> 00:23:45,179
about the cost of change if the product
life is long enough to encounter
260
00:23:46,079 --> 00:23:50,148
exponential growth of changes in the
cost of change is the only cost
261
00:23:51,048 --> 00:23:58,050
optimizing for cost of introduction has
a very short time line right it's two
262
00:23:58,068 --> 00:24:02,121
months three months project action is
really cool if its one-year project
263
00:24:03,021 --> 00:24:07,095
those three months mean nothing at the
beginning at the end of those year this
264
00:24:07,095 --> 00:24:13,161
year the only thing you care about is
how long it takes to change things and
265
00:24:14,061 --> 00:24:18,130
the key here is we're getting more and
more complex projects holidays
266
00:24:19,003 --> 00:24:23,021
making a difference in the world
requires more and more complexity of the
267
00:24:23,048 --> 00:24:28,134
software right so the projects naturally
growing timeline if you want to change
268
00:24:29,034 --> 00:24:33,038
the world with your product the chances
are you have a complex project in your
269
00:24:33,038 --> 00:24:39,054
head on your hands and it will take long
and the changes the primary thing that
270
00:24:39,054 --> 00:24:46,063
you need to worry about a thing about
worrying about changes as I said the
271
00:24:47,044 --> 00:24:51,070
changes affected by generalization
optimizing for cost reduction in most
272
00:24:51,007 --> 00:24:56,079
cases has a negative effect on the coast
of change right you make things to be
273
00:24:57,042 --> 00:25:01,044
describable an implementable was less
lines of code that comes at a cost of
274
00:25:01,044 --> 00:25:05,130
flexibility something takes just one
line to introduce some complex concept X
275
00:25:06,003 --> 00:25:11,059
192 and reuse whenever you need to
change the complex context that's not a
276
00:25:11,086 --> 00:25:18,089
street anymore and that's why some
engineers actually alot of Engineers
277
00:25:18,089 --> 00:25:20,151
tried to increase the cost of
introduction in attempt to affect the
278
00:25:21,051 --> 00:25:22,114
cost of change
279
00:25:23,014 --> 00:25:27,061
ok so if decreasing costs of
introduction have a negative effect on
280
00:25:27,061 --> 00:25:32,116
the cost of change why don't we all over
engineer everything upfront with the
281
00:25:33,016 --> 00:25:37,019
perfect design in France use hexagonal
architecture using common bus everywhere
282
00:25:37,019 --> 00:25:38,064
all these things right
283
00:25:38,064 --> 00:25:43,141
change will be easy here's what happens
to you have your graph you have a
284
00:25:44,041 --> 00:25:46,140
support you you have an introduction of
payment
285
00:25:47,004 --> 00:25:53,005
let's say you using cashier
newly-released spark and there is like
286
00:25:53,041 --> 00:25:57,047
general costs and then later and you
will need to introduce additional
287
00:25:58,001 --> 00:26:02,092
payment method and that cost increases
the cost of change so what happens if
288
00:26:02,092 --> 00:26:06,140
you increase the cost of supporting
payments in the first place so let's say
289
00:26:07,004 --> 00:26:11,049
we don't want to share you want to read
implement the payment gateway ourselves
290
00:26:11,085 --> 00:26:14,179
to make sure that it's like it supports
change from our perspective in the
291
00:26:15,079 --> 00:26:21,141
future so you move it up right to say
okay that will be a bit more expensive
292
00:26:22,041 --> 00:26:28,090
but now the cost of the cost of change
changes drastically doesn't really does
293
00:26:28,009 --> 00:26:38,009
change this way you delayed delayed
increase of course the change so what
294
00:26:38,009 --> 00:26:42,024
happens is like you're saying OK let's
let's over design that payment gateway
295
00:26:43,005 --> 00:26:47,098
and then I didn't you payments will be
easier and true I don't first payments
296
00:26:47,098 --> 00:26:50,197
easy here but in the second payment
still complex and the third one is more
297
00:26:51,097 --> 00:26:56,123
complex are you still have this
exponential increase and that's what up
298
00:26:57,023 --> 00:27:02,054
from design is a key a wonderful that's
an illusion that one can control costs
299
00:27:02,054 --> 00:27:02,135
of change
300
00:27:03,035 --> 00:27:07,130
pipeline enough analysis approached it
doesn't work
301
00:27:08,003 --> 00:27:13,096
and the reason why doesn't work is
because the nature and the type of
302
00:27:14,023 --> 00:27:20,037
change is unpredictable and the closer
you are to the beginning of the project
303
00:27:20,037 --> 00:27:24,085
more unpredictable this where you can
predict some changes like to three
304
00:27:24,085 --> 00:27:28,156
months ahead you can't predict what
needs to happen with this product
305
00:27:29,056 --> 00:27:34,143
year from now so you can't predict if
you can't predict the changes you can't
306
00:27:35,043 --> 00:27:44,069
adapt to them and this is where cost of
ownership comes the cost of ownership is
307
00:27:44,069 --> 00:27:47,167
a time it takes to maintain dawn
application logic to support its ongoing
308
00:27:48,067 --> 00:27:56,135
change such a bit of time of soaring
cost of ownership it's an intermediate
309
00:27:57,035 --> 00:28:01,070
between cost of introduction cost of
change it has no direct correlation to
310
00:28:01,007 --> 00:28:07,065
business value and that's a big problem
of this cost maintaining things they
311
00:28:08,028 --> 00:28:10,115
don't add any value to the business
312
00:28:11,015 --> 00:28:15,041
refactoring doesn't add any value to the
business test anybody to the business
313
00:28:15,041 --> 00:28:20,048
advantage you make you to be able to
change things but there's no value to
314
00:28:20,048 --> 00:28:25,135
the business and that's why it's so hard
to sell them it does have there a
315
00:28:26,035 --> 00:28:30,057
correlation to and of course the more
lines of code you test your reflector
316
00:28:30,057 --> 00:28:33,150
the more expensive for this right so the
more lines of code the more expensive it
317
00:28:34,005 --> 00:28:40,032
is kind of the same as was cost of
interaction it is always advisable for
318
00:28:40,077 --> 00:28:45,141
business at least it is always relevant
throughout the project life time and the
319
00:28:46,041 --> 00:28:50,078
interesting thing about this it's almost
exactly the same as cost of introduction
320
00:28:50,078 --> 00:28:51,139
stable over time
321
00:28:52,039 --> 00:28:56,138
never increases its a stable costs but
it adds up so the more things you own
322
00:28:57,038 --> 00:29:00,129
the more expensive for example if you
just do am going to factor into five
323
00:29:01,029 --> 00:29:04,068
classes that will be that cost if you do
I'm going to factor in 10 classes that
324
00:29:04,068 --> 00:29:10,156
will be double and the easiest way to
think about the cost of ownership costs
325
00:29:11,056 --> 00:29:16,149
of interaction across the changes like
one of payment I want this controller I
326
00:29:17,049 --> 00:29:18,061
want this change
327
00:29:18,061 --> 00:29:26,500
cost of ownership is just going for you
pay almost like on a monthly basis cost
328
00:29:27,049 --> 00:29:31,690
of ownership is the cost you pay for the
right to change particular part module
329
00:29:31,069 --> 00:29:38,083
class method whatever application
continuously and sustainably and it's
330
00:29:38,083 --> 00:29:43,092
essentially testing even manual testing
that's a cost of ownership right your
331
00:29:44,073 --> 00:29:47,121
testers run through entire system all
the time it doesn't add any value to the
332
00:29:48,021 --> 00:29:53,104
project except you're predicting the
bugs it's a cost you pay just because
333
00:29:54,004 --> 00:29:58,101
you're on the project is because you do
this even more clear ownership unit test
334
00:29:59,001 --> 00:30:05,034
unit tests in particular class is a
direct statement only in that class
335
00:30:05,034 --> 00:30:10,122
method and the closest one to actual
clearest terms of ownership is
336
00:30:11,022 --> 00:30:15,100
reflecting when you change across
directly with the reason to support the
337
00:30:16,000 --> 00:30:23,073
future change and reducing cost of
ownership allows you to balance two
338
00:30:23,073 --> 00:30:29,087
other costs that's a core concept of it
that's the reason for the existence in
339
00:30:29,087 --> 00:30:34,116
the first place here so it works we
still have our support payments and
340
00:30:35,016 --> 00:30:40,057
payments payment due payment method as
increasing cost of change so we'll see
341
00:30:40,057 --> 00:30:45,060
what happens if we introduce ongoing
payments reflector interesting start
342
00:30:45,087 --> 00:30:49,129
being discussed this fee basically every
time we're touching anything near the
343
00:30:50,029 --> 00:30:54,100
payments will look at the payments and
it's just more and what can we refer to
344
00:30:55,000 --> 00:30:59,061
make it easier in the future I'm going
payments so what happens if you do when
345
00:30:59,061 --> 00:31:00,500
you do this
346
00:31:01,049 --> 00:31:05,900
cost of change changes drastically even
though he didn't do anything was cost of
347
00:31:05,009 --> 00:31:11,063
introduction of change instead of being
exponential stars been something like
348
00:31:12,044 --> 00:31:15,773
this becomes corrupt so now
349
00:31:16,169 --> 00:31:18,251
because you're constantly reflected
because you constantly look at your
350
00:31:18,989 --> 00:31:24,004
payments and you think ok how can I
support the future changes you make to
351
00:31:24,139 --> 00:31:27,600
all the future changes that much easier
to the thing that i dont showed
352
00:31:27,006 --> 00:31:31,075
yesterday were before introducing the
day before actually I did this value of
353
00:31:31,669 --> 00:31:37,714
the change you look at the consulate
really hard to change now what if I just
354
00:31:38,119 --> 00:31:43,840
things in bits and then I introduced the
change to the squad from cans back so
355
00:31:43,084 --> 00:31:49,543
that's been cost of ownership item back
then decided okay well paid now to make
356
00:31:50,299 --> 00:31:58,372
the changes and that's how it works like
based on my observations and outcome of
357
00:31:59,029 --> 00:32:01,100
this process is something that people
call emerging design which is an
358
00:32:01,739 --> 00:32:05,700
opposite thing to the print design
design emerges because you're constantly
359
00:32:05,007 --> 00:32:09,436
look at the sting in the US yourself ok
wish changes would I need to do next
360
00:32:10,129 --> 00:32:15,820
isn't simple enough couple write your
own in the sting outcome of only easier
361
00:32:15,082 --> 00:32:19,110
simplified everything and you create
design as an outcome of this that's
362
00:32:20,001 --> 00:32:25,060
where emerging design comes from its
usual result side-effect of ongoing
363
00:32:25,069 --> 00:32:32,878
ownership so let's do it everywhere
364
00:32:33,499 --> 00:32:39,586
the entire freakin thing if it's so
amazing if only thing is so incredibly
365
00:32:40,369 --> 00:32:45,440
great let's let's play through us from
the very beginning of the project was
366
00:32:45,044 --> 00:32:49,483
like every time before we even
introducing every morning going to the
367
00:32:49,879 --> 00:32:56,470
what and we read through the entire code
base and see how it can optimize it like
368
00:32:56,047 --> 00:33:02,366
that probably will just lower the cost
of change legislation but the problem
369
00:33:02,789 --> 00:33:08,877
with this is that still just need to add
payments need to change the entire
370
00:33:09,669 --> 00:33:15,701
system this caused all this remark
during all this cleaning up around
371
00:33:15,989 --> 00:33:17,070
demons
372
00:33:17,007 --> 00:33:21,049
doesn't cause all you do is change
payments that's what business wants
373
00:33:21,049 --> 00:33:29,060
doesn't want you to change how your
notifications work right so you doing
374
00:33:29,006 --> 00:33:35,095
this things and then question he doubts
the thing that does matter just payments
375
00:33:36,049 --> 00:33:51,328
but you pay so much more without any
clear benefit for anyone that's reality
376
00:33:51,769 --> 00:33:56,780
and that's what you do when you test
your system only wasn't too and
377
00:33:56,879 --> 00:34:03,944
end-to-end test is only in your entire
freakin thing anyone here has 45 minutes
378
00:34:04,529 --> 00:34:14,790
running tests that's that's what you're
doing your own the entire thing and all
379
00:34:14,079 --> 00:34:19,125
this maintenance 16 rerun interest
because of flickering spending this for
380
00:34:20,025 --> 00:34:26,098
25 Minister on them that you only lets
you pay this fee ok
381
00:34:26,098 --> 00:34:33,131
but the worse thing even more so if you
can imagine is this right when you're
382
00:34:34,031 --> 00:34:37,058
doing gonna factoring and testing of
everything except the payments logic and
383
00:34:37,058 --> 00:34:40,907
then you need to our dependence so you
have like you pay this incredible cost
384
00:34:41,429 --> 00:34:46,452
every morning and then you also have
exponential cost of change what's
385
00:34:46,659 --> 00:34:54,270
happening I a morning thing well that's
what you do when you do exclusive
386
00:34:54,027 --> 00:34:58,065
end-to-end testing exclusive and to
understand is only when you don't have
387
00:34:58,065 --> 00:35:02,146
unit testing your system is not is not
only the right thing your cost of change
388
00:35:03,046 --> 00:35:08,140
will still increase and your subpoena
ownership ownership would not help if
389
00:35:09,004 --> 00:35:22,021
you own the wrong thing everything
that's the way to use that cost of
390
00:35:22,057 --> 00:35:25,104
ownership is on things that are worth
owning
391
00:35:26,004 --> 00:35:31,085
which brings really interesting moral
dilemma you don't know what's was only
392
00:35:31,085 --> 00:35:39,139
the beginning of the project just a
simple recover so you have this will
393
00:35:40,039 --> 00:35:42,045
cost you have cost of introduction
394
00:35:42,045 --> 00:35:47,076
doesn't increase its really wanted the
beginning of the project is beginning of
395
00:35:47,076 --> 00:35:52,121
the project and it's very easy to
optimize stable across multiple projects
396
00:35:53,021 --> 00:35:58,069
there's a change which is exponential
relevant everywhere except the beginning
397
00:35:58,069 --> 00:36:02,155
of the project is very hard to optimize
for you can't generalize for cost of
398
00:36:03,055 --> 00:36:09,114
change because of changes sold tied to
your business to change cost of
399
00:36:10,014 --> 00:36:17,043
ownership is also a leaner it's relevant
throughout and also or only the wrong
400
00:36:17,043 --> 00:36:23,071
thing is bad and also in too much as bad
and you can just doesn't make sense like
401
00:36:23,071 --> 00:36:26,970
this will cost now a dog that no I can
make sense of them know we do understand
402
00:36:27,609 --> 00:36:31,900
what this happens it's like if I and two
interests everything apparently paid the
403
00:36:31,009 --> 00:36:35,013
cost of ownership for everything and it
doesn't help the cost of change but then
404
00:36:35,094 --> 00:36:37,136
if i dont everything
405
00:36:38,036 --> 00:36:51,102
but what do I do with it you gave it I
like any other costs and what all do now
406
00:36:52,002 --> 00:36:57,051
is I will give you a very simple
principles followed by a set of very
407
00:36:57,051 --> 00:37:02,051
simple obstruct instructions you can
follow in order to gain the street costs
408
00:37:02,051 --> 00:37:08,145
and make them work in your favor rather
than against you so the principles are
409
00:37:09,045 --> 00:37:15,093
all on the logic you need to change you
don't want to own things that are not
410
00:37:15,093 --> 00:37:25,114
changing you don't want to own a stack
you don't need to change that Taylor
411
00:37:26,014 --> 00:37:33,045
needs you don't if you just need basic
payment gateway right just use spark
412
00:37:33,045 --> 00:37:37,136
because you probably would not need to
change it
413
00:37:38,036 --> 00:37:49,071
Taylor will even go even further right
on the logic you needs to own that's
414
00:37:49,071 --> 00:37:53,149
like that's even trickier because like a
only means testing during so like tried
415
00:37:54,049 --> 00:37:57,052
to minimize the amount of things that I
mind of things that you need to own
416
00:37:57,052 --> 00:38:03,106
which is easier just like don't test
which is I'm doing anyways the trick
417
00:38:04,006 --> 00:38:09,042
there is right on the logic unit
everything else
418
00:38:09,042 --> 00:38:23,135
outsourced to Taylor is amazing with it
everything you write I have this report
419
00:38:24,035 --> 00:38:30,104
repeating question people ask me is like
to Utd everything my latest answer is
420
00:38:31,004 --> 00:38:37,037
yes I duty every single line of code I
write every single one of them
421
00:38:37,037 --> 00:38:45,048
the problem is I'm not trying to write
anything I'm trying not to writing when
422
00:38:45,048 --> 00:38:50,124
I'm looking at the problem what the
first thing I'm asking is can I reuse
423
00:38:51,024 --> 00:38:57,046
something that you know just you some
module some plugin will it help me to
424
00:38:57,046 --> 00:39:04,085
solve this business problem can't there
is no need to write to me does drive it
425
00:39:04,085 --> 00:39:11,123
because I need to own that nobody else
will on everything you write try not to
426
00:39:12,023 --> 00:39:16,098
write and try to not write anything
reuse everything else
427
00:39:16,098 --> 00:39:21,164
repeat after me im serious im dead
serious
428
00:39:22,064 --> 00:39:35,157
own everything you write tried to not
write anything reused everything else
429
00:39:36,057 --> 00:39:42,130
so here's how you do it you get new
requirements you had to feature first
430
00:39:43,003 --> 00:39:47,039
thing you do you always do this document
the need I don't care if you use behind
431
00:39:47,066 --> 00:39:48,115
our Google or anything else
432
00:39:49,015 --> 00:39:53,057
document what you've been asked to
exactly and the best way to this is
433
00:39:53,057 --> 00:39:56,101
usually example said yes can you give me
an example of how this thing should work
434
00:39:57,001 --> 00:40:00,055
you write example down I don't care how
you write in which were much you write
435
00:40:00,055 --> 00:40:04,068
it you just write it down because you
will forget they will forget you will
436
00:40:04,068 --> 00:40:11,156
leave the company after use be screwed
after you document the need to spike
437
00:40:12,056 --> 00:40:17,117
experiment with tours available you try
to find tools that do this thing for you
438
00:40:18,017 --> 00:40:25,040
and get you like 90% of the way you are
able to use out of the box tools of
439
00:40:25,004 --> 00:40:31,082
horrible right and you try to get there
and then when you got there
440
00:40:32,018 --> 00:40:36,069
you start changing it but always when
you're changing the things test the
441
00:40:36,069 --> 00:40:42,085
constraints right does it fit so this
new payment methodology read this new
442
00:40:42,085 --> 00:40:45,158
group management thing doesn't really
fit spark
443
00:40:46,058 --> 00:40:49,065
despite becoming a problem for your
particular situation for your particular
444
00:40:49,065 --> 00:40:55,099
context and if it does you throw this
thing away and you can do this because
445
00:40:55,099 --> 00:40:58,117
you didn't spend too much time building
it in the first place you just use
446
00:40:59,017 --> 00:41:02,041
something and you stabilize it
447
00:41:02,041 --> 00:41:10,070
you claim to ownership of the freakin
thing if the solution grows outside of
448
00:41:10,007 --> 00:41:15,099
the boundaries of the tool available for
you you remove the tool and rewrite the
449
00:41:16,062 --> 00:41:23,159
thing in the proper way and the way to
do this in the proper way you isolate
450
00:41:24,059 --> 00:41:30,066
religious so unit testing your eloquent
controllers or so eloquent models will
451
00:41:31,029 --> 00:41:35,034
not help because eloquent models are not
yours you're not only
452
00:41:35,079 --> 00:41:39,163
seventy percent of eloquent morale is
Taylor's work dealers in communities
453
00:41:40,063 --> 00:41:45,130
work right seventy percent of things
that this thing does even though you're
454
00:41:46,003 --> 00:41:51,041
really it is your class that extends it
is not something that you own is not
455
00:41:51,068 --> 00:41:57,132
something that you will change something
that community will change right so what
456
00:41:58,032 --> 00:42:03,094
you do is you in order to take an
ownership you isolate the thing that you
457
00:42:03,094 --> 00:42:10,151
do you want to learn from the things
that you want others to do so again you
458
00:42:11,051 --> 00:42:15,146
don't need to spike it implemented in
the easiest way possible if there is a
459
00:42:16,046 --> 00:42:19,097
module available for it if not tough
luck you jump to that step number for
460
00:42:19,097 --> 00:42:25,143
you document changes and constrains that
this thing to initial documents and if
461
00:42:26,043 --> 00:42:31,045
this thing doesn't work anymore for your
business needs you throw it away
462
00:42:31,045 --> 00:42:36,132
everything except the communication and
the learnings that you had documented
463
00:42:37,032 --> 00:42:42,075
needs and documented changes and you
rewrite the state according to these
464
00:42:42,075 --> 00:42:47,140
documents according to this needs
according to the requirements right and
465
00:42:48,004 --> 00:42:55,103
you isolate religiously you cannot own
thing I just extending and testing it
466
00:42:56,039 --> 00:43:00,045
that's not only phone is that's exactly
your thing it doesn't expect from
467
00:43:00,045 --> 00:43:10,138
anything you own 100% of called their
unit testing is only
468
00:43:11,038 --> 00:43:19,113
factoring is owning test driven
development is an ownership technique
469
00:43:20,013 --> 00:43:33,025
that make it past reflector vest make it
past reflector test refactor those are
470
00:43:33,025 --> 00:43:40,087
two key factors of phone in the same
what did he does it helps you to pay
471
00:43:40,087 --> 00:43:46,171
costs of ownership on the ongoing basis
in a very comfortable way that's all
472
00:43:47,071 --> 00:43:50,142
there is to D that's driven development
is ongoing
473
00:43:51,042 --> 00:43:58,055
payment of ownership it helps you to
reflectors things to support the future
474
00:43:58,055 --> 00:44:03,124
changes but it costs time and the time
it costs has no value to the business to
475
00:44:04,024 --> 00:44:09,045
stop stop selling it to the business the
value that it adds as for you so you can
476
00:44:09,045 --> 00:44:12,110
change things for the business in the
future and we share which things you
477
00:44:13,001 --> 00:44:22,049
need to own it is kind of your call to
recover document everything you do
478
00:44:22,058 --> 00:44:28,116
spike and stabilize you can google for
it there is really cool technique and
479
00:44:29,016 --> 00:44:33,031
used to do for stabilization when you're
stabilizing DVDs the best tool for this
480
00:44:33,031 --> 00:44:40,110
thing ever used all those pictures in
the slides if you didn't notice thank
481
00:44:41,001 --> 00:45:05,097
you very much
482
00:45:06,006 --> 00:46:13,099
so you don't you don't you might want
but I definitely don't want to write
483
00:46:13,099 --> 00:46:19,146
anything I want to pull things in and
then there is this there is this
484
00:46:20,046 --> 00:46:27,050
question when does this thing available
it is very clear clear on someone like
485
00:46:27,005 --> 00:46:30,014
you don't have a plugin to use writer
just like you just need to write it
486
00:46:30,059 --> 00:46:34,085
would need to write a need to all meant
if there is a plugin but like what to do
487
00:46:34,085 --> 00:46:37,087
if there is a plug-in if my chest to 70%
of your needs
488
00:46:38,005 --> 00:46:44,010
what if it matches to like 50 percent of
your needs and I think there is no
489
00:46:44,001 --> 00:46:50,047
predetermined answer to this is
something that your team needs to do but
490
00:46:50,056 --> 00:46:52,147
no matter what you decide there is
literally two options for you to go
491
00:46:53,047 --> 00:46:58,115
about it first option is you take it in
you write this thing but you don't take
492
00:46:59,015 --> 00:47:04,057
ownership and you encourage potential
cost of change later on and another
493
00:47:04,057 --> 00:47:08,073
option used you're taking it in you
isolate religiously and you take
494
00:47:08,073 --> 00:47:10,132
ownership of the part that this
495
00:47:10,789 --> 00:47:15,813
does not provide I would I would prefer
person in the second option and the
496
00:47:16,029 --> 00:47:19,128
team's I'm working with would probably
prefer the second option but I don't
497
00:47:20,019 --> 00:47:28,025
think it's like right or wrong answer
follow-up question what about their
498
00:47:28,079 --> 00:47:34,125
practice if we talk about stripe in this
case for instance partial list as a
499
00:47:34,539 --> 00:47:38,615
great package on strike but I don't
really need all the functions of that
500
00:47:39,299 --> 00:47:48,140
but it really say there's one package to
70% and another two hundred and forty
501
00:47:48,014 --> 00:47:54,223
percent of the beaches I need the way to
go about that too I a bill of eighty
502
00:47:54,349 --> 00:48:00,438
percent want to just extend that to my
owner or a different question altogether
503
00:48:01,239 --> 00:48:05,296
not really tired but you generally
considered it costs of having that thing
504
00:48:05,809 --> 00:48:10,813
and I would usually answer that why
would you care how much features it has
505
00:48:10,849 --> 00:48:14,948
if it doesn't force you to use that
feature those features right it doesn't
506
00:48:15,839 --> 00:48:17,934
force you those features are still
hanging in there and you just not using
507
00:48:18,789 --> 00:48:25,833
them you're not taken ownership of that
thing using them if it does some
508
00:48:26,229 --> 00:48:31,640
instability problems does slow you down
then you're going into all different
509
00:48:31,064 --> 00:48:34,065
conversations like does it worth
actually owned in this thing on your own
510
00:48:34,065 --> 00:48:37,634
and this is a consideration that I would
have with the team and discussion that I
511
00:48:38,219 --> 00:48:44,284
would have a good example actually from
from from the life we worked on our team
512
00:48:44,869 --> 00:48:49,911
worked worked in the Drupal project and
the guys you some import script from
513
00:48:50,289 --> 00:48:53,388
gentle because they were trying to
integrate two systems and the used out
514
00:48:54,279 --> 00:48:57,650
of the box Drupal module for that
purpose like some of the community
515
00:48:57,065 --> 00:48:59,139
modules and the like
516
00:49:00,039 --> 00:49:04,208
the end-to-end tested the whole thing
just like through the critical path just
517
00:49:04,559 --> 00:49:08,940
to make sure that it works that went
crazy but they basically didn't take
518
00:49:08,094 --> 00:49:11,163
much ownership of the thing and then
they started flickering so it's like
519
00:49:12,063 --> 00:49:18,482
basically important every second time by
the clock but it didn't work every time
520
00:49:19,049 --> 00:49:24,380
so what they did they had a discussion
as a team with a product on there and
521
00:49:24,038 --> 00:49:29,126
they said look it's very risky doesn't
really work in the way we do so what do
522
00:49:30,026 --> 00:49:33,635
we do and they decided to rewrite the
thing to the drop the module and a row
523
00:49:33,869 --> 00:49:36,964
the roads their own logic for importing
the couple from Drupal and then they
524
00:49:37,819 --> 00:49:41,841
introduced the model that integrates it
with Drupal so it took them like up
525
00:49:42,039 --> 00:49:45,112
three more days instead of just like
using out of the box thing but then they
526
00:49:45,769 --> 00:49:50,852
have a very stable import and as a side
benefit it was work in like 10 times
527
00:49:51,599 --> 00:49:55,697
faster than the Drupal module of us so
that's just an example for you can go
528
00:49:56,579 --> 00:50:00,608
about it there is no strict answers just
like here is the thing that you always
529
00:50:00,869 --> 00:50:07,630
will need to do in this case which is
not answering granted but the best one I
530
00:50:07,063 --> 00:50:18,088
can give you a very good answer
questions
531
00:50:18,088 --> 00:50:30,977
laboriously assuming the evening meeting
interface and adapters to logic from the
532
00:50:31,769 --> 00:50:36,848
dependencies so you know that there are
many ways you can isolate things the
533
00:50:37,559 --> 00:50:43,670
classical pathway is a breach by doing
so you introduce an interface which you
534
00:50:43,067 --> 00:50:46,256
used to define what this thing needs to
do and then you implement this interface
535
00:50:46,859 --> 00:50:51,878
as like as a boundary ports in a doctor
is another kind of tangent on this that
536
00:50:52,049 --> 00:50:56,052
you can read into a doctor's bridge
butter and reintroduce two things that
537
00:50:56,079 --> 00:51:00,640
will give you enough information to know
how to isolate religiously but that's
538
00:51:00,064 --> 00:51:02,085
the thing you need to do if you want to
on anything
539
00:51:02,085 --> 00:51:13,139
and you kind of want to own everything
that you write your questions first
540
00:51:14,039 --> 00:51:20,078
question how do you manage to factor in
the risk of all the dependencies not
541
00:51:20,078 --> 00:51:25,126
necessarily having long-term support or
even then not taking ownership and you
542
00:51:26,026 --> 00:51:30,103
suddenly you know being exposed to that
so that that's a very great question
543
00:51:31,003 --> 00:51:36,049
thank you for this one thing I didn't
touch upon and that's like something
544
00:51:36,049 --> 00:51:42,080
that I didn't like in the previous
question is do we need to use the plugin
545
00:51:42,008 --> 00:51:47,040
is that module good enough that's the
wall separate discussion for you and
546
00:51:48,012 --> 00:51:50,088
your team and look for me personally
547
00:51:50,088 --> 00:51:54,114
anything that doesn't have tests in it
speak spectral there are testable there
548
00:51:55,014 --> 00:52:01,059
is not a good model for me it by default
means that this model does not exist in
549
00:52:01,059 --> 00:52:06,150
my eyes right because I like simply
because I cannot take on the risk of
550
00:52:07,005 --> 00:52:10,082
that module being broken and nobody
knows except including its outer alter
551
00:52:11,027 --> 00:52:15,116
that is broken it's easier for me to
take an ownership on that responsibility
552
00:52:16,016 --> 00:52:21,048
or find a better mental stability is the
important thing you need to take into
553
00:52:21,048 --> 00:52:28,087
consideration same as speed and the
general performance hit so those three
554
00:52:28,087 --> 00:52:35,090
things you keep in mind when you are
taking upon module and basically the
555
00:52:35,009 --> 00:52:41,095
threshold you set yourself and the team
thing and it's basic trishul it it's
556
00:52:42,076 --> 00:52:44,169
worth as a team when you're starting a
project to agree on that threshold
557
00:52:45,069 --> 00:52:49,086
that's what what is a set of
requirements for every module were
558
00:52:49,086 --> 00:52:54,122
integrated into this project right and
you can say was the team if it doesn't
559
00:52:55,022 --> 00:53:00,114
meet the threshold to a pretend it
doesn't exist and you make an agreement
560
00:53:01,014 --> 00:53:05,069
so we are cases agreement is like if it
doesn't he needs just pretend it's not
561
00:53:05,069 --> 00:53:09,073
there and then another module and if
there is no another module just write it
562
00:53:09,073 --> 00:53:13,147
and we tried to open source probably
open source said so that others do
563
00:53:14,047 --> 00:53:25,050
have dilemma that we have the answer we
don't have time for the questions we can
564
00:53:25,077 --> 00:53:38,094
do one more question I'm here till the
end of the day so find me talk with me
565
00:53:38,094 --> 00:53:42,143
about this thing I find it fascinating
so shared with me please leave feedback
566
00:53:43,043 --> 00:53:44,076
on the joins in
567
00:53:44,076 --> 00:53:46,143
thank you very much again for coming to
Sprint in an hour
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment