Created
September 1, 2015 21:23
-
-
Save alroniks/fe1e7382bc10f525770d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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