Last active
June 16, 2023 14:31
-
-
Save avidrucker/dc8acc4ea5bc9a11a52cfa9efd0e4de4 to your computer and use it in GitHub Desktop.
Talk given by Yegor on the topic of XDSD at the Devternity Conference
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,030 --> 00:00:02,270 | |
Yegor: A few words about myself just quickly. | |
2 | |
00:00:02,700 --> 00:00:05,600 | |
I'm writing software for 25 years, | |
3 | |
00:00:05,600 --> 00:00:07,780 | |
starting in school. | |
4 | |
00:00:08,080 --> 00:00:10,670 | |
For about 15 years, I was managing a team, | |
5 | |
00:00:10,670 --> 00:00:14,130 | |
different teams, up to 120 people, sometimes of developers, | |
6 | |
00:00:14,130 --> 00:00:16,700 | |
in Ukraine mostly. | |
7 | |
00:00:17,540 --> 00:00:19,800 | |
I'm also a Java developer myself, a project manager, | |
8 | |
00:00:19,800 --> 00:00:22,560 | |
and an owner of a company [which] | |
9 | |
00:00:22,560 --> 00:00:24,740 | |
was, you know, managing all these people. | |
10 | |
00:00:24,740 --> 00:00:27,210 | |
You can see my Twitter account. | |
11 | |
00:00:27,210 --> 00:00:29,820 | |
You can see my blog. Please subscribe. | |
12 | |
00:00:29,820 --> 00:00:30,990 | |
That will be interesting, because everything | |
13 | |
00:00:30,990 --> 00:00:32,970 | |
I'm gonna say today is explained in my | |
14 | |
00:00:32,970 --> 00:00:34,590 | |
blog and many different articles. So, | |
15 | |
00:00:34,590 --> 00:00:36,660 | |
I'm gonna present [to] you the way we manage | |
16 | |
00:00:36,660 --> 00:00:38,730 | |
programmers, the way we manage projects, | |
17 | |
00:00:38,730 --> 00:00:41,040 | |
and it's quite different from everything | |
18 | |
00:00:41,040 --> 00:00:42,810 | |
you've seen in many - in all - other places. | |
19 | |
00:00:42,810 --> 00:00:45,030 | |
So, that's why you definitely will | |
20 | |
00:00:45,030 --> 00:00:47,190 | |
be interested to see more content from me. | |
21 | |
00:00:47,190 --> 00:00:50,580 | |
Here's the subject. Here's the problem. | |
22 | |
00:00:50,580 --> 00:00:52,800 | |
So, in all my projects, for many, many | |
23 | |
00:00:52,800 --> 00:00:55,770 | |
years I had the same [issue] as these people are | |
24 | |
00:00:55,770 --> 00:00:58,170 | |
saying about the industry in general. So | |
25 | |
00:00:58,170 --> 00:00:59,850 | |
all our projects, all the software | |
26 | |
00:00:59,850 --> 00:01:01,730 | |
development we have, is basically chaos. | |
27 | |
00:01:01,730 --> 00:01:06,210 | |
So, we fail, we slip the schedule, | |
28 | |
00:01:06,210 --> 00:01:09,030 | |
we miss time, we don't complete | |
29 | |
00:01:09,030 --> 00:01:11,160 | |
the requirements, we don't deliver, | |
30 | |
00:01:11,160 --> 00:01:13,260 | |
we spend money, and customers are not happy. | |
31 | |
00:01:13,260 --> 00:01:15,990 | |
I've had that for 15 years - in all - in most | |
32 | |
00:01:15,990 --> 00:01:18,090 | |
of our projects. And, I found | |
33 | |
00:01:18,090 --> 00:01:20,340 | |
statistics in the report which says | |
34 | |
00:01:20,340 --> 00:01:22,320 | |
we're in chaos. And, they say that about | |
35 | |
00:01:22,320 --> 00:01:25,050 | |
like 94 - which is almost a hundred - | |
36 | |
00:01:25,050 --> 00:01:27,510 | |
percent of projects actually | |
37 | |
00:01:27,510 --> 00:01:30,270 | |
fail and have to restart. That's what the | |
38 | |
00:01:30,270 --> 00:01:31,830 | |
report says about the entire industry. | |
39 | |
00:01:31,830 --> 00:01:34,080 | |
And, they say that only seven percent of | |
40 | |
00:01:34,080 --> 00:01:36,030 | |
[the] projects failed because of | |
41 | |
00:01:36,030 --> 00:01:38,940 | |
technical incompetence. So, | |
42 | |
00:01:38,940 --> 00:01:40,740 | |
the problem is not with programmers. | |
43 | |
00:01:40,740 --> 00:01:43,200 | |
The problem is with the management. | |
44 | |
00:01:43,200 --> 00:01:45,030 | |
They fail because we miss requirements, | |
45 | |
00:01:45,030 --> 00:01:46,500 | |
because we don't understand what to do, | |
46 | |
00:01:46,500 --> 00:01:48,210 | |
because we cannot control what we do, | |
47 | |
00:01:48,210 --> 00:01:50,460 | |
because we cannot manage ourselves. It's not because | |
48 | |
00:01:50,460 --> 00:01:52,110 | |
we're bad programmers, not because we | |
49 | |
00:01:52,110 --> 00:01:54,240 | |
don't know Java or Ruby or whatever. | |
50 | |
00:01:54,240 --> 00:01:56,100 | |
It's because we don't manage ourselves the | |
51 | |
00:01:56,100 --> 00:01:57,990 | |
right way. And, I've had the same [issue], so | |
52 | |
00:01:57,990 --> 00:01:59,760 | |
that's why I tried to solve the problem, | |
53 | |
00:01:59,760 --> 00:02:02,240 | |
and invented the methodology which | |
54 | |
00:02:02,240 --> 00:02:04,650 | |
actually, in my case, in my experience, | |
55 | |
00:02:04,650 --> 00:02:06,390 | |
in our projects, actually helped us | |
56 | |
00:02:06,390 --> 00:02:09,150 | |
a lot to to resolve that [issue] and | |
57 | |
00:02:09,150 --> 00:02:12,210 | |
be successful. There are five things that - | |
58 | |
00:02:12,210 --> 00:02:13,690 | |
the methodology is quite big, but | |
59 | |
00:02:13,690 --> 00:02:15,310 | |
there are five things - I want to | |
60 | |
00:02:15,310 --> 00:02:17,590 | |
highlight today. They're quite | |
61 | |
00:02:17,590 --> 00:02:18,910 | |
controversial. That's why it's | |
62 | |
00:02:18,910 --> 00:02:21,850 | |
interesting. So, five things. How we are | |
63 | |
00:02:21,850 --> 00:02:23,410 | |
different from everything you've seen before: | |
64 | |
00:02:23,410 --> 00:02:29,170 | |
Thing number one: Traditionally, we | |
65 | |
00:02:29,170 --> 00:02:31,330 | |
believe, traditionally you believe, or | |
66 | |
00:02:31,330 --> 00:02:33,790 | |
they believe, that the teamwork is so | |
67 | |
00:02:33,790 --> 00:02:35,710 | |
important for the success of the project. | |
68 | |
00:02:35,710 --> 00:02:39,400 | |
We think that it's so important to | |
69 | |
00:02:39,400 --> 00:02:41,230 | |
keep the team together, to make sure that | |
70 | |
00:02:41,230 --> 00:02:43,390 | |
people stay together, that they are | |
71 | |
00:02:43,390 --> 00:02:45,970 | |
motivated to work together. And, the job | |
72 | |
00:02:45,970 --> 00:02:48,340 | |
of the manager is to make sure there's a | |
73 | |
00:02:48,340 --> 00:02:50,650 | |
team there, [and to] make sure that people match | |
74 | |
00:02:50,650 --> 00:02:53,080 | |
to each other. And, this is | |
75 | |
00:02:53,080 --> 00:02:55,600 | |
the key factor for the | |
76 | |
00:02:55,600 --> 00:02:57,220 | |
success of this team, for the success of | |
77 | |
00:02:57,220 --> 00:03:01,480 | |
the project. So, we just spend a | |
78 | |
00:03:01,480 --> 00:03:04,190 | |
lot of time on on the team building, on team spirit, | |
79 | |
00:03:04,480 --> 00:03:06,740 | |
on making sure the people love each other. | |
80 | |
00:03:06,740 --> 00:03:08,940 | |
And, that's how we guarantee the success. | |
81 | |
00:03:09,790 --> 00:03:12,520 | |
I think that this approach is for lazy managers. | |
82 | |
00:03:13,180 --> 00:03:14,180 | |
This is for people | |
83 | |
00:03:14,180 --> 00:03:15,470 | |
who cannot understand how to | |
84 | |
00:03:15,470 --> 00:03:17,560 | |
manage programmers. This is for people | |
85 | |
00:03:17,560 --> 00:03:19,660 | |
who are not really managers. This is what | |
86 | |
00:03:19,660 --> 00:03:21,310 | |
causes troubles in projects. This is what | |
87 | |
00:03:21,310 --> 00:03:24,400 | |
this is what leads to loss of the | |
88 | |
00:03:24,400 --> 00:03:26,380 | |
"A players". Do you know what "A players, | |
89 | |
00:03:26,380 --> 00:03:28,570 | |
B players, and C players" is? This is the | |
90 | |
00:03:28,570 --> 00:03:30,370 | |
terminology from the sales [world] actually, but, | |
91 | |
00:03:30,370 --> 00:03:32,230 | |
I think it can be applied to programming | |
92 | |
00:03:32,230 --> 00:03:33,970 | |
as well. So, in any team, we have | |
93 | |
00:03:33,970 --> 00:03:35,620 | |
A players, B players, and C players. | |
94 | |
00:03:35,620 --> 00:03:36,910 | |
Like senior programmers, medium | |
95 | |
00:03:36,910 --> 00:03:38,590 | |
programmers, and junior programmers. | |
96 | |
00:03:38,590 --> 00:03:40,510 | |
So A players, they're always - you know - aiming | |
97 | |
00:03:40,510 --> 00:03:41,740 | |
for excellence. They're always | |
98 | |
00:03:41,740 --> 00:03:43,960 | |
trying to do better. C players are | |
99 | |
00:03:43,960 --> 00:03:45,910 | |
the people who we kind of have to remove | |
100 | |
00:03:45,910 --> 00:03:47,950 | |
from the team. So, this approach with the | |
101 | |
00:03:47,950 --> 00:03:50,500 | |
teamwork in our experience is really | |
102 | |
00:03:50,500 --> 00:03:52,450 | |
good for C players and its really good | |
103 | |
00:03:52,450 --> 00:03:55,300 | |
for lazy managers. In our case, we do the | |
104 | |
00:03:55,300 --> 00:03:58,690 | |
opposite. We aim for individual | |
105 | |
00:03:58,690 --> 00:04:00,700 | |
responsibility. Not team responsibility, | |
106 | |
00:04:00,700 --> 00:04:02,650 | |
but individual responsibility, always. So, | |
107 | |
00:04:02,650 --> 00:04:04,330 | |
we don't like the idea of the team in | |
108 | |
00:04:04,330 --> 00:04:06,490 | |
general. We always pay attention to, "Who | |
109 | |
00:04:06,490 --> 00:04:08,590 | |
is doing what?", "What's the personal scope | |
110 | |
00:04:08,590 --> 00:04:10,630 | |
of the task?", and we scope that task | |
111 | |
00:04:10,630 --> 00:04:12,850 | |
individually. So, we always assign tasks | |
112 | |
00:04:12,850 --> 00:04:14,890 | |
individually to programmers. We always | |
113 | |
00:04:14,890 --> 00:04:17,260 | |
give tasks to [the programmers.] We always control the | |
114 | |
00:04:17,260 --> 00:04:19,060 | |
results of each programmer individually. | |
115 | |
00:04:19,060 --> 00:04:20,710 | |
So - we never - we don't do the | |
116 | |
00:04:20,710 --> 00:04:23,410 | |
teamwork at all. So, we clearly define the | |
117 | |
00:04:23,410 --> 00:04:25,600 | |
rules of the work. And this is | |
118 | |
00:04:25,600 --> 00:04:28,460 | |
a lot of job we do on the management side. | |
119 | |
00:04:28,460 --> 00:04:30,440 | |
We always have an architect on our team | |
120 | |
00:04:30,440 --> 00:04:32,360 | |
who is the person who is | |
121 | |
00:04:32,360 --> 00:04:34,070 | |
responsible - personally responsible - for | |
122 | |
00:04:34,070 --> 00:04:35,210 | |
the success of the project, | |
123 | |
00:04:35,210 --> 00:04:37,330 | |
and who is making all technical decisions. | |
124 | |
00:04:37,520 --> 00:04:39,010 | |
So, we don't have any democracy | |
125 | |
00:04:39,010 --> 00:04:41,310 | |
in our teams. We don't vote for technical decisions. | |
126 | |
00:04:41,490 --> 00:04:42,860 | |
It's always the architects who | |
127 | |
00:04:42,860 --> 00:04:44,720 | |
makes the decisions and always the team - | |
128 | |
00:04:44,720 --> 00:04:46,610 | |
the players or developers - who are | |
129 | |
00:04:46,610 --> 00:04:48,590 | |
responsible for their own scope of work - | |
130 | |
00:04:48,590 --> 00:04:52,100 | |
for their own tasks. We always work | |
131 | |
00:04:52,100 --> 00:04:54,320 | |
remotely. So, that's probably what is | |
132 | |
00:04:54,320 --> 00:04:56,030 | |
different from other teams. But, we work | |
133 | |
00:04:56,030 --> 00:04:57,860 | |
remotely. So, all our programmers - they | |
134 | |
00:04:57,860 --> 00:04:59,690 | |
stay in their own places, in their | |
135 | |
00:04:59,690 --> 00:05:02,030 | |
own countries, and we work. We don't have | |
136 | |
00:05:02,030 --> 00:05:04,520 | |
a central office at all. So, all our teams | |
137 | |
00:05:04,520 --> 00:05:06,500 | |
work remotely. And, they communicate | |
138 | |
00:05:06,500 --> 00:05:09,140 | |
only electronically. So, that also | |
139 | |
00:05:09,140 --> 00:05:10,940 | |
helps us to stay away from this "team idea" | |
140 | |
00:05:10,940 --> 00:05:13,670 | |
and to focus on an "individual results" idea. | |
141 | |
00:05:13,670 --> 00:05:17,000 | |
That's [the] first thing. The second one | |
142 | |
00:05:17,000 --> 00:05:21,530 | |
is over time. Traditionally - (Yegor points at slides) - What's on | |
143 | |
00:05:21,530 --> 00:05:22,730 | |
the left it's "traditionally". What's on | |
144 | |
00:05:22,730 --> 00:05:23,780 | |
the right is our approach. So, | |
145 | |
00:05:23,780 --> 00:05:27,320 | |
traditionally, programmers are managed by | |
146 | |
00:05:27,320 --> 00:05:30,380 | |
stress, in most cases. So, we just know | |
147 | |
00:05:30,380 --> 00:05:34,130 | |
that programmers [are], in general, I mean | |
148 | |
00:05:34,130 --> 00:05:35,900 | |
managers assume that programmers, in | |
149 | |
00:05:35,900 --> 00:05:37,820 | |
general, are kind of lazy. So, the best way | |
150 | |
00:05:37,820 --> 00:05:39,560 | |
to manage them is to put the deadlines | |
151 | |
00:05:39,560 --> 00:05:41,750 | |
as close as possible, and then stress | |
152 | |
00:05:41,750 --> 00:05:43,760 | |
them so they work overtime. They work on | |
153 | |
00:05:43,760 --> 00:05:45,380 | |
the weekend, and that's how they will | |
154 | |
00:05:45,380 --> 00:05:46,910 | |
achieve better results. That's how they | |
155 | |
00:05:46,910 --> 00:05:48,530 | |
will be more or less under control. | |
156 | |
00:05:48,530 --> 00:05:50,480 | |
That's the only way bad managers can | |
157 | |
00:05:50,480 --> 00:05:51,830 | |
control people - [it] is just to keep them | |
158 | |
00:05:51,830 --> 00:05:54,020 | |
under stress. And that's how programmers | |
159 | |
00:05:54,020 --> 00:05:56,870 | |
will do something. So we give them | |
160 | |
00:05:56,870 --> 00:05:58,940 | |
deadlines, we give them stress, and we get | |
161 | |
00:05:58,940 --> 00:06:01,010 | |
overtime. So they work more, they spend | |
162 | |
00:06:01,010 --> 00:06:02,570 | |
more, and we believe, and - managers in | |
163 | |
00:06:02,570 --> 00:06:04,310 | |
general assume that if people stay | |
164 | |
00:06:04,310 --> 00:06:05,960 | |
overtime, if they stay in the office, | |
165 | |
00:06:05,960 --> 00:06:08,030 | |
after the office is closed, these are the | |
166 | |
00:06:08,030 --> 00:06:09,230 | |
"good programmers". These are the good | |
167 | |
00:06:09,230 --> 00:06:11,150 | |
developers who stay over time to spend | |
168 | |
00:06:11,150 --> 00:06:13,910 | |
more time in the office. In our case, it's | |
169 | |
00:06:13,910 --> 00:06:16,580 | |
quite the opposite. So, we don't want | |
170 | |
00:06:16,580 --> 00:06:18,560 | |
programmers to work more. We want to work | |
171 | |
00:06:18,560 --> 00:06:21,710 | |
them less. We expect them to develop and | |
172 | |
00:06:21,710 --> 00:06:23,540 | |
to commit their code, and to close their | |
173 | |
00:06:23,540 --> 00:06:25,490 | |
tasks, and to close their tickets, and to | |
174 | |
00:06:25,490 --> 00:06:27,710 | |
do anything voluntarily - only when they | |
175 | |
00:06:27,710 --> 00:06:29,990 | |
want to do that. So, we allow our | |
176 | |
00:06:29,990 --> 00:06:31,970 | |
programmers to reject tasks if they | |
177 | |
00:06:31,970 --> 00:06:33,770 | |
don't want to do them. If they don't feel | |
178 | |
00:06:33,770 --> 00:06:36,200 | |
like it. So, we just give them tasks and | |
179 | |
00:06:36,200 --> 00:06:37,730 | |
allow them to choose whether it's a good | |
180 | |
00:06:37,730 --> 00:06:39,770 | |
time for them to work on them or not. | |
181 | |
00:06:39,770 --> 00:06:41,600 | |
Whether it's a good task for them or not. And, | |
182 | |
00:06:41,600 --> 00:06:44,030 | |
whether it's a good time for them to do | |
183 | |
00:06:44,030 --> 00:06:46,310 | |
it now. And, in most cases, most projects, | |
184 | |
00:06:46,310 --> 00:06:48,020 | |
our programmers, when the project is full | |
185 | |
00:06:48,020 --> 00:06:50,090 | |
of work - and, we have a lot of tasks - they | |
186 | |
00:06:50,090 --> 00:06:53,660 | |
spend three, four hours a day for the | |
187 | |
00:06:53,660 --> 00:06:55,310 | |
development, not more. So, we never work | |
188 | |
00:06:55,310 --> 00:06:57,140 | |
eight hours a day. Forget the | |
189 | |
00:06:57,140 --> 00:06:58,730 | |
overtime. We don't have overtime at all. | |
190 | |
00:06:58,730 --> 00:07:01,130 | |
So three, four hours a day. It's - in my | |
191 | |
00:07:01,130 --> 00:07:03,200 | |
experience - it's the maximum time a good | |
192 | |
00:07:03,200 --> 00:07:05,750 | |
programmer can spend a day for actually | |
193 | |
00:07:05,750 --> 00:07:07,520 | |
productive work. And they do it | |
194 | |
00:07:07,520 --> 00:07:09,950 | |
voluntarily because, I'll say about it | |
195 | |
00:07:09,950 --> 00:07:11,510 | |
later but, because we pay for results, | |
196 | |
00:07:11,510 --> 00:07:13,730 | |
that's why they're really interested to | |
197 | |
00:07:13,730 --> 00:07:15,410 | |
do the work, because, they get - you know - | |
198 | |
00:07:15,410 --> 00:07:17,750 | |
they get money for that. So, they do | |
199 | |
00:07:17,750 --> 00:07:19,940 | |
it when they feel like it. Sometimes they | |
200 | |
00:07:19,940 --> 00:07:22,010 | |
commit a lot of time one week and the | |
201 | |
00:07:22,010 --> 00:07:24,200 | |
next week they commit less time. So, the | |
202 | |
00:07:24,200 --> 00:07:26,420 | |
graph jumps up and down. And, it's not | |
203 | |
00:07:26,420 --> 00:07:27,800 | |
under control of the manager. The manager | |
204 | |
00:07:27,800 --> 00:07:30,500 | |
doesn't push the person - any developer - to | |
205 | |
00:07:30,500 --> 00:07:32,960 | |
any amount of work. If we don't | |
206 | |
00:07:32,960 --> 00:07:34,940 | |
have enough - you know - resources, if we | |
207 | |
00:07:34,940 --> 00:07:37,250 | |
don't have enough people to close all | |
208 | |
00:07:37,250 --> 00:07:40,010 | |
our tasks, then our managers have to find | |
209 | |
00:07:40,010 --> 00:07:42,200 | |
more people. Then we have to find more | |
210 | |
00:07:42,200 --> 00:07:43,670 | |
resources - I mean developers, programmers, | |
211 | |
00:07:43,670 --> 00:07:46,010 | |
resources, whatever. So, we find more of | |
212 | |
00:07:46,010 --> 00:07:47,780 | |
these resources, and it's a job of a | |
213 | |
00:07:47,780 --> 00:07:49,940 | |
manager how to - you know - to find more | |
214 | |
00:07:49,940 --> 00:07:51,590 | |
more resources and give that | |
215 | |
00:07:51,590 --> 00:07:54,080 | |
tasks to that people. But, we never stress | |
216 | |
00:07:54,080 --> 00:07:55,820 | |
programmers. We never expect them to work | |
217 | |
00:07:55,820 --> 00:08:00,020 | |
more than they want to. So, it's the job | |
218 | |
00:08:00,020 --> 00:08:01,610 | |
of a manager. That's what I'm saying. So, | |
219 | |
00:08:01,610 --> 00:08:03,710 | |
our managers are way more busy than | |
220 | |
00:08:03,710 --> 00:08:05,570 | |
traditional managers, because they really | |
221 | |
00:08:05,570 --> 00:08:07,160 | |
have to do the management work. They | |
222 | |
00:08:07,160 --> 00:08:09,080 | |
don't need to stress anybody. They need | |
223 | |
00:08:09,080 --> 00:08:12,560 | |
to schedule tasks on a timeline. So, we | |
224 | |
00:08:12,560 --> 00:08:15,050 | |
don't have ever overtimes at all. Number | |
225 | |
00:08:15,050 --> 00:08:18,860 | |
three is "Learnings." I'm going from this | |
226 | |
00:08:18,860 --> 00:08:20,990 | |
from the [least] critical to the | |
227 | |
00:08:20,990 --> 00:08:22,430 | |
more and more critical. So, "Learning". | |
228 | |
00:08:22,430 --> 00:08:25,070 | |
Traditionally, in any project which I've | |
229 | |
00:08:25,070 --> 00:08:30,370 | |
seen before, people, programmers, the core, | |
230 | |
00:08:30,370 --> 00:08:34,010 | |
are the main holder of information and | |
231 | |
00:08:34,010 --> 00:08:35,330 | |
knowledge. So, this is the most | |
232 | |
00:08:35,330 --> 00:08:36,980 | |
knowledgeable part of any project. This | |
233 | |
00:08:36,980 --> 00:08:38,480 | |
is the most important part of any | |
234 | |
00:08:38,480 --> 00:08:41,450 | |
project. If programmers know enough about | |
235 | |
00:08:41,450 --> 00:08:43,910 | |
the stuff they develop, then the project | |
236 | |
00:08:43,910 --> 00:08:45,800 | |
is more or less successful. The more they | |
237 | |
00:08:45,800 --> 00:08:47,870 | |
know, the more knowledgeable they are, the | |
238 | |
00:08:47,870 --> 00:08:51,050 | |
higher the chances of success. And, if | |
239 | |
00:08:51,050 --> 00:08:53,090 | |
somebody - someone new - [a] | |
240 | |
00:08:53,090 --> 00:08:55,460 | |
new programmer joins the project, then it | |
241 | |
00:08:55,460 --> 00:08:57,620 | |
takes some time to ramp up that person, | |
242 | |
00:08:57,620 --> 00:09:01,250 | |
to - you know - to teach that person all | |
243 | |
00:09:01,250 --> 00:09:02,540 | |
the new technologies and everything | |
244 | |
00:09:02,540 --> 00:09:04,100 | |
which is in the project. And, it takes a | |
245 | |
00:09:04,100 --> 00:09:05,690 | |
month. It takes two months. And, it takes | |
246 | |
00:09:05,690 --> 00:09:07,880 | |
sometimes three months. So, it takes long | |
247 | |
00:09:07,880 --> 00:09:10,040 | |
enough to bring somebody new to the | |
248 | |
00:09:10,040 --> 00:09:11,420 | |
project. This is the traditional way. That's | |
249 | |
00:09:11,420 --> 00:09:14,840 | |
what we have in most projects. And, in | |
250 | |
00:09:14,840 --> 00:09:16,880 | |
most cases, we have so-called experts - | |
251 | |
00:09:16,880 --> 00:09:18,590 | |
subject-matter experts - so, people who | |
252 | |
00:09:18,590 --> 00:09:22,340 | |
know most of the - they possess the | |
253 | |
00:09:22,340 --> 00:09:24,050 | |
majority of the knowledge in the project. | |
254 | |
00:09:24,050 --> 00:09:26,210 | |
So, they know a lot. And, these people are | |
255 | |
00:09:26,210 --> 00:09:28,880 | |
the key decision-makers in the project. | |
256 | |
00:09:28,880 --> 00:09:31,130 | |
If we lose that person in a traditional | |
257 | |
00:09:31,130 --> 00:09:33,710 | |
environment, if we lose that expert, we | |
258 | |
00:09:33,710 --> 00:09:35,810 | |
lose a lot. And that's why [these] people | |
259 | |
00:09:35,810 --> 00:09:38,690 | |
kind of start to control the owners of | |
260 | |
00:09:38,690 --> 00:09:40,730 | |
the project. It's not that the manager | |
261 | |
00:09:40,730 --> 00:09:43,010 | |
who controls the the development | |
262 | |
00:09:43,010 --> 00:09:44,390 | |
environment. It's the people, the experts, | |
263 | |
00:09:44,390 --> 00:09:46,940 | |
who control people with the money. So, | |
264 | |
00:09:46,940 --> 00:09:48,530 | |
they tell the customers what's going to | |
265 | |
00:09:48,530 --> 00:09:50,330 | |
happen, not the customer says what's | |
266 | |
00:09:50,330 --> 00:09:51,530 | |
gonna happen, but the people who are | |
267 | |
00:09:51,530 --> 00:09:54,380 | |
experts. They start to manipulate people | |
268 | |
00:09:54,380 --> 00:09:56,810 | |
with money. This is what I've | |
269 | |
00:09:56,810 --> 00:09:58,640 | |
seen in a lot of places. We change that | |
270 | |
00:09:58,640 --> 00:10:02,660 | |
completely. In our case, we don't really | |
271 | |
00:10:02,660 --> 00:10:05,990 | |
like the idea of having people who know | |
272 | |
00:10:05,990 --> 00:10:10,310 | |
too much in the project. We want | |
273 | |
00:10:10,310 --> 00:10:14,420 | |
our artifacts - our documents - to know | |
274 | |
00:10:14,420 --> 00:10:18,350 | |
"too much". We want our product to be self- | |
275 | |
00:10:18,350 --> 00:10:21,320 | |
explainable so that anybody tomorrow | |
276 | |
00:10:21,320 --> 00:10:23,240 | |
joins the project and can | |
277 | |
00:10:23,240 --> 00:10:25,430 | |
understand everything in just a few | |
278 | |
00:10:25,430 --> 00:10:29,090 | |
hours. It may sound crazy, but it really | |
279 | |
00:10:29,090 --> 00:10:30,770 | |
happens in our projects. We bring | |
280 | |
00:10:30,770 --> 00:10:32,870 | |
sometimes new programmers to the project | |
281 | |
00:10:32,870 --> 00:10:34,940 | |
which is one year old. And, that new | |
282 | |
00:10:34,940 --> 00:10:37,550 | |
developer starts writing code and making | |
283 | |
00:10:37,550 --> 00:10:39,320 | |
new classes, writing new unit tests, | |
284 | |
00:10:39,320 --> 00:10:42,380 | |
committing code, in just one hour. So, it | |
285 | |
00:10:42,380 --> 00:10:44,090 | |
doesn't take a month or two months to | |
286 | |
00:10:44,090 --> 00:10:46,730 | |
learn because we don't have experts. We | |
287 | |
00:10:46,730 --> 00:10:48,410 | |
don't have people who know "too much". We | |
288 | |
00:10:48,410 --> 00:10:51,500 | |
only have documents, and source code, and | |
289 | |
00:10:51,500 --> 00:10:54,440 | |
diagrams which explain everything. How we | |
290 | |
00:10:54,440 --> 00:10:58,370 | |
achieve that: We - first of all - we rotate | |
291 | |
00:10:58,370 --> 00:11:00,980 | |
people. We change people from project to | |
292 | |
00:11:00,980 --> 00:11:03,170 | |
project. We move them because we | |
293 | |
00:11:03,170 --> 00:11:05,540 | |
understand that the more experts we have | |
294 | |
00:11:05,540 --> 00:11:06,690 | |
the bigger is the trouble | |
295 | |
00:11:06,690 --> 00:11:08,880 | |
for us. We don't want experts. We want | |
296 | |
00:11:08,880 --> 00:11:12,480 | |
people [to] be - How [do] they say it? - like commodity | |
297 | |
00:11:12,480 --> 00:11:14,460 | |
programmers. So, they're like - they can | |
298 | |
00:11:14,460 --> 00:11:15,840 | |
work here, and then, tomorrow they can | |
299 | |
00:11:15,840 --> 00:11:17,910 | |
work there. So they can go from project | |
300 | |
00:11:17,910 --> 00:11:19,920 | |
to project and can contribute there as | |
301 | |
00:11:19,920 --> 00:11:22,020 | |
effectively as they were contributing | |
302 | |
00:11:22,020 --> 00:11:23,730 | |
yesterday in a different project. So, | |
303 | |
00:11:23,730 --> 00:11:25,710 | |
first of all, we did - i'll say a | |
304 | |
00:11:25,710 --> 00:11:28,980 | |
few words about it later - But, here we | |
305 | |
00:11:28,980 --> 00:11:33,110 | |
rotate them. We change them. And, second, | |
306 | |
00:11:33,110 --> 00:11:38,640 | |
we promote the idea of "always blame the | |
307 | |
00:11:38,640 --> 00:11:40,050 | |
project, don't blame yourselves". If you | |
308 | |
00:11:40,050 --> 00:11:41,640 | |
start working in a project, you don't | |
309 | |
00:11:41,640 --> 00:11:43,110 | |
understand anything. You don't need to | |
310 | |
00:11:43,110 --> 00:11:45,240 | |
learn. You need to say that the project | |
311 | |
00:11:45,240 --> 00:11:47,460 | |
is not is not sufficient enough for me | |
312 | |
00:11:47,460 --> 00:11:49,740 | |
to understand how it works. If you open | |
313 | |
00:11:49,740 --> 00:11:51,540 | |
the piece of code, if you look at it, you | |
314 | |
00:11:51,540 --> 00:11:52,800 | |
don't understand how it works. | |
315 | |
00:11:52,800 --> 00:11:54,630 | |
You don't learn it. You don't ask anybody. | |
316 | |
00:11:54,630 --> 00:11:56,490 | |
You don't find an expert. You just say, | |
317 | |
00:11:56,490 --> 00:11:58,620 | |
"Hey, your class or your piece of code is | |
318 | |
00:11:58,620 --> 00:12:01,350 | |
not clear enough. So, fix it." And then, we | |
319 | |
00:12:01,350 --> 00:12:03,420 | |
fix it for you. And then, it will be easier | |
320 | |
00:12:03,420 --> 00:12:05,430 | |
for you to understand it later. So, we | |
321 | |
00:12:05,430 --> 00:12:07,950 | |
always ask programmers to blame us - the | |
322 | |
00:12:07,950 --> 00:12:11,790 | |
project - for not being clear enough. And, | |
323 | |
00:12:11,790 --> 00:12:14,520 | |
we fix that. We improve the quality of | |
324 | |
00:12:14,520 --> 00:12:16,020 | |
the documentation. And, we bring it back | |
325 | |
00:12:16,020 --> 00:12:18,420 | |
to you and ask, "Can you fix it now?" If you | |
326 | |
00:12:18,420 --> 00:12:20,520 | |
can't fix it now, then again you blame | |
327 | |
00:12:20,520 --> 00:12:22,680 | |
us. And then, in a number of [those] cycles, | |
328 | |
00:12:22,680 --> 00:12:25,110 | |
eventually the project becomes as clear | |
329 | |
00:12:25,110 --> 00:12:28,320 | |
for you so you can understand it in half | |
330 | |
00:12:28,320 --> 00:12:31,020 | |
an hour. You probably have questions. | |
331 | |
00:12:31,020 --> 00:12:34,650 | |
We'll get back to it. [audience laughs] Number four: We have | |
332 | |
00:12:34,650 --> 00:12:39,080 | |
five in total. Number four: "Meetings" | |
333 | |
00:12:39,080 --> 00:12:42,570 | |
Traditionally, people believe that the | |
334 | |
00:12:42,570 --> 00:12:44,880 | |
more programmers communicate, the more | |
335 | |
00:12:44,880 --> 00:12:47,250 | |
meetings they have, the higher the | |
336 | |
00:12:47,250 --> 00:12:49,440 | |
chances of success in the project. The | |
337 | |
00:12:49,440 --> 00:12:51,510 | |
more - the closer - they stay together, the | |
338 | |
00:12:51,510 --> 00:12:53,670 | |
more of these face-to-face communications | |
339 | |
00:12:53,670 --> 00:12:55,890 | |
they have, the higher the chances that | |
340 | |
00:12:55,890 --> 00:12:57,240 | |
they will actually understand what's | |
341 | |
00:12:57,240 --> 00:12:58,650 | |
going on. And, they will produce something. | |
342 | |
00:12:58,650 --> 00:13:01,290 | |
So, that's why we have these Slack chats. We | |
343 | |
00:13:01,290 --> 00:13:02,700 | |
have these Skype calls. We have | |
344 | |
00:13:02,700 --> 00:13:05,460 | |
conference calls. Sometimes, the senior | |
345 | |
00:13:05,460 --> 00:13:07,140 | |
developers spend half of their day | |
346 | |
00:13:07,140 --> 00:13:09,240 | |
or maybe sometimes the full day in just | |
347 | |
00:13:09,240 --> 00:13:11,010 | |
meetings and just talking and talking | |
348 | |
00:13:11,010 --> 00:13:13,140 | |
and exchanging information. And, this is | |
349 | |
00:13:13,140 --> 00:13:15,180 | |
what - you know - managers believe is a good | |
350 | |
00:13:15,180 --> 00:13:17,520 | |
way to do. They think that senior | |
351 | |
00:13:17,520 --> 00:13:19,110 | |
developers have to be in [those] meetings. | |
352 | |
00:13:19,110 --> 00:13:19,380 | |
They [the senior developers] | |
353 | |
00:13:19,380 --> 00:13:21,360 | |
have to spend time on talking instead of | |
354 | |
00:13:21,360 --> 00:13:23,850 | |
writing code. And, even [the] Agile manifesto | |
355 | |
00:13:23,850 --> 00:13:26,040 | |
says so, like [that] face-to-face communications | |
356 | |
00:13:26,040 --> 00:13:28,380 | |
is always better than documentation. We | |
357 | |
00:13:28,380 --> 00:13:29,960 | |
completely disagree with that. | |
358 | |
00:13:29,960 --> 00:13:32,400 | |
We believe that the more meetings you | |
359 | |
00:13:32,400 --> 00:13:34,440 | |
have, the more informal communications, | |
360 | |
00:13:34,440 --> 00:13:36,270 | |
the more these chats you have, and the | |
361 | |
00:13:36,270 --> 00:13:38,100 | |
more face-to-face calls or whatever you | |
362 | |
00:13:38,100 --> 00:13:40,590 | |
call it by - "remote calls" - doesn't matter. | |
363 | |
00:13:40,590 --> 00:13:43,140 | |
The more you have of that, the bigger the | |
364 | |
00:13:43,140 --> 00:13:44,780 | |
trouble you [have] caused to the project. | |
365 | |
00:13:44,780 --> 00:13:46,920 | |
Because, you exchange the information | |
366 | |
00:13:46,920 --> 00:13:49,530 | |
which stays nowhere. We talk to each | |
367 | |
00:13:49,530 --> 00:13:51,510 | |
other. I explain [to] you how it works. You | |
368 | |
00:13:51,510 --> 00:13:53,940 | |
understand how it works. But tomorrow, | |
369 | |
00:13:53,940 --> 00:13:55,710 | |
somebody else will join the project. And, | |
370 | |
00:13:55,710 --> 00:13:57,330 | |
that person will not know how it works. | |
371 | |
00:13:57,330 --> 00:13:58,920 | |
So, we will have to explain again. We'll | |
372 | |
00:13:58,920 --> 00:14:00,870 | |
have to explain again. So, every minute | |
373 | |
00:14:00,870 --> 00:14:02,940 | |
spent in the meeting is the wasted money | |
374 | |
00:14:02,940 --> 00:14:05,880 | |
of the customer. So, the more we talk, the | |
375 | |
00:14:05,880 --> 00:14:07,950 | |
more we exchange information informally, | |
376 | |
00:14:07,950 --> 00:14:09,870 | |
the more money we waste, which the | |
377 | |
00:14:09,870 --> 00:14:12,810 | |
customer is paying us. So, good developers, | |
378 | |
00:14:12,810 --> 00:14:15,180 | |
I believe, and - we seriously preach | |
379 | |
00:14:15,180 --> 00:14:17,250 | |
this idea - the good developers - good | |
380 | |
00:14:17,250 --> 00:14:19,020 | |
engineers - they exchange informations | |
381 | |
00:14:19,020 --> 00:14:20,910 | |
through documents, through | |
382 | |
00:14:20,910 --> 00:14:24,210 | |
diagrams, through the source code, through | |
383 | |
00:14:24,210 --> 00:14:26,130 | |
formal written communication. [Good engineers use written communication] which is | |
384 | |
00:14:26,130 --> 00:14:28,440 | |
maintainable, which we can get back to in | |
385 | |
00:14:28,440 --> 00:14:30,720 | |
a year, in a month, in a week, in an hour, | |
386 | |
00:14:30,720 --> 00:14:33,420 | |
and understand why that decision was | |
387 | |
00:14:33,420 --> 00:14:35,460 | |
made, who made that decision, [and] what was the | |
388 | |
00:14:35,460 --> 00:14:38,640 | |
reason behind that decision. To achieve | |
389 | |
00:14:38,640 --> 00:14:41,400 | |
that - you know - not to enforce, | |
390 | |
00:14:41,400 --> 00:14:43,740 | |
but encourage people to actually use | |
391 | |
00:14:43,740 --> 00:14:47,100 | |
documents instead of calls, we don't | |
392 | |
00:14:47,100 --> 00:14:52,050 | |
allow them to call. [laughs] We just - that's so | |
393 | |
00:14:52,050 --> 00:14:54,170 | |
easy. [clapping in the audience] | |
394 | |
00:14:55,400 --> 00:14:58,710 | |
We just - we just don't. [laughs] They just don't | |
395 | |
00:14:58,710 --> 00:15:01,620 | |
have phone numbers of each other. So, we | |
396 | |
00:15:01,620 --> 00:15:03,510 | |
don't have that Slack chats. We don't | |
397 | |
00:15:03,510 --> 00:15:05,010 | |
have that Skype calls. They don't know, I | |
398 | |
00:15:05,010 --> 00:15:06,450 | |
mean, they know each other, but only | |
399 | |
00:15:06,450 --> 00:15:08,280 | |
through... We work on GitHub. So, they only | |
400 | |
00:15:08,280 --> 00:15:10,350 | |
know their GitHub accounts. All they | |
401 | |
00:15:10,350 --> 00:15:12,030 | |
can do in a project... If I don't know | |
402 | |
00:15:12,030 --> 00:15:13,860 | |
anything, for example: I joined the | |
403 | |
00:15:13,860 --> 00:15:15,540 | |
project. There are like 20 developers | |
404 | |
00:15:15,540 --> 00:15:16,860 | |
in there. I don't have some | |
405 | |
00:15:16,860 --> 00:15:19,230 | |
information. I can't call anybody. I can't | |
406 | |
00:15:19,230 --> 00:15:21,570 | |
ask anybody. All I can do is I can submit | |
407 | |
00:15:21,570 --> 00:15:23,430 | |
the ticket and say, "Hey, this piece of | |
408 | |
00:15:23,430 --> 00:15:24,630 | |
information is missing from that | |
409 | |
00:15:24,630 --> 00:15:27,480 | |
document. Can you please - you know - fix | |
410 | |
00:15:27,480 --> 00:15:29,010 | |
that and put that piece of information | |
411 | |
00:15:29,010 --> 00:15:31,500 | |
into that document?" And, somebody will fix | |
412 | |
00:15:31,500 --> 00:15:33,090 | |
that for me. I don't care who it's gonna | |
413 | |
00:15:33,090 --> 00:15:35,430 | |
be. I don't care who's gonna fix that. All | |
414 | |
00:15:35,430 --> 00:15:37,170 | |
I care about is that I look at the | |
415 | |
00:15:37,170 --> 00:15:38,850 | |
document and I find that missing piece | |
416 | |
00:15:38,850 --> 00:15:42,060 | |
of information. That's the idea. So, if you | |
417 | |
00:15:42,060 --> 00:15:44,370 | |
allow programmers - you know - to talk to | |
418 | |
00:15:44,370 --> 00:15:46,620 | |
each other, they will. If you allow them | |
419 | |
00:15:46,620 --> 00:15:48,240 | |
to call, they will, because it's naturally | |
420 | |
00:15:48,240 --> 00:15:49,740 | |
better for us - you know - to communicate - | |
421 | |
00:15:49,740 --> 00:15:52,230 | |
you know - face to face. Just - here's the - my | |
422 | |
00:15:52,230 --> 00:15:53,670 | |
friend sitting next to me. I'm gonna ask | |
423 | |
00:15:53,670 --> 00:15:55,440 | |
him. I'm not gonna - you know - | |
424 | |
00:15:55,440 --> 00:15:57,360 | |
get the document. I'm gonna just ask and | |
425 | |
00:15:57,360 --> 00:15:58,080 | |
get the information. | |
426 | |
00:15:58,080 --> 00:16:00,120 | |
We completely disallow that. For us, it's | |
427 | |
00:16:00,120 --> 00:16:02,670 | |
easy because we work remotely. So, all our | |
428 | |
00:16:02,670 --> 00:16:04,830 | |
developers are somewhere. They're like - | |
429 | |
00:16:04,830 --> 00:16:06,300 | |
you know - in different countries, in | |
430 | |
00:16:06,300 --> 00:16:08,010 | |
different time zones. So, we don't have a | |
431 | |
00:16:08,010 --> 00:16:10,110 | |
central place. So, we just keep them like | |
432 | |
00:16:10,110 --> 00:16:12,000 | |
that. And, we don't allow them to - you know - | |
433 | |
00:16:12,000 --> 00:16:14,400 | |
to get into some Slack chat and talk. All | |
434 | |
00:16:14,400 --> 00:16:15,960 | |
they can do is communicate through | |
435 | |
00:16:15,960 --> 00:16:17,460 | |
ticketing systems, through the source | |
436 | |
00:16:17,460 --> 00:16:19,320 | |
code. And that's how we achieve that | |
437 | |
00:16:19,320 --> 00:16:21,300 | |
results. So, we have only documents and | |
438 | |
00:16:21,300 --> 00:16:22,980 | |
only diagrams. And, I'm saying it again. | |
439 | |
00:16:22,980 --> 00:16:25,020 | |
Sometimes, it's very often we have | |
440 | |
00:16:25,020 --> 00:16:27,060 | |
projects which are one year old and the | |
441 | |
00:16:27,060 --> 00:16:29,130 | |
new developer jumps in and there's like | |
442 | |
00:16:29,130 --> 00:16:31,410 | |
50 thousand lines of code of Java code - | |
443 | |
00:16:31,410 --> 00:16:33,570 | |
like serious Java code. And, the new | |
444 | |
00:16:33,570 --> 00:16:35,580 | |
developer jumps in and starts writing | |
445 | |
00:16:35,580 --> 00:16:37,200 | |
code in just one hour. | |
446 | |
00:16:37,200 --> 00:16:39,900 | |
It's unachievable in a | |
447 | |
00:16:39,900 --> 00:16:43,890 | |
traditional project configuration. The | |
448 | |
00:16:43,890 --> 00:16:46,640 | |
last one. And [then] we [will] have questions. "Salaries": | |
449 | |
00:16:46,640 --> 00:16:50,580 | |
The biggest problem. So, | |
450 | |
00:16:50,580 --> 00:16:53,550 | |
traditionally, we believe | |
451 | |
00:16:53,550 --> 00:16:57,000 | |
that - I mean, everybody believes that - it's | |
452 | |
00:16:57,000 --> 00:16:59,280 | |
so important to keep the developer happy | |
453 | |
00:16:59,280 --> 00:17:02,010 | |
and to keep the developer safe. And, it's - | |
454 | |
00:17:02,010 --> 00:17:04,260 | |
you know - to get and keep the loyalty from | |
455 | |
00:17:04,260 --> 00:17:06,190 | |
the person. So, we need long time, long | |
456 | |
00:17:06,190 --> 00:17:10,360 | |
term contracts, good salary, paid every | |
457 | |
00:17:10,360 --> 00:17:13,570 | |
month, and that's how we're gonna | |
458 | |
00:17:13,570 --> 00:17:15,640 | |
achieve - you know - good results from that | |
459 | |
00:17:15,640 --> 00:17:18,580 | |
particular person. So, we usually pay for | |
460 | |
00:17:18,580 --> 00:17:22,540 | |
when - not we, but you - you usually get paid for | |
461 | |
00:17:22,540 --> 00:17:25,630 | |
per month, per time, sometimes per hour, | |
462 | |
00:17:25,630 --> 00:17:28,720 | |
sometimes per month. But, it's always for | |
463 | |
00:17:28,720 --> 00:17:30,760 | |
time. You just sit in front of the | |
464 | |
00:17:30,760 --> 00:17:32,650 | |
computer, and you do something, and they | |
465 | |
00:17:32,650 --> 00:17:34,810 | |
pay you for this time. You achieve the | |
466 | |
00:17:34,810 --> 00:17:36,220 | |
result, they pay you. You don't achieve | |
467 | |
00:17:36,220 --> 00:17:39,940 | |
the result, they still pay. You work, | |
468 | |
00:17:39,940 --> 00:17:41,320 | |
they pay you. | |
469 | |
00:17:41,320 --> 00:17:44,050 | |
You don't work, they still pay you. That's | |
470 | |
00:17:44,050 --> 00:17:46,480 | |
a huge problem, I believe, especially for | |
471 | |
00:17:46,480 --> 00:17:49,630 | |
A players. Remember that A, B, C players. We | |
472 | |
00:17:49,630 --> 00:17:51,610 | |
have "A players", people who really want to | |
473 | |
00:17:51,610 --> 00:17:53,260 | |
achieve something, and we have "C players" | |
474 | |
00:17:53,260 --> 00:17:55,300 | |
who just enjoy being in front of the | |
475 | |
00:17:55,300 --> 00:17:58,750 | |
computer. So, the A players, | |
476 | |
00:17:58,750 --> 00:18:01,540 | |
they don't like that. They will | |
477 | |
00:18:01,540 --> 00:18:03,400 | |
leave your project. And, they will not be | |
478 | |
00:18:03,400 --> 00:18:05,290 | |
productive at all because this | |
479 | |
00:18:05,290 --> 00:18:07,990 | |
format - you know - puts everybody on the | |
480 | |
00:18:07,990 --> 00:18:10,240 | |
same level. [That is] because, if I'm the A player | |
481 | |
00:18:10,240 --> 00:18:12,670 | |
and I produce results, I'm still | |
482 | |
00:18:12,670 --> 00:18:14,290 | |
paid more or less at the same level as | |
483 | |
00:18:14,290 --> 00:18:16,270 | |
the C player who produces zero results. | |
484 | |
00:18:16,270 --> 00:18:20,380 | |
And then another [issue] is "soft skills". So then, in | |
485 | |
00:18:20,380 --> 00:18:22,210 | |
the end, to make a decision [about] who's gonna | |
486 | |
00:18:22,210 --> 00:18:23,920 | |
get more salary, who's gonna get the raise, | |
487 | |
00:18:23,920 --> 00:18:25,720 | |
who's gonna get the - you know - who's gonna | |
488 | |
00:18:25,720 --> 00:18:28,510 | |
get fired - we use "soft skills". Who is the | |
489 | |
00:18:28,510 --> 00:18:30,760 | |
nicer guy in the team, who talks more, | |
490 | |
00:18:30,760 --> 00:18:32,410 | |
who is more communicative, who is the | |
491 | |
00:18:32,410 --> 00:18:34,060 | |
good match for the team - that's how we | |
492 | |
00:18:34,060 --> 00:18:36,130 | |
decide who gets the raise. [This is] instead of | |
493 | |
00:18:36,130 --> 00:18:37,810 | |
looking at the real results. Instead of | |
494 | |
00:18:37,810 --> 00:18:39,280 | |
looking at the numbers. I don't know [if it's] | |
495 | |
00:18:39,280 --> 00:18:41,350 | |
numbers but, [I mean] the actual results that | |
496 | |
00:18:41,350 --> 00:18:43,720 | |
people provide. So, we use the "soft skills". | |
497 | |
00:18:43,720 --> 00:18:45,400 | |
It completely demotivates A | |
498 | |
00:18:45,400 --> 00:18:48,460 | |
players, in my experience. So, we remove | |
499 | |
00:18:48,460 --> 00:18:50,410 | |
that. We don't have salaries at all. Well, | |
500 | |
00:18:50,410 --> 00:18:52,770 | |
we pay money, but we don't pay salaries. [laughs] | |
501 | |
00:18:52,770 --> 00:18:55,560 | |
We pay for results. Every time | |
502 | |
00:18:55,560 --> 00:18:58,360 | |
developers complete something - close the | |
503 | |
00:18:58,360 --> 00:19:01,840 | |
ticket, file a bug. Basically two things: | |
504 | |
00:19:01,840 --> 00:19:03,970 | |
Close the ticket, and file the bug. So, fix | |
505 | |
00:19:03,970 --> 00:19:06,760 | |
the bug or file a bug. We pay for that. | |
506 | |
00:19:06,760 --> 00:19:09,250 | |
And, we do micro payments. So, we pay our | |
507 | |
00:19:09,250 --> 00:19:11,200 | |
developers in like really small, | |
508 | |
00:19:11,200 --> 00:19:12,910 | |
micro payments. We can do that because we | |
509 | |
00:19:12,910 --> 00:19:14,530 | |
work with remote programmers and | |
510 | |
00:19:14,530 --> 00:19:17,320 | |
freelancers mostly. And, we pay them | |
511 | |
00:19:17,320 --> 00:19:19,430 | |
through like PayPal, BitCoin, | |
512 | |
00:19:19,430 --> 00:19:21,050 | |
whatever. So, we just - you know - we have | |
513 | |
00:19:21,050 --> 00:19:22,670 | |
these transactions - many transactions - | |
514 | |
00:19:22,670 --> 00:19:24,950 | |
every day. And, the more they commit, the | |
515 | |
00:19:24,950 --> 00:19:26,330 | |
more they, not commit but, the more | |
516 | |
00:19:26,330 --> 00:19:28,130 | |
results they produce... It's not about the | |
517 | |
00:19:28,130 --> 00:19:29,630 | |
number of lines of code, | |
518 | |
00:19:29,630 --> 00:19:33,050 | |
It's not about some productivity metrics. | |
519 | |
00:19:33,050 --> 00:19:35,120 | |
It's about, close the task, or not close | |
520 | |
00:19:35,120 --> 00:19:36,740 | |
the task. Here's the problem: You either | |
521 | |
00:19:36,740 --> 00:19:38,420 | |
solve the problem or you don't solve the | |
522 | |
00:19:38,420 --> 00:19:40,010 | |
problem. When the problem is solved... And, | |
523 | |
00:19:40,010 --> 00:19:41,750 | |
we have small problems. We always have | |
524 | |
00:19:41,750 --> 00:19:43,640 | |
small tasks, half an hour, or one hour, | |
525 | |
00:19:43,640 --> 00:19:46,730 | |
really micro tasks... The task is closed. We | |
526 | |
00:19:46,730 --> 00:19:48,380 | |
pay. The task is not closed - we don't pay. | |
527 | |
00:19:48,380 --> 00:19:50,600 | |
So, there's no salaries. This is how we | |
528 | |
00:19:50,600 --> 00:19:52,940 | |
make it so easy to measure the | |
529 | |
00:19:52,940 --> 00:19:55,400 | |
performance, and productivity, and | |
530 | |
00:19:55,400 --> 00:19:57,590 | |
motivation of everybody in the project. | |
531 | |
00:19:57,590 --> 00:19:59,510 | |
Because, we - I mean - we don't pay in the | |
532 | |
00:19:59,510 --> 00:20:00,860 | |
end of the month. We pay when the project - | |
533 | |
00:20:00,860 --> 00:20:03,790 | |
when the task - is closed. | |
534 | |
00:20:03,790 --> 00:20:06,290 | |
So, I'm basically done. I think you will | |
535 | |
00:20:06,290 --> 00:20:07,880 | |
have questions but let me [first] summarize. So, | |
536 | |
00:20:07,880 --> 00:20:09,890 | |
in this model of work which I just | |
537 | |
00:20:09,890 --> 00:20:11,960 | |
explained, we've been working for about | |
538 | |
00:20:11,960 --> 00:20:16,160 | |
three years already. 250 developers went | |
539 | |
00:20:16,160 --> 00:20:18,080 | |
through this model. So, 250 people | |
540 | |
00:20:18,080 --> 00:20:19,910 | |
actually tried that and got some money | |
541 | |
00:20:19,910 --> 00:20:22,250 | |
from us in different tasks | |
542 | |
00:20:22,250 --> 00:20:24,470 | |
and different projects. [These projects are] mostly Java, 90% | |
543 | |
00:20:24,470 --> 00:20:29,780 | |
is Java. 25 projects completed. Commercial | |
544 | |
00:20:29,780 --> 00:20:31,580 | |
and open source. We have open source | |
545 | |
00:20:31,580 --> 00:20:33,350 | |
projects as well, so you can look at them. | |
546 | |
00:20:33,350 --> 00:20:34,850 | |
Come to me later, [and] I'll give you my | |
547 | |
00:20:34,850 --> 00:20:36,500 | |
coordinates. You can look at the GitHub | |
548 | |
00:20:36,500 --> 00:20:37,940 | |
account. And, you will see a number of | |
549 | |
00:20:37,940 --> 00:20:40,970 | |
projects which were completed using this | |
550 | |
00:20:40,970 --> 00:20:42,590 | |
technology - this approach. And, you | |
551 | |
00:20:42,590 --> 00:20:44,180 | |
will see how we communicate to each | |
552 | |
00:20:44,180 --> 00:20:46,760 | |
other in GitHub tickets. So, you will see | |
553 | |
00:20:46,760 --> 00:20:48,320 | |
how we get rid of these meetings [completely]. | |
554 | |
00:20:48,320 --> 00:20:51,650 | |
And, all our communications are there. You | |
555 | |
00:20:51,650 --> 00:20:53,420 | |
will see even how we pay programmers | |
556 | |
00:20:53,420 --> 00:20:55,190 | |
because all these like payment - you know - | |
557 | |
00:20:55,190 --> 00:20:57,560 | |
successful payment notifications are | |
558 | |
00:20:57,560 --> 00:20:59,150 | |
there in GitHub. It will be quite | |
559 | |
00:20:59,150 --> 00:21:01,720 | |
interesting. And, we produced about | |
560 | |
00:21:01,720 --> 00:21:04,100 | |
300,000 lines of Java code. It's pretty | |
561 | |
00:21:04,100 --> 00:21:05,960 | |
big amount of code. And, all of these | |
562 | |
00:21:05,960 --> 00:21:06,860 | |
projects were really successful | |
563 | |
00:21:06,860 --> 00:21:09,020 | |
comparing to what I had before for many | |
564 | |
00:21:09,020 --> 00:21:11,390 | |
years. So, I'm asking you to follow me. | |
565 | |
00:21:11,390 --> 00:21:13,520 | |
Subscribe to the blog and you will | |
566 | |
00:21:13,520 --> 00:21:15,350 | |
learn more. So, now questions from you | |
567 | |
00:21:15,350 --> 00:21:17,470 | |
guys. [audience applause] | |
568 | |
00:21:21,670 --> 00:21:24,860 | |
Moderator: So, we have a plenty of questions in | |
569 | |
00:21:24,860 --> 00:21:27,440 | |
slider and I will start with the most | |
570 | |
00:21:27,440 --> 00:21:31,760 | |
voted ones. Okay? And, so you talk about | |
571 | |
00:21:31,760 --> 00:21:34,070 | |
information but, what about designing | |
572 | |
00:21:34,070 --> 00:21:37,280 | |
together? Because the design is - it's - a | |
573 | |
00:21:37,280 --> 00:21:39,070 | |
product of a conversation. | |
574 | |
00:21:39,070 --> 00:21:41,750 | |
Yegor: Well, yeah. It's... yeah. I've heard the | |
575 | |
00:21:41,750 --> 00:21:43,700 | |
question many times. So, people again | |
576 | |
00:21:43,700 --> 00:21:45,530 | |
believe that the design is the | |
577 | |
00:21:45,530 --> 00:21:47,390 | |
result of the conversation of the | |
578 | |
00:21:47,390 --> 00:21:52,040 | |
work of the group. But, in my experience | |
579 | |
00:21:52,040 --> 00:21:54,110 | |
it's not that true. In my experience, the | |
580 | |
00:21:54,110 --> 00:21:56,090 | |
design is always the result of one | |
581 | |
00:21:56,090 --> 00:21:58,880 | |
person thinking and asking people around. | |
582 | |
00:21:58,880 --> 00:22:01,670 | |
So, when we start a project, we always | |
583 | |
00:22:01,670 --> 00:22:04,070 | |
have some person as an architect - in | |
584 | |
00:22:04,070 --> 00:22:05,150 | |
the role of the architect - and that | |
585 | |
00:22:05,150 --> 00:22:06,890 | |
person is responsible for creating the | |
586 | |
00:22:06,890 --> 00:22:08,750 | |
skeleton, the prototype of the product. | |
587 | |
00:22:08,750 --> 00:22:11,240 | |
That person may collect information from | |
588 | |
00:22:11,240 --> 00:22:12,650 | |
other people, asking, "What do you think | |
589 | |
00:22:12,650 --> 00:22:14,420 | |
about this? I'm not sure about choosing | |
590 | |
00:22:14,420 --> 00:22:16,280 | |
the database. So, tell me which database | |
591 | |
00:22:16,280 --> 00:22:18,530 | |
would you think I should use? Tell me | |
592 | |
00:22:18,530 --> 00:22:20,180 | |
about the technology I should use." So, | |
593 | |
00:22:20,180 --> 00:22:22,370 | |
questions are welcome. That the architect | |
594 | |
00:22:22,370 --> 00:22:24,680 | |
has to have - has to ask - questions, this | |
595 | |
00:22:24,680 --> 00:22:26,240 | |
is perfect. But, the final decision - | |
596 | |
00:22:26,240 --> 00:22:28,580 | |
the final design - has to be made by one | |
597 | |
00:22:28,580 --> 00:22:31,020 | |
person. That's what I believe. | |
598 | |
00:22:31,020 --> 00:22:34,910 | |
Moderator: Buf if they get paid for answers, if they don't get paid, they don't get to ask questions. | |
599 | |
00:22:34,910 --> 00:22:37,610 | |
Yegor: We pay for answering questions, of course. But, | |
600 | |
00:22:37,610 --> 00:22:39,470 | |
all questions are like tickets. So, let's | |
601 | |
00:22:39,470 --> 00:22:40,880 | |
say, for example, you're a good database | |
602 | |
00:22:40,880 --> 00:22:42,980 | |
engineer, yeah. And, I am like an architect. | |
603 | |
00:22:42,980 --> 00:22:44,210 | |
And, I don't really know what kind of | |
604 | |
00:22:44,210 --> 00:22:45,770 | |
database to choose, MySQL or | |
605 | |
00:22:45,770 --> 00:22:47,660 | |
PostgreSQL. So, I'm sorry, I'm submitting a | |
606 | |
00:22:47,660 --> 00:22:50,150 | |
ticket and saying, "Hey, I['m] miss[ing] a | |
607 | |
00:22:50,150 --> 00:22:53,210 | |
comparison of MySQL and PostgreSQL. I | |
608 | |
00:22:53,210 --> 00:22:55,130 | |
need a comparison provided for me. This | |
609 | |
00:22:55,130 --> 00:22:57,260 | |
is a task for you for an hour. So, you | |
610 | |
00:22:57,260 --> 00:22:59,030 | |
work for an hour, give me the table, a | |
611 | |
00:22:59,030 --> 00:23:01,400 | |
spreadsheet, comparing why MySQL is | |
612 | |
00:23:01,400 --> 00:23:03,020 | |
better for us and why PostgreSQL is better | |
613 | |
00:23:03,020 --> 00:23:04,820 | |
for us. And, I say, "Thank you very much." I | |
614 | |
00:23:04,820 --> 00:23:07,880 | |
know that. Now, let me make a decision. So, | |
615 | |
00:23:07,880 --> 00:23:09,500 | |
that's how it should be - iteratively | |
616 | |
00:23:09,500 --> 00:23:11,180 | |
goes through questions, and answers, and | |
617 | |
00:23:11,180 --> 00:23:13,010 | |
then finally, I will be able to make my | |
618 | |
00:23:13,010 --> 00:23:16,190 | |
decision. Again, it's not easy. It's way | |
619 | |
00:23:16,190 --> 00:23:17,810 | |
easier to sit together in the same room | |
620 | |
00:23:17,810 --> 00:23:18,950 | |
and say, "Hey, what do you think about | |
621 | |
00:23:18,950 --> 00:23:20,930 | |
PostgreSQL?" and you say, "Well, MySQL | |
622 | |
00:23:20,930 --> 00:23:22,610 | |
is better." "Oh, that's right, thank you very | |
623 | |
00:23:22,610 --> 00:23:24,290 | |
much!" and then I make a decision. But then, | |
624 | |
00:23:24,290 --> 00:23:26,390 | |
in two months, somebody will come and | |
625 | |
00:23:26,390 --> 00:23:28,220 | |
say, "Hey, why the decision for MySQL | |
626 | |
00:23:28,220 --> 00:23:30,590 | |
was made?" and, I'm gone from the project | |
627 | |
00:23:30,590 --> 00:23:32,300 | |
because - you know - they fired me already. | |
628 | |
00:23:32,300 --> 00:23:33,950 | |
You're gone as well. [audience laughs] They fired | |
629 | |
00:23:33,950 --> 00:23:36,320 | |
you, too. And then, the question is, "Who | |
630 | |
00:23:36,320 --> 00:23:38,240 | |
made the decision?" Well, there were two | |
631 | |
00:23:38,240 --> 00:23:39,650 | |
guys - you know - yeah. I still have the | |
632 | |
00:23:39,650 --> 00:23:41,300 | |
phone number of the one guy. Let me call | |
633 | |
00:23:41,300 --> 00:23:44,390 | |
him. But instead, we're gonna have the | |
634 | |
00:23:44,390 --> 00:23:46,490 | |
detailed conversation. And, the ticket for | |
635 | |
00:23:46,490 --> 00:23:47,930 | |
that. And, everybody will be able to jump | |
636 | |
00:23:47,930 --> 00:23:50,210 | |
in and see, "Yeah, that guy who is | |
637 | |
00:23:50,210 --> 00:23:52,520 | |
fired asked the question, "Why MySQL?" | |
638 | |
00:23:52,520 --> 00:23:54,470 | |
And, another guy submitted the detailed | |
639 | |
00:23:54,470 --> 00:23:57,730 | |
explanation of them. That's a perfect meeting traceability. | |
640 | |
00:23:57,920 --> 00:23:58,940 | |
Moderator: My friends, there | |
641 | |
00:23:58,940 --> 00:24:00,710 | |
are so many questions in slider. Go | |
642 | |
00:24:00,710 --> 00:24:02,420 | |
ahead and vote for questions, because, | |
643 | |
00:24:02,420 --> 00:24:05,360 | |
oh, let's make it moderated, OK? I'll | |
644 | |
00:24:05,360 --> 00:24:08,060 | |
ask the top most questions. And, there are | |
645 | |
00:24:08,060 --> 00:24:09,740 | |
many. So, there is the - it's not a | |
646 | |
00:24:09,740 --> 00:24:11,480 | |
question. It's like a complaint: Three | |
647 | |
00:24:11,480 --> 00:24:13,760 | |
hours of work, are you kidding? My manager | |
648 | |
00:24:13,760 --> 00:24:15,590 | |
will kill me. The stock will decrease. And, | |
649 | |
00:24:15,590 --> 00:24:19,010 | |
the company will close. Yegor: For three hours | |
650 | |
00:24:19,010 --> 00:24:20,960 | |
of work? Moderator: Three hours of work, are you kidding me? Yegor: Yeah | |
651 | |
00:24:20,960 --> 00:24:23,330 | |
per day. Yeah. I believe honestly that a | |
652 | |
00:24:23,330 --> 00:24:25,670 | |
productive - like a good engineer - Well, I'm | |
653 | |
00:24:25,670 --> 00:24:28,160 | |
talking about myself, first of all. So, I | |
654 | |
00:24:28,160 --> 00:24:30,410 | |
can't imagine working for eight hours a | |
655 | |
00:24:30,410 --> 00:24:32,510 | |
day on something which is not my | |
656 | |
00:24:32,510 --> 00:24:34,250 | |
personal project - you know - which I really | |
657 | |
00:24:34,250 --> 00:24:36,920 | |
love. So, working for somebody, for some | |
658 | |
00:24:36,920 --> 00:24:39,890 | |
project, for money, 3-4 hours a day, is the | |
659 | |
00:24:39,890 --> 00:24:42,140 | |
total maximum and normal - you know - good | |
660 | |
00:24:42,140 --> 00:24:44,300 | |
engineer can really handle, I think. | |
661 | |
00:24:44,300 --> 00:24:44,660 | |
So, | |
662 | |
00:24:44,660 --> 00:24:47,090 | |
otherwise, it's eight hours and three | |
663 | |
00:24:47,090 --> 00:24:49,190 | |
five hours of Facebook watching - you know - | |
664 | |
00:24:49,190 --> 00:24:49,990 | |
out of this. | |
665 | |
00:24:49,990 --> 00:24:52,850 | |
So, it's gonna be three hours, in any case. | |
666 | |
00:24:52,850 --> 00:24:54,890 | |
So, you're not going to be productive for | |
667 | |
00:24:54,890 --> 00:24:56,930 | |
eight hours, it's not possible. You can | |
668 | |
00:24:56,930 --> 00:24:59,060 | |
really write code for three [hours]. Sometimes, | |
669 | |
00:24:59,060 --> 00:25:01,670 | |
even two hours is enough. But, I think | |
670 | |
00:25:01,670 --> 00:25:03,290 | |
that, in general, programmers have to be | |
671 | |
00:25:03,290 --> 00:25:05,990 | |
paid way better. So, we need to earn way | |
672 | |
00:25:05,990 --> 00:25:07,910 | |
more. We need to make more money per hour | |
673 | |
00:25:07,910 --> 00:25:10,370 | |
and spend less time in front of the | |
674 | |
00:25:10,370 --> 00:25:12,770 | |
computer. You know [what I mean]? So, I don't know how | |
675 | |
00:25:12,770 --> 00:25:14,510 | |
much you're making, but an average like | |
676 | |
00:25:14,510 --> 00:25:16,220 | |
say, for example, now programmers are | |
677 | |
00:25:16,220 --> 00:25:18,470 | |
making like - personaly, I dunno - 25 euros an | |
678 | |
00:25:18,470 --> 00:25:20,180 | |
hour, thirty euros an hour. | |
679 | |
00:25:20,180 --> 00:25:22,460 | |
They have to make a hundred [Euros], but work | |
680 | |
00:25:22,460 --> 00:25:26,060 | |
three times less. In this case - but - they | |
681 | |
00:25:26,060 --> 00:25:27,770 | |
work three times less. But - they have to be | |
682 | |
00:25:27,770 --> 00:25:30,740 | |
paid for results, not for the time. So now, | |
683 | |
00:25:30,740 --> 00:25:32,630 | |
we are all paid for eight hours - you know - | |
684 | |
00:25:32,630 --> 00:25:33,890 | |
from the morning till the evening. | |
685 | |
00:25:33,890 --> 00:25:36,320 | |
Whatever I do, you pay me. But, it should | |
686 | |
00:25:36,320 --> 00:25:37,460 | |
be the other way. It should be the | |
687 | |
00:25:37,460 --> 00:25:39,920 | |
opposite: You pay me way more, but only | |
688 | |
00:25:39,920 --> 00:25:42,020 | |
for the results I produce. In the end, it | |
689 | |
00:25:42,020 --> 00:25:43,670 | |
will be the same amount of | |
690 | |
00:25:43,670 --> 00:25:45,230 | |
money in cash. Maybe a little bit more, | |
691 | |
00:25:45,230 --> 00:25:47,450 | |
but I will be focused on results. | |
692 | |
00:25:47,450 --> 00:25:48,920 | |
I'll be really motivated and | |
693 | |
00:25:48,920 --> 00:25:51,140 | |
interested to actually work, instead of | |
694 | |
00:25:51,140 --> 00:25:53,000 | |
just pretending I'm working, just sitting | |
695 | |
00:25:53,000 --> 00:25:55,820 | |
there. And, just going to, okay, so the | |
696 | |
00:25:55,820 --> 00:25:57,290 | |
three hours is that. Three hours is the | |
697 | |
00:25:57,290 --> 00:26:00,170 | |
maximum. Well, four. Moderator: The next question: Who | |
698 | |
00:26:00,170 --> 00:26:02,780 | |
decides how much time the problem | |
699 | |
00:26:02,780 --> 00:26:05,810 | |
takes to solve? If it's the | |
700 | |
00:26:05,810 --> 00:26:08,000 | |
business, how can [they] estimate? They always | |
701 | |
00:26:08,000 --> 00:26:10,000 | |
think the task is easy. | |
702 | |
00:26:10,000 --> 00:26:14,720 | |
Yegor: Well, yeah. We just, in our | |
703 | |
00:26:14,720 --> 00:26:18,260 | |
approach, we always give the same | |
704 | |
00:26:18,260 --> 00:26:21,260 | |
budget for all tasks. So, we always give | |
705 | |
00:26:21,260 --> 00:26:23,780 | |
it a really small budget. And then, we use | |
706 | |
00:26:23,780 --> 00:26:25,340 | |
this technology where we allow | |
707 | |
00:26:25,340 --> 00:26:28,220 | |
developers to return back the code in | |
708 | |
00:26:28,220 --> 00:26:31,460 | |
incomplete state. So, I guess you're | |
709 | |
00:26:31,460 --> 00:26:32,990 | |
developers, right? Who are the developers? | |
710 | |
00:26:32,990 --> 00:26:36,890 | |
Who actually writes code here? Like 75%, | |
711 | |
00:26:36,890 --> 00:26:39,620 | |
maybe more. So, you should understand that. | |
712 | |
00:26:39,620 --> 00:26:42,530 | |
Let's say you get a task [where] you have to | |
713 | |
00:26:42,530 --> 00:26:44,390 | |
implement that feature. And, the feature | |
714 | |
00:26:44,390 --> 00:26:47,150 | |
is way bigger than one hour. So, we don't | |
715 | |
00:26:47,150 --> 00:26:49,460 | |
ask you to - you know - to... We ask you to | |
716 | |
00:26:49,460 --> 00:26:52,040 | |
cheat, basically. We ask you to implement | |
717 | |
00:26:52,040 --> 00:26:53,960 | |
the - provide the high level | |
718 | |
00:26:53,960 --> 00:26:56,540 | |
implementation with certain parts not | |
719 | |
00:26:56,540 --> 00:26:59,420 | |
implemented yet. So, we say, this feature, | |
720 | |
00:26:59,420 --> 00:27:00,950 | |
for example, I have to be able to click | |
721 | |
00:27:00,950 --> 00:27:04,100 | |
the button and log in. And, this is one | |
722 | |
00:27:04,100 --> 00:27:05,300 | |
hour for you. And, you understand that's | |
723 | |
00:27:05,300 --> 00:27:06,530 | |
one hour. It's not enough. It should be | |
724 | |
00:27:06,530 --> 00:27:08,720 | |
like five hours. So, you just create a | |
725 | |
00:27:08,720 --> 00:27:10,970 | |
button. It says "log in". It's clickable. | |
726 | |
00:27:10,970 --> 00:27:13,910 | |
But, it doesn't log in. So, you just return | |
727 | |
00:27:13,910 --> 00:27:15,860 | |
back the code to me - to the master | |
728 | |
00:27:15,860 --> 00:27:18,110 | |
branch - and say, the button is there but, | |
729 | |
00:27:18,110 --> 00:27:20,510 | |
there is a marker [which] says "to-do later: | |
730 | |
00:27:20,510 --> 00:27:22,730 | |
Implement the log-in this and that way." | |
731 | |
00:27:22,730 --> 00:27:25,130 | |
So, you kind of help us to improve - to | |
732 | |
00:27:25,130 --> 00:27:27,350 | |
design that. And, by introducing the | |
733 | |
00:27:27,350 --> 00:27:29,720 | |
high level solution, and then keeping the | |
734 | |
00:27:29,720 --> 00:27:32,000 | |
markers of where other programmers have | |
735 | |
00:27:32,000 --> 00:27:34,010 | |
to contribute more. So, you return back | |
736 | |
00:27:34,010 --> 00:27:36,140 | |
the code with the markers. And then, these | |
737 | |
00:27:36,140 --> 00:27:39,230 | |
markers we convert back to new tasks. So, | |
738 | |
00:27:39,230 --> 00:27:41,720 | |
we ask developers to help us break down | |
739 | |
00:27:41,720 --> 00:27:44,120 | |
the problem into smaller pieces. That's | |
740 | |
00:27:44,120 --> 00:27:46,490 | |
how we do it. Moderator: Next question. Yegor: We call it | |
741 | |
00:27:46,490 --> 00:27:48,110 | |
"puzzle driven development". So, we call | |
742 | |
00:27:48,110 --> 00:27:49,970 | |
these pieces "puzzles". So, we give you | |
743 | |
00:27:49,970 --> 00:27:51,980 | |
the task. You return it back with puzzles | |
744 | |
00:27:51,980 --> 00:27:53,840 | |
inside. And then, somebody else will solve | |
745 | |
00:27:53,840 --> 00:27:55,610 | |
[those] puzzles. And while people | |
746 | |
00:27:55,610 --> 00:27:56,870 | |
solve the puzzles, they will introduce | |
747 | |
00:27:56,870 --> 00:27:59,150 | |
new puzzles. So, when we start developing, | |
748 | |
00:27:59,150 --> 00:28:00,860 | |
it's just a few puzzles. And then, it goes | |
749 | |
00:28:00,860 --> 00:28:02,270 | |
like that. [Yegor gestures an expanding mountain with his hands] So, there are like | |
750 | |
00:28:02,270 --> 00:28:04,130 | |
hundreds of puzzles. And then, when all of | |
751 | |
00:28:04,130 --> 00:28:06,050 | |
them get fixed, the software gets back [together], | |
752 | |
00:28:06,050 --> 00:28:08,300 | |
and it starts to work well. It becomes | |
753 | |
00:28:08,300 --> 00:28:10,610 | |
completely functional. If you're interested, | |
754 | |
00:28:10,610 --> 00:28:12,170 | |
come back to me later. I'll explain. | |
755 | |
00:28:12,170 --> 00:28:13,100 | |
Moderator: Next question. | |
756 | |
00:28:13,100 --> 00:28:15,620 | |
Isn't there a lack of quality? Developers | |
757 | |
00:28:15,620 --> 00:28:17,660 | |
deliver the code and go. There is no | |
758 | |
00:28:17,660 --> 00:28:19,580 | |
motivation in delivering good code. Who | |
759 | |
00:28:19,580 --> 00:28:21,950 | |
decides whether to pay or not? | |
760 | |
00:28:22,100 --> 00:28:24,110 | |
Yegor: Yeah, that's a good question. So, definitely. And, | |
761 | |
00:28:24,110 --> 00:28:26,540 | |
we really ask our developers | |
762 | |
00:28:26,540 --> 00:28:29,960 | |
to be lazy. So, be lazy. Don't try to do | |
763 | |
00:28:29,960 --> 00:28:31,670 | |
more than you can do. But, be prepared | |
764 | |
00:28:31,670 --> 00:28:34,550 | |
that the quality control is really | |
765 | |
00:28:34,550 --> 00:28:36,770 | |
strict in front of you. So, when you get | |
766 | |
00:28:36,770 --> 00:28:38,120 | |
the task and you have to implement | |
767 | |
00:28:38,120 --> 00:28:40,790 | |
something, do as little as you can. You | |
768 | |
00:28:40,790 --> 00:28:42,620 | |
don't need to - you know - to make it hard. | |
769 | |
00:28:42,620 --> 00:28:44,690 | |
You don't make the quality higher than | |
770 | |
00:28:44,690 --> 00:28:46,460 | |
the quality bar we have in front of you. | |
771 | |
00:28:46,460 --> 00:28:48,890 | |
And, the quality bar is quite high. So, for | |
772 | |
00:28:48,890 --> 00:28:50,960 | |
you to return back the code to us, to the | |
773 | |
00:28:50,960 --> 00:28:53,120 | |
master branch, it has to pass two code | |
774 | |
00:28:53,120 --> 00:28:55,850 | |
reviews plus the automated merge | |
775 | |
00:28:55,850 --> 00:28:57,890 | |
instruments. So, we're going to merge your | |
776 | |
00:28:57,890 --> 00:29:00,500 | |
branch back to master branch only if all | |
777 | |
00:29:00,500 --> 00:29:02,510 | |
the tests and all the static analysis | |
778 | |
00:29:02,510 --> 00:29:04,310 | |
and all the coverage control, everything | |
779 | |
00:29:04,310 --> 00:29:07,250 | |
passes. So, for example, they'll give you | |
780 | |
00:29:07,250 --> 00:29:09,020 | |
the example of how high is the quality | |
781 | |
00:29:09,020 --> 00:29:12,170 | |
bar for us. Static analysis is the step | |
782 | |
00:29:12,170 --> 00:29:15,200 | |
in the build for us. So, we | |
783 | |
00:29:15,200 --> 00:29:16,910 | |
don't with - The build is not going to | |
784 | |
00:29:16,910 --> 00:29:17,480 | |
pass | |
785 | |
00:29:17,480 --> 00:29:20,420 | |
if the static analyzer says there are | |
786 | |
00:29:20,420 --> 00:29:23,060 | |
any bugs, any warnings, [or] any complaints. You | |
787 | |
00:29:23,060 --> 00:29:25,940 | |
know what static analysis is, right? Do | |
788 | |
00:29:25,940 --> 00:29:29,180 | |
you know what static analysis is? Okay, | |
789 | |
00:29:29,180 --> 00:29:29,570 | |
good. | |
790 | |
00:29:29,570 --> 00:29:31,220 | |
So you understand the static analysis is | |
791 | |
00:29:31,220 --> 00:29:33,560 | |
usually is used as a tool which is - you | |
792 | |
00:29:33,560 --> 00:29:35,510 | |
know - which we run on the code and which | |
793 | |
00:29:35,510 --> 00:29:37,580 | |
generates some - you know - spreadsheets, | |
794 | |
00:29:37,580 --> 00:29:39,470 | |
some interesting web pages, which we'll | |
795 | |
00:29:39,470 --> 00:29:42,050 | |
look at and say, "Hey, the rate of our | |
796 | |
00:29:42,050 --> 00:29:44,540 | |
static analysis warnings is a bit lower | |
797 | |
00:29:44,540 --> 00:29:47,180 | |
than the yesterday. That's great, but, | |
798 | |
00:29:47,180 --> 00:29:48,800 | |
there's still a lot of them - Still a lot | |
799 | |
00:29:48,800 --> 00:29:50,570 | |
of complaints." Look at your project. Run | |
800 | |
00:29:50,570 --> 00:29:52,400 | |
the static analyzer for your project. No | |
801 | |
00:29:52,400 --> 00:29:53,840 | |
matter what language you're using, you | |
802 | |
00:29:53,840 --> 00:29:55,730 | |
will see there many of them. In our case, | |
803 | |
00:29:55,730 --> 00:29:58,490 | |
there is zero. So, we run the static | |
804 | |
00:29:58,490 --> 00:30:00,320 | |
analysis on the entire code base. And, | |
805 | |
00:30:00,320 --> 00:30:02,630 | |
there should be zero warnings, which is | |
806 | |
00:30:02,630 --> 00:30:04,040 | |
really difficult to achieve. If you're | |
807 | |
00:30:04,040 --> 00:30:05,420 | |
serious, if your static analysis is | |
808 | |
00:30:05,420 --> 00:30:07,100 | |
configured properly, it's really | |
809 | |
00:30:07,100 --> 00:30:08,360 | |
difficult to achieve. Especially, there | |
810 | |
00:30:08,360 --> 00:30:09,590 | |
are many people working there. And, the | |
811 | |
00:30:09,590 --> 00:30:11,630 | |
code base is quite big in our case. No | |
812 | |
00:30:11,630 --> 00:30:13,070 | |
matter how big is the code base, no | |
813 | |
00:30:13,070 --> 00:30:13,760 | |
matter how | |
814 | |
00:30:13,760 --> 00:30:15,470 | |
many developers are there, we're | |
815 | |
00:30:15,470 --> 00:30:17,360 | |
not gonna merge your stuff unless | |
816 | |
00:30:17,360 --> 00:30:19,640 | |
there's no bugs. There's no static | |
817 | |
00:30:19,640 --> 00:30:21,590 | |
analysis complaints. So, that's an | |
818 | |
00:30:21,590 --> 00:30:23,570 | |
example of how high is the quality bar. | |
819 | |
00:30:23,570 --> 00:30:25,970 | |
So, what I'm saying is that, we're kind of | |
820 | |
00:30:25,970 --> 00:30:27,650 | |
building a conflict. Here's your task. | |
821 | |
00:30:27,650 --> 00:30:29,750 | |
You're gonna get the money when it's | |
822 | |
00:30:29,750 --> 00:30:31,460 | |
merged. But, you're not gonna get [your code] merged | |
823 | |
00:30:31,460 --> 00:30:34,580 | |
if the quality is not high enough. And, we | |
824 | |
00:30:34,580 --> 00:30:37,490 | |
do it for every single task. So, for each - | |
825 | |
00:30:37,490 --> 00:30:39,740 | |
for every single increment. For every | |
826 | |
00:30:39,740 --> 00:30:41,540 | |
single developer who is trying to change | |
827 | |
00:30:41,540 --> 00:30:43,760 | |
the code and commit the new stuff into | |
828 | |
00:30:43,760 --> 00:30:45,980 | |
our code base into master. We always | |
829 | |
00:30:45,980 --> 00:30:47,450 | |
check the quality. We'll always check the | |
830 | |
00:30:47,450 --> 00:30:49,340 | |
quality. So, when the project is one year | |
831 | |
00:30:49,340 --> 00:30:52,100 | |
old, we merged already a thousand pull | |
832 | |
00:30:52,100 --> 00:30:54,470 | |
requests. And, for all these thousand pull | |
833 | |
00:30:54,470 --> 00:30:56,660 | |
requests, for thousand[s of] steps, micro | |
834 | |
00:30:56,660 --> 00:30:58,460 | |
increments, we check the quality again, | |
835 | |
00:30:58,460 --> 00:31:00,470 | |
again, and again. So, in the end, the | |
836 | |
00:31:00,470 --> 00:31:02,150 | |
quality is really high. Again, you can | |
837 | |
00:31:02,150 --> 00:31:03,770 | |
check our GitHub projects in Java. You | |
838 | |
00:31:03,770 --> 00:31:05,540 | |
will see how high is | |
839 | |
00:31:05,540 --> 00:31:08,450 | |
the quality of our code. Moderator: Okay, great. | |
840 | |
00:31:08,450 --> 00:31:10,220 | |
There was a comment. Maybe you have | |
841 | |
00:31:10,220 --> 00:31:12,740 | |
something to say about it. Even prisoners | |
842 | |
00:31:12,740 --> 00:31:17,240 | |
are allowed one call. Yegor: [laughs] Well, yeah. For the | |
843 | |
00:31:17,240 --> 00:31:18,770 | |
call. Yeah. I've heard that complain a lot. | |
844 | |
00:31:18,770 --> 00:31:20,570 | |
So, people saying like, "Hey, we're people. | |
845 | |
00:31:20,570 --> 00:31:21,890 | |
We love to call each other. We love | |
846 | |
00:31:21,890 --> 00:31:23,630 | |
to say good morning sometimes. What kind | |
847 | |
00:31:23,630 --> 00:31:25,370 | |
of work is that when there is like, yeah, | |
848 | |
00:31:25,370 --> 00:31:27,860 | |
people don't talk to each other?" I also | |
849 | |
00:31:27,860 --> 00:31:30,920 | |
thought so. I had that fear years ago | |
850 | |
00:31:30,920 --> 00:31:32,540 | |
when I introduced that [no call policy]. I was like hey, | |
851 | |
00:31:32,540 --> 00:31:34,310 | |
programmers not gonna like it, because | |
852 | |
00:31:34,310 --> 00:31:36,290 | |
they're kind of used to talking to each other. | |
853 | |
00:31:36,290 --> 00:31:38,780 | |
They love these, all these Slack chats, and | |
854 | |
00:31:38,780 --> 00:31:41,660 | |
hashtags, and everything. But, when we're | |
855 | |
00:31:41,660 --> 00:31:43,430 | |
talking about A players, when we're | |
856 | |
00:31:43,430 --> 00:31:45,110 | |
talking about senior developers, they | |
857 | |
00:31:45,110 --> 00:31:47,930 | |
really don't like that. They like to stay | |
858 | |
00:31:47,930 --> 00:31:49,430 | |
focused on their stuff, which is really | |
859 | |
00:31:49,430 --> 00:31:51,350 | |
interesting for them. They have other | |
860 | |
00:31:51,350 --> 00:31:53,060 | |
places where we can - where they can - talk | |
861 | |
00:31:53,060 --> 00:31:54,710 | |
to somebody. They can - you know - have beer. | |
862 | |
00:31:54,710 --> 00:31:57,410 | |
They can smile. They can joke. That the | |
863 | |
00:31:57,410 --> 00:31:59,360 | |
work and the project is the place where | |
864 | |
00:31:59,360 --> 00:32:00,530 | |
people are interested in professional | |
865 | |
00:32:00,530 --> 00:32:04,190 | |
growth, not - you know - interpersonal | |
866 | |
00:32:04,190 --> 00:32:06,500 | |
communications, in my experience. Because, | |
867 | |
00:32:06,500 --> 00:32:08,510 | |
let's face the reality: The project is | |
868 | |
00:32:08,510 --> 00:32:11,330 | |
just a temporary group of | |
869 | |
00:32:11,330 --> 00:32:13,520 | |
people who have nothing in common | |
870 | |
00:32:13,520 --> 00:32:15,770 | |
basically. In most cases, they're | |
871 | |
00:32:15,770 --> 00:32:17,030 | |
from different countries, they're from | |
872 | |
00:32:17,030 --> 00:32:18,170 | |
different cultures, they're from | |
873 | |
00:32:18,170 --> 00:32:20,420 | |
different - they're different ages, they're | |
874 | |
00:32:20,420 --> 00:32:22,340 | |
just different people. They come together | |
875 | |
00:32:22,340 --> 00:32:24,500 | |
because they are Java experts, for | |
876 | |
00:32:24,500 --> 00:32:26,950 | |
example. And, this is what they have in common. | |
877 | |
00:32:26,950 --> 00:32:29,470 | |
That's it. They're not friends. They never | |
878 | |
00:32:29,470 --> 00:32:31,210 | |
been to school together. They don't live | |
879 | |
00:32:31,210 --> 00:32:32,680 | |
together. They don't have - you know - their | |
880 | |
00:32:32,680 --> 00:32:34,360 | |
families are not friends. So, | |
881 | |
00:32:34,360 --> 00:32:36,430 | |
they want to focus on stuff which they | |
882 | |
00:32:36,430 --> 00:32:37,810 | |
have in common. And, when traditional | |
883 | |
00:32:37,810 --> 00:32:40,630 | |
projects - you know - trying to make a team | |
884 | |
00:32:40,630 --> 00:32:42,310 | |
of them, trying to use these | |
885 | |
00:32:42,310 --> 00:32:44,260 | |
team-building things, and trying to - you | |
886 | |
00:32:44,260 --> 00:32:45,580 | |
know - say like, "Hey, we're one family", | |
887 | |
00:32:45,580 --> 00:32:48,160 | |
They're not one family. They don't have | |
888 | |
00:32:48,160 --> 00:32:50,530 | |
anything in common. Like - you know - I'm | |
889 | |
00:32:50,530 --> 00:32:55,080 | |
40. He's 16. What kind of family is this? | |
890 | |
00:32:58,680 --> 00:33:01,330 | |
And, this is really annoying for A | |
891 | |
00:33:01,330 --> 00:33:02,740 | |
players. This is really annoying for | |
892 | |
00:33:02,740 --> 00:33:04,630 | |
senior developers to be in the team like | |
893 | |
00:33:04,630 --> 00:33:06,220 | |
that when people are trying to put them | |
894 | |
00:33:06,220 --> 00:33:07,780 | |
together and say it's one family, one | |
895 | |
00:33:07,780 --> 00:33:09,640 | |
team, "we're all together". They['re] just [like,] "Leave | |
896 | |
00:33:09,640 --> 00:33:10,090 | |
me alone. | |
897 | |
00:33:10,090 --> 00:33:11,980 | |
Let me code. Let me - [you] know - write the code. | |
898 | |
00:33:11,980 --> 00:33:13,720 | |
Let me focus on that [which] we are doing." | |
899 | |
00:33:13,720 --> 00:33:15,160 | |
Exactly that. We're just saying remove | |
900 | |
00:33:15,160 --> 00:33:18,880 | |
that interpersonal - you know - stop and | |
901 | |
00:33:18,880 --> 00:33:21,220 | |
focus on this, on the technical, on the | |
902 | |
00:33:21,220 --> 00:33:22,840 | |
technical problems, and people really | |
903 | |
00:33:22,840 --> 00:33:25,330 | |
appreciate it - A players. C players, yeah, | |
904 | |
00:33:25,330 --> 00:33:27,010 | |
they complain. They complain they say | |
905 | |
00:33:27,010 --> 00:33:28,870 | |
like, "Hey, where's your Slack chat? How can | |
906 | |
00:33:28,870 --> 00:33:30,460 | |
I call you? I can explain. You let me call | |
907 | |
00:33:30,460 --> 00:33:31,960 | |
you and I explain everything." We're just | |
908 | |
00:33:31,960 --> 00:33:33,550 | |
saying, "No, here's the ticket. Submit the | |
909 | |
00:33:33,550 --> 00:33:35,560 | |
ticket. You don't like the objective code? | |
910 | |
00:33:35,560 --> 00:33:37,060 | |
You don't like the documentation? Submit | |
911 | |
00:33:37,060 --> 00:33:38,950 | |
the ticket." And he's like, "Yeah, it's not | |
912 | |
00:33:38,950 --> 00:33:40,750 | |
really how I'm used to them to do that. | |
913 | |
00:33:40,750 --> 00:33:42,970 | |
Let me call, it'd be easier for me. It's a | |
914 | |
00:33:42,970 --> 00:33:44,770 | |
clear indication that he's a C player. | |
915 | |
00:33:44,770 --> 00:33:47,470 | |
Or she. Moderator: This is always a man. So, let's | |
916 | |
00:33:47,470 --> 00:33:49,810 | |
move on. If people are only paid for | |
917 | |
00:33:49,810 --> 00:33:52,300 | |
results, how do you handle periods where | |
918 | |
00:33:52,300 --> 00:33:54,730 | |
people have less productivity? They have | |
919 | |
00:33:54,730 --> 00:33:56,650 | |
personal issues, for example. But, they are | |
920 | |
00:33:56,650 --> 00:34:01,060 | |
temporary. Yegor: It's their own problems. I mean, | |
921 | |
00:34:01,060 --> 00:34:03,340 | |
yeah. But, we, there... We're adults, I mean. | |
922 | |
00:34:03,340 --> 00:34:06,580 | |
It's business. So, we, this is... We pay | |
923 | |
00:34:06,580 --> 00:34:08,890 | |
people. I mean, our rates are high. | |
924 | |
00:34:08,890 --> 00:34:11,800 | |
That's first. So, we pay people. We work | |
925 | |
00:34:11,800 --> 00:34:13,330 | |
remotely. And, there are people from | |
926 | |
00:34:13,330 --> 00:34:14,710 | |
mostly from not really expensive | |
927 | |
00:34:14,710 --> 00:34:17,470 | |
countries. And, we pay like 40 bucks an | |
928 | |
00:34:17,470 --> 00:34:19,600 | |
hour, 45 dollars an hour. It's pretty high | |
929 | |
00:34:19,600 --> 00:34:21,970 | |
rate. So, we allow them to make money | |
930 | |
00:34:21,970 --> 00:34:24,700 | |
while they are productive, | |
931 | |
00:34:24,700 --> 00:34:27,340 | |
while they have time. So, they are - you | |
932 | |
00:34:27,340 --> 00:34:28,960 | |
know - they should be smart enough. They | |
933 | |
00:34:28,960 --> 00:34:31,540 | |
should be grown-up people to manage | |
934 | |
00:34:31,540 --> 00:34:33,370 | |
their own finance, to manage their own | |
935 | |
00:34:33,370 --> 00:34:35,530 | |
money. So, save something for the time | |
936 | |
00:34:35,530 --> 00:34:37,750 | |
which for your vacation or whatever. So, | |
937 | |
00:34:37,750 --> 00:34:38,980 | |
we're not trying to - you know - we're | |
938 | |
00:34:38,980 --> 00:34:40,090 | |
trying to respect our | |
939 | |
00:34:40,090 --> 00:34:41,890 | |
people with - our programmers - we're trying | |
940 | |
00:34:41,890 --> 00:34:44,080 | |
to treat them as - you know - as equal. | |
941 | |
00:34:44,080 --> 00:34:46,150 | |
They're not kids. They're not | |
942 | |
00:34:46,150 --> 00:34:47,470 | |
children. So, they don't need to be | |
943 | |
00:34:47,470 --> 00:34:49,180 | |
patronized like in traditional teams. | |
944 | |
00:34:49,180 --> 00:34:50,350 | |
Like, yeah, we're gonna cover your | |
945 | |
00:34:50,350 --> 00:34:53,110 | |
vacation, just sit in the office. It, again, | |
946 | |
00:34:53,110 --> 00:34:54,850 | |
it doesn't motivate A players. It | |
947 | |
00:34:54,850 --> 00:34:56,650 | |
motivates C players. With those, like, hey, | |
948 | |
00:34:56,650 --> 00:34:58,570 | |
I'm productive now because it's luck. | |
949 | |
00:34:58,570 --> 00:35:00,310 | |
Maybe tomorrow I will stop being | |
950 | |
00:35:00,310 --> 00:35:01,750 | |
productive because, who knows. What's | |
951 | |
00:35:01,750 --> 00:35:03,130 | |
gonna happen? They're afraid of that. And, | |
952 | |
00:35:03,130 --> 00:35:04,590 | |
that's why they want to be patronized, | |
953 | |
00:35:04,590 --> 00:35:06,760 | |
protected. They want somebody to take | |
954 | |
00:35:06,760 --> 00:35:08,980 | |
care of them. We just let them take | |
955 | |
00:35:08,980 --> 00:35:10,630 | |
care of themselves. So, we treat them | |
956 | |
00:35:10,630 --> 00:35:11,950 | |
equally. This is the project. We have | |
957 | |
00:35:11,950 --> 00:35:13,450 | |
money here. You produce something. You | |
958 | |
00:35:13,450 --> 00:35:14,770 | |
give the results. We transfer the money | |
959 | |
00:35:14,770 --> 00:35:17,050 | |
from here to here. And then, we're - you | |
960 | |
00:35:17,050 --> 00:35:20,950 | |
know - just go our own ways. So, we don't | |
961 | |
00:35:20,950 --> 00:35:22,990 | |
have any vacations, paid vacations, | |
962 | |
00:35:22,990 --> 00:35:25,180 | |
anything. Moderator: Who is responsible for the | |
963 | |
00:35:25,180 --> 00:35:27,700 | |
final production result? Yegor: Well, for the | |
964 | |
00:35:27,700 --> 00:35:28,930 | |
final productions result, is the | |
965 | |
00:35:28,930 --> 00:35:30,820 | |
architect. So, technically, we have an | |
966 | |
00:35:30,820 --> 00:35:32,410 | |
architect, like I said, in any project. And, | |
967 | |
00:35:32,410 --> 00:35:34,240 | |
that person is responsible for final | |
968 | |
00:35:34,240 --> 00:35:37,330 | |
production result and responsible. We | |
969 | |
00:35:37,330 --> 00:35:38,820 | |
don't like the word responsible, because, | |
970 | |
00:35:38,820 --> 00:35:41,950 | |
responsibility means some - you know - means | |
971 | |
00:35:41,950 --> 00:35:43,570 | |
that you're gonna lose something if | |
972 | |
00:35:43,570 --> 00:35:45,550 | |
something happens. In our case, it doesn't | |
973 | |
00:35:45,550 --> 00:35:47,860 | |
happen. So, in our case, if the project | |
974 | |
00:35:47,860 --> 00:35:50,500 | |
doesn't work in the end, then, you know, | |
975 | |
00:35:50,500 --> 00:35:52,570 | |
that's it. So, there is no - you know - | |
976 | |
00:35:52,570 --> 00:35:54,340 | |
financial responsibility of that person. | |
977 | |
00:35:54,340 --> 00:35:55,600 | |
We're not gonna say like, "Hey, now you're | |
978 | |
00:35:55,600 --> 00:35:56,890 | |
gonna pay us something because you were | |
979 | |
00:35:56,890 --> 00:35:58,930 | |
the architect for a month and you didn't | |
980 | |
00:35:58,930 --> 00:36:01,660 | |
produce anything." So, the word "responsible", | |
981 | |
00:36:01,660 --> 00:36:03,640 | |
in this case, we don't like to use, even | |
982 | |
00:36:03,640 --> 00:36:05,350 | |
with the customer. So, when customers come | |
983 | |
00:36:05,350 --> 00:36:07,750 | |
to us and say like, "Hey, are you gonna be | |
984 | |
00:36:07,750 --> 00:36:10,150 | |
responsible? Is [it] gonna work?" We say, "No, we | |
985 | |
00:36:10,150 --> 00:36:11,620 | |
can't guarantee that the software will | |
986 | |
00:36:11,620 --> 00:36:13,570 | |
work. All we can guarantee [is] that the way | |
987 | |
00:36:13,570 --> 00:36:16,150 | |
we manage the development is effective." | |
988 | |
00:36:16,150 --> 00:36:18,250 | |
It's like it's, I'm always giving this | |
989 | |
00:36:18,250 --> 00:36:20,440 | |
example with the taxi driver. You go into | |
990 | |
00:36:20,440 --> 00:36:22,270 | |
the taxi and you ask, "Can you guarantee | |
991 | |
00:36:22,270 --> 00:36:24,640 | |
that you will take me to the airport?" If | |
992 | |
00:36:24,640 --> 00:36:26,350 | |
the taxi driver is professional enough, | |
993 | |
00:36:26,350 --> 00:36:28,330 | |
he will say like, "No, I can't guarantee | |
994 | |
00:36:28,330 --> 00:36:30,310 | |
you that, because, anything may happen. The | |
995 | |
00:36:30,310 --> 00:36:31,750 | |
car may break. There's gonna be a | |
996 | |
00:36:31,750 --> 00:36:33,520 | |
roadblock, whatever. Anything can happen. | |
997 | |
00:36:33,520 --> 00:36:35,140 | |
All I can guarantee you [is] that I have a | |
998 | |
00:36:35,140 --> 00:36:36,850 | |
GPS, I have a map, I have a driving | |
999 | |
00:36:36,850 --> 00:36:38,740 | |
license, I have the gas in my car. | |
1000 | |
00:36:38,740 --> 00:36:41,290 | |
Let's go. Let's go and see what happens. | |
1001 | |
00:36:41,290 --> 00:36:43,300 | |
So, we are together in this | |
1002 | |
00:36:43,300 --> 00:36:44,560 | |
journey, you know? The same should happen | |
1003 | |
00:36:44,560 --> 00:36:46,990 | |
in software development. Any attempt to | |
1004 | |
00:36:46,990 --> 00:36:49,180 | |
put responsibility on | |
1005 | |
00:36:49,180 --> 00:36:52,480 | |
on the team like say, "Hey guys. Whatever | |
1006 | |
00:36:52,480 --> 00:36:53,530 | |
happens, you have to | |
1007 | |
00:36:53,530 --> 00:36:55,870 | |
make it work. It's just against the idea | |
1008 | |
00:36:55,870 --> 00:36:57,970 | |
of software development. It's wrong. You | |
1009 | |
00:36:57,970 --> 00:36:59,680 | |
shouldn't. Well, if you [are] a | |
1010 | |
00:36:59,680 --> 00:37:01,000 | |
customer, you shouldn't do it like that. | |
1011 | |
00:37:01,000 --> 00:37:03,340 | |
You should check how your | |
1012 | |
00:37:03,340 --> 00:37:05,290 | |
team works. How effective are the | |
1013 | |
00:37:05,290 --> 00:37:07,510 | |
mechanisms and methods they use to | |
1014 | |
00:37:07,510 --> 00:37:09,250 | |
organize their work? And then, see what | |
1015 | |
00:37:09,250 --> 00:37:09,760 | |
happens. | |
1016 | |
00:37:09,760 --> 00:37:12,010 | |
And also, it's also related to the | |
1017 | |
00:37:12,010 --> 00:37:13,600 | |
estimate. So, sometimes people say like | |
1018 | |
00:37:13,600 --> 00:37:15,130 | |
"Can you estimate the project? How much | |
1019 | |
00:37:15,130 --> 00:37:17,980 | |
will it cost?" We can't estimate, but, we | |
1020 | |
00:37:17,980 --> 00:37:20,080 | |
never put that in the contract [that] we can't | |
1021 | |
00:37:20,080 --> 00:37:21,490 | |
give you some number and say like, "We | |
1022 | |
00:37:21,490 --> 00:37:22,900 | |
estimate it's gonna cost a hundred | |
1023 | |
00:37:22,900 --> 00:37:25,090 | |
thousand dollars." Yes, that's an estimate. | |
1024 | |
00:37:25,090 --> 00:37:28,930 | |
But, it may be a million easy. So, we just | |
1025 | |
00:37:28,930 --> 00:37:31,390 | |
gonna see what happens. We will | |
1026 | |
00:37:31,390 --> 00:37:33,610 | |
drive. We're in the taxi. We will drive. | |
1027 | |
00:37:33,610 --> 00:37:36,310 | |
But, if on that way straight there, if | |
1028 | |
00:37:36,310 --> 00:37:40,150 | |
there will be some - you know - detours and | |
1029 | |
00:37:40,150 --> 00:37:41,980 | |
some roadblocks, then we will make | |
1030 | |
00:37:41,980 --> 00:37:43,870 | |
detours. And, it will cost you more and | |
1031 | |
00:37:43,870 --> 00:37:46,780 | |
more and more. The only thing we can | |
1032 | |
00:37:46,780 --> 00:37:48,340 | |
guarantee is that we're not gonna cheat. | |
1033 | |
00:37:48,340 --> 00:37:49,810 | |
We're not gonna - you know - make extra | |
1034 | |
00:37:49,810 --> 00:37:51,790 | |
detours. That's what you can blame | |
1035 | |
00:37:51,790 --> 00:37:53,500 | |
us for. But, don't blame us for - you know - | |
1036 | |
00:37:53,500 --> 00:37:55,750 | |
for the road being longer than you were | |
1037 | |
00:37:55,750 --> 00:37:58,480 | |
expecting. That's the philosophy. I mean, | |
1038 | |
00:37:58,480 --> 00:37:59,980 | |
not every customer will like that, but... | |
1039 | |
00:37:59,980 --> 00:38:02,380 | |
Moderator: Okay, let's move on. How do you know that | |
1040 | |
00:38:02,380 --> 00:38:04,540 | |
your developers didn't form up hidden | |
1041 | |
00:38:04,540 --> 00:38:08,680 | |
secret chat groups? [Yegor and audience laugh] How do you know that | |
1042 | |
00:38:08,680 --> 00:38:11,560 | |
your developers does not form up a | |
1043 | |
00:38:11,560 --> 00:38:13,780 | |
secret chat groups? Yegor: Well, yeah. We thought | |
1044 | |
00:38:13,780 --> 00:38:15,670 | |
about that. And - you know - when they start | |
1045 | |
00:38:15,670 --> 00:38:16,810 | |
working, they - sometimes they try. | |
1046 | |
00:38:16,810 --> 00:38:23,260 | |
Sometimes they try. [audience laughs] I had - it's a real | |
1047 | |
00:38:23,260 --> 00:38:25,570 | |
story. I had a story with the customer. So, | |
1048 | |
00:38:25,570 --> 00:38:27,310 | |
the customer came to us. And, I explained | |
1049 | |
00:38:27,310 --> 00:38:29,350 | |
the idea, like how we work, and he | |
1050 | |
00:38:29,350 --> 00:38:30,880 | |
said like, "I love it. Let's do it your way." | |
1051 | |
00:38:30,880 --> 00:38:33,370 | |
And, then we started to work. And then, in | |
1052 | |
00:38:33,370 --> 00:38:35,980 | |
about a month, I realized that I | |
1053 | |
00:38:35,980 --> 00:38:37,960 | |
don't have enough - you know - tickets. So, | |
1054 | |
00:38:37,960 --> 00:38:39,520 | |
he's coming to me and giving me some | |
1055 | |
00:38:39,520 --> 00:38:41,170 | |
information which I can't find hidden in | |
1056 | |
00:38:41,170 --> 00:38:43,510 | |
tickets. So, he's saying like, "Hey, we're | |
1057 | |
00:38:43,510 --> 00:38:45,070 | |
using that technology. It's really great." | |
1058 | |
00:38:45,070 --> 00:38:46,540 | |
and I'm like, "Yeah, but, who made that | |
1059 | |
00:38:46,540 --> 00:38:47,980 | |
decision?" and he's like, "Yeah, that | |
1060 | |
00:38:47,980 --> 00:38:49,720 | |
developer made the decision." and I'm | |
1061 | |
00:38:49,720 --> 00:38:51,610 | |
like, "Where? Where's the ticket?" and he's | |
1062 | |
00:38:51,610 --> 00:38:53,380 | |
like, "Forget it. No problem. You already | |
1063 | |
00:38:53,380 --> 00:38:55,060 | |
made it." And then, I realized that he | |
1064 | |
00:38:55,060 --> 00:38:57,570 | |
created the chat - the customer. And, [he] | |
1065 | |
00:38:57,570 --> 00:39:00,340 | |
invited developers there. And, they | |
1066 | |
00:39:00,340 --> 00:39:02,650 | |
started to talk there. And, I'm like - and | |
1067 | |
00:39:02,650 --> 00:39:04,600 | |
me and my managers were like - watching in | |
1068 | |
00:39:04,600 --> 00:39:06,100 | |
the tickets. And, the tickets - the amount of | |
1069 | |
00:39:06,100 --> 00:39:07,120 | |
tickets - go down. | |
1070 | |
00:39:07,120 --> 00:39:09,340 | |
The conversations stop there. But, the | |
1071 | |
00:39:09,340 --> 00:39:10,750 | |
information - but the code - is being | |
1072 | |
00:39:10,750 --> 00:39:12,820 | |
written. So, they write code. They make | |
1073 | |
00:39:12,820 --> 00:39:14,320 | |
decisions. But, we don't see what's going | |
1074 | |
00:39:14,320 --> 00:39:16,630 | |
on. And then, I talk to the customer and | |
1075 | |
00:39:16,630 --> 00:39:18,640 | |
said like, "Do you have some - you know - do | |
1076 | |
00:39:18,640 --> 00:39:20,410 | |
they talk to them?" And he's like, "Yeah. | |
1077 | |
00:39:20,410 --> 00:39:22,420 | |
What's wrong with that?" And I'm like, "Dude. | |
1078 | |
00:39:22,420 --> 00:39:25,270 | |
I told you; that's completely against our - | |
1079 | |
00:39:25,270 --> 00:39:26,890 | |
you know - our principles, our | |
1080 | |
00:39:26,890 --> 00:39:28,480 | |
philosophy." And he's like, "All right. All | |
1081 | |
00:39:28,480 --> 00:39:30,700 | |
right. I promise you. No more talking." And | |
1082 | |
00:39:30,700 --> 00:39:33,550 | |
then, again, the same. So, he just | |
1083 | |
00:39:33,550 --> 00:39:35,890 | |
opened the box. And, he ruined the whole | |
1084 | |
00:39:35,890 --> 00:39:37,600 | |
thing. So, in the end, the project failed. | |
1085 | |
00:39:37,600 --> 00:39:39,880 | |
In the end, it was nowhere, because we | |
1086 | |
00:39:39,880 --> 00:39:41,260 | |
completely lost control of the situation. | |
1087 | |
00:39:41,260 --> 00:39:42,970 | |
You know - you understand why, because | |
1088 | |
00:39:42,970 --> 00:39:44,800 | |
these people started it all. They started | |
1089 | |
00:39:44,800 --> 00:39:46,780 | |
to make decisions. And then, this - | |
1090 | |
00:39:46,780 --> 00:39:49,210 | |
we completely lost control. That's it. So, | |
1091 | |
00:39:49,210 --> 00:39:50,770 | |
the project failed, and quite - | |
1092 | |
00:39:50,770 --> 00:39:52,570 | |
Yeah. They told him like - this customer - I | |
1093 | |
00:39:52,570 --> 00:39:53,920 | |
told him like, "Look, I can't be | |
1094 | |
00:39:53,920 --> 00:39:55,510 | |
responsible anymore for anything because | |
1095 | |
00:39:55,510 --> 00:39:57,610 | |
you['re] just doing things which | |
1096 | |
00:39:57,610 --> 00:39:59,530 | |
are completely wrong. You shouldn't do | |
1097 | |
00:39:59,530 --> 00:40:01,240 | |
that. You shouldn't allow them to have | |
1098 | |
00:40:01,240 --> 00:40:03,700 | |
that conversation." So, it happened. And, | |
1099 | |
00:40:03,700 --> 00:40:05,680 | |
second question. Yes. Moderator: So, one more | |
1100 | |
00:40:05,680 --> 00:40:07,570 | |
question. What stops me from generating | |
1101 | |
00:40:07,570 --> 00:40:11,020 | |
the bugs [that] I will fix for your money? | |
1102 | |
00:40:11,020 --> 00:40:13,540 | |
What stops me from generating | |
1103 | |
00:40:13,540 --> 00:40:16,990 | |
the bugs that will get fixed for your | |
1104 | |
00:40:16,990 --> 00:40:17,860 | |
money? So, basically - | |
1105 | |
00:40:17,860 --> 00:40:19,330 | |
Yegor: Okay, yeah. That's a good question. So, what | |
1106 | |
00:40:19,330 --> 00:40:20,800 | |
stops the developer from generating - | |
1107 | |
00:40:20,800 --> 00:40:22,810 | |
while writing - the code and introducing | |
1108 | |
00:40:22,810 --> 00:40:24,970 | |
some bugs which will be fixed | |
1109 | |
00:40:24,970 --> 00:40:27,190 | |
later. And then, the developer will make | |
1110 | |
00:40:27,190 --> 00:40:28,510 | |
more money, right? That's the question. | |
1111 | |
00:40:28,510 --> 00:40:31,270 | |
Well, first of all we assign. But, we | |
1112 | |
00:40:31,270 --> 00:40:34,120 | |
assign bugs to fix not to the same | |
1113 | |
00:40:34,120 --> 00:40:35,560 | |
people who introduced them. So, we | |
1114 | |
00:40:35,560 --> 00:40:37,810 | |
randomly assign tickets. So, let's say | |
1115 | |
00:40:37,810 --> 00:40:39,490 | |
you're the developer. So, you create a | |
1116 | |
00:40:39,490 --> 00:40:41,050 | |
piece of code. And, in that piece of code | |
1117 | |
00:40:41,050 --> 00:40:42,880 | |
there is some bugs intentionally made. | |
1118 | |
00:40:42,880 --> 00:40:44,860 | |
Okay, you made them intentionally. But, | |
1119 | |
00:40:44,860 --> 00:40:46,510 | |
then these bugs will be fixed by that | |
1120 | |
00:40:46,510 --> 00:40:48,370 | |
person, that person, and that person - randomly. | |
1121 | |
00:40:48,370 --> 00:40:50,680 | |
So, there is no real reason for the | |
1122 | |
00:40:50,680 --> 00:40:52,510 | |
developer to introduce bugs. Like, there's | |
1123 | |
00:40:52,510 --> 00:40:55,860 | |
no, I haven't seen that any, like never. So - | |
1124 | |
00:40:55,860 --> 00:40:59,770 | |
Say again? [listens to audience member speaking inaudibly, then audience laughs] Well, unless they have a secret | |
1125 | |
00:40:59,770 --> 00:41:02,830 | |
chat. But, *we* assign tickets. So, they | |
1126 | |
00:41:02,830 --> 00:41:04,570 | |
don't make this decision. We always give | |
1127 | |
00:41:04,570 --> 00:41:06,400 | |
them tickets. We say like, "Hey, Jeff. This | |
1128 | |
00:41:06,400 --> 00:41:08,110 | |
is your ticket." You can't choose it. I | |
1129 | |
00:41:08,110 --> 00:41:09,760 | |
mean, you can say, "No, give me that | |
1130 | |
00:41:09,760 --> 00:41:12,430 | |
one." It's always randomly only always | |
1131 | |
00:41:12,430 --> 00:41:13,900 | |
to random people. That's how we actually | |
1132 | |
00:41:13,900 --> 00:41:15,700 | |
solve the problem with no experts at all. | |
1133 | |
00:41:15,700 --> 00:41:18,040 | |
So, because every time we give | |
1134 | |
00:41:18,040 --> 00:41:20,220 | |
bugs and troubles to differ | |
1135 | |
00:41:20,220 --> 00:41:21,480 | |
people. So, they always have to | |
1136 | |
00:41:21,480 --> 00:41:23,610 | |
understand the new piece of code. So, | |
1137 | |
00:41:23,610 --> 00:41:24,900 | |
there [is] always something in the code | |
1138 | |
00:41:24,900 --> 00:41:26,790 | |
base - something new arrived into the | |
1139 | |
00:41:26,790 --> 00:41:29,790 | |
person, and it helps. So, I haven't | |
1140 | |
00:41:29,790 --> 00:41:31,500 | |
seen that. Moderator: Okay, great. | |
1141 | |
00:41:31,500 --> 00:41:34,700 | |
Another question: So, how do you decide | |
1142 | |
00:41:34,700 --> 00:41:37,290 | |
how much do you pay for a particular | |
1143 | |
00:41:37,290 --> 00:41:39,870 | |
task? Yegor: Well, like I said, we always give the | |
1144 | |
00:41:39,870 --> 00:41:42,240 | |
same. We say in the same budget. Let's say | |
1145 | |
00:41:42,240 --> 00:41:45,810 | |
one hour, and one hour means multiplied | |
1146 | |
00:41:45,810 --> 00:41:48,360 | |
by the hourly rate of the developer. So, | |
1147 | |
00:41:48,360 --> 00:41:50,100 | |
we have like a group of developers. Let's | |
1148 | |
00:41:50,100 --> 00:41:52,410 | |
say 20 people in the project. And, that | |
1149 | |
00:41:52,410 --> 00:41:54,180 | |
person is 50 bucks an hour, or that | |
1150 | |
00:41:54,180 --> 00:41:56,250 | |
person is 30 bucks an hour. So, and then, | |
1151 | |
00:41:56,250 --> 00:41:58,740 | |
we have a bug for one hour. So, we | |
1152 | |
00:41:58,740 --> 00:42:00,510 | |
randomly select the person and give it | |
1153 | |
00:42:00,510 --> 00:42:03,200 | |
to that person. Okay, it's gonna cost $50. | |
1154 | |
00:42:03,200 --> 00:42:04,880 | |
[audience member speaking inaudibly] | |
1155 | |
00:42:04,880 --> 00:42:07,410 | |
Yeah, like, I just explained before. So, we just | |
1156 | |
00:42:07,410 --> 00:42:10,080 | |
always say one hour. We don't know - we | |
1157 | |
00:42:10,080 --> 00:42:12,150 | |
don't estimate. We don't care. So, we just | |
1158 | |
00:42:12,150 --> 00:42:13,950 | |
say one hour. Well, in our case, it's half | |
1159 | |
00:42:13,950 --> 00:42:16,080 | |
an hour. We try it - one hour - but, now we | |
1160 | |
00:42:16,080 --> 00:42:17,760 | |
use 30 minutes. So, it's always half an | |
1161 | |
00:42:17,760 --> 00:42:21,540 | |
hour. And, we allow developers to cheat and | |
1162 | |
00:42:21,540 --> 00:42:24,360 | |
return back the code - return back to fix | |
1163 | |
00:42:24,360 --> 00:42:27,180 | |
not completely fixed. So, sometimes we | |
1164 | |
00:42:27,180 --> 00:42:31,350 | |
have bugs which takes an oh, five, seven, | |
1165 | |
00:42:31,350 --> 00:42:33,660 | |
ten steps. So, let's say, I create - there's | |
1166 | |
00:42:33,660 --> 00:42:36,420 | |
a bug. I assign it to you. You fix it not | |
1167 | |
00:42:36,420 --> 00:42:38,160 | |
completely. You just say, "Hey, I just - for | |
1168 | |
00:42:38,160 --> 00:42:40,500 | |
example - I introduced the unit test which | |
1169 | |
00:42:40,500 --> 00:42:42,870 | |
which proves that this is not the | |
1170 | |
00:42:42,870 --> 00:42:43,410 | |
problem." | |
1171 | |
00:42:43,410 --> 00:42:45,060 | |
But, I don't know what the problem is. So, | |
1172 | |
00:42:45,060 --> 00:42:47,520 | |
I introduce new unit test. And, I put a | |
1173 | |
00:42:47,520 --> 00:42:49,200 | |
new marker saying like, "Hey, please | |
1174 | |
00:42:49,200 --> 00:42:51,240 | |
investigate further, because it looks | |
1175 | |
00:42:51,240 --> 00:42:52,950 | |
like - here's the new unit test but - it | |
1176 | |
00:42:52,950 --> 00:42:54,540 | |
doesn't prove that the bug is there." I've | |
1177 | |
00:42:54,540 --> 00:42:56,400 | |
returned that code back. The new | |
1178 | |
00:42:56,400 --> 00:42:58,470 | |
developer picks up the marker and tries | |
1179 | |
00:42:58,470 --> 00:43:00,930 | |
again. Again, it can [be] that the developer | |
1180 | |
00:43:00,930 --> 00:43:03,060 | |
can't do anything. Again, the new code comes | |
1181 | |
00:43:03,060 --> 00:43:04,830 | |
into master branch. The new developer is | |
1182 | |
00:43:04,830 --> 00:43:06,540 | |
assigned. A new developer is assigned. So, | |
1183 | |
00:43:06,540 --> 00:43:07,890 | |
we can jump back and forth, back and | |
1184 | |
00:43:07,890 --> 00:43:09,960 | |
forth, on these iterations, sometimes for | |
1185 | |
00:43:09,960 --> 00:43:11,880 | |
ten times, and eventually that will be | |
1186 | |
00:43:11,880 --> 00:43:13,920 | |
fixed. So, the total cost of the bug will | |
1187 | |
00:43:13,920 --> 00:43:15,780 | |
be 10 multiplied by 30 minutes. There's | |
1188 | |
00:43:15,780 --> 00:43:18,510 | |
gonna be 300 minutes - the total budget. | |
1189 | |
00:43:18,510 --> 00:43:20,910 | |
But, it's going to be 10 increments. 10 | |
1190 | |
00:43:20,910 --> 00:43:23,070 | |
Increments with 10 people, which is a way | |
1191 | |
00:43:23,070 --> 00:43:24,570 | |
more manageable situation | |
1192 | |
00:43:24,570 --> 00:43:27,570 | |
comparing to one person [spending] 300 | |
1193 | |
00:43:27,570 --> 00:43:29,880 | |
minutes. "Hey, here's your task work for | |
1194 | |
00:43:29,880 --> 00:43:32,060 | |
300 minutes" which means, what, five hours. | |
1195 | |
00:43:32,060 --> 00:43:33,380 | |
Maybe, | |
1196 | |
00:43:33,380 --> 00:43:35,120 | |
you will fix it. In our case, it's going to be | |
1197 | |
00:43:35,120 --> 00:43:37,190 | |
ten people touching that problem. Ten | |
1198 | |
00:43:37,190 --> 00:43:39,920 | |
people. Eventually, the person number ten | |
1199 | |
00:43:39,920 --> 00:43:40,910 | |
will fix it. | |
1200 | |
00:43:40,910 --> 00:43:43,190 | |
Which one is manageable - more manageable? | |
1201 | |
00:43:43,190 --> 00:43:46,310 | |
Obviously, the - our approach. So, we don't | |
1202 | |
00:43:46,310 --> 00:43:47,990 | |
estimate. We just always say thirty | |
1203 | |
00:43:47,990 --> 00:43:49,430 | |
minutes, half an hour, whatever. You do | |
1204 | |
00:43:49,430 --> 00:43:50,930 | |
half an hour, do something, do something, | |
1205 | |
00:43:50,930 --> 00:43:53,150 | |
do something. And then, we iterate, iterate, | |
1206 | |
00:43:53,150 --> 00:43:56,750 | |
iterate. Moderator: Okay, great. And what about "Ops" | |
1207 | |
00:43:56,750 --> 00:43:58,280 | |
now what about operations and | |
1208 | |
00:43:58,280 --> 00:44:00,040 | |
infrastructure? How do you pay for that? | |
1209 | |
00:44:00,040 --> 00:44:04,010 | |
Yegor: Well for DevOps, it's kind of something | |
1210 | |
00:44:04,010 --> 00:44:06,770 | |
we haven't touched like seriously. So, I'm | |
1211 | |
00:44:06,770 --> 00:44:08,780 | |
not sure how it's gonna work for DevOps. | |
1212 | |
00:44:08,780 --> 00:44:10,430 | |
For the current situation with DevOps | |
1213 | |
00:44:10,430 --> 00:44:12,050 | |
where people actually - you know - configure | |
1214 | |
00:44:12,050 --> 00:44:14,270 | |
servers and install something on servers. | |
1215 | |
00:44:14,270 --> 00:44:16,400 | |
So, my answer is, "I don't know." | |
1216 | |
00:44:16,400 --> 00:44:18,800 | |
We'll try. We haven't touched that area | |
1217 | |
00:44:18,800 --> 00:44:20,840 | |
yet. Maybe with the immutable servers - | |
1218 | |
00:44:20,840 --> 00:44:22,250 | |
which i think is gonna be the future - | |
1219 | |
00:44:22,250 --> 00:44:24,350 | |
when we'll have mutable servers, and then | |
1220 | |
00:44:24,350 --> 00:44:26,120 | |
the entire infrastructure will be kept | |
1221 | |
00:44:26,120 --> 00:44:28,130 | |
in the in the repository as a code, and | |
1222 | |
00:44:28,130 --> 00:44:30,320 | |
everything will happen in the code, and | |
1223 | |
00:44:30,320 --> 00:44:31,340 | |
then the infrastructure will be | |
1224 | |
00:44:31,340 --> 00:44:32,870 | |
automatically deployed to production | |
1225 | |
00:44:32,870 --> 00:44:35,930 | |
like in one-click, then probably the | |
1226 | |
00:44:35,930 --> 00:44:38,030 | |
DevOps will be equal to developer. And | |
1227 | |
00:44:38,030 --> 00:44:39,710 | |
then, the problem will be solved. But, | |
1228 | |
00:44:39,710 --> 00:44:41,330 | |
right now it's more like people with the | |
1229 | |
00:44:41,330 --> 00:44:45,620 | |
SSH consoles. So, it's difficult to do. | |
1230 | |
00:44:45,620 --> 00:44:48,170 | |
Moderator: If the server is down, the spacer duty also | |
1231 | |
00:44:48,170 --> 00:44:50,960 | |
just open a ticket? Yegor: Well, in most cases. Yeah, in | |
1232 | |
00:44:50,960 --> 00:44:52,820 | |
most cases of the server is down, we also | |
1233 | |
00:44:52,820 --> 00:44:54,440 | |
open the ticket. We also open the ticket | |
1234 | |
00:44:54,440 --> 00:44:56,090 | |
and say, "Hey, somebody fixd that." And, | |
1235 | |
00:44:56,090 --> 00:44:57,800 | |
sometimes - it's a good question - | |
1236 | |
00:44:57,800 --> 00:44:59,270 | |
sometimes, we need that ticket to be | |
1237 | |
00:44:59,270 --> 00:45:01,400 | |
fixed now instead of in five hours. And, | |
1238 | |
00:45:01,400 --> 00:45:04,070 | |
[in] that case, we increase the budget. We just | |
1239 | |
00:45:04,070 --> 00:45:05,600 | |
say, "It's not 30 minutes. It's two hours." | |
1240 | |
00:45:05,600 --> 00:45:07,280 | |
Even though we understand it's a work | |
1241 | |
00:45:07,280 --> 00:45:09,230 | |
for five minutes or 15 minutes. We | |
1242 | |
00:45:09,230 --> 00:45:11,810 | |
just multiply - we boost - the budget. We say | |
1243 | |
00:45:11,810 --> 00:45:14,120 | |
like "multiple" | |
1244 | |
00:45:14,120 --> 00:45:15,920 | |
and it means like the developer will | |
1245 | |
00:45:15,920 --> 00:45:17,420 | |
pick it up immediately and will try to | |
1246 | |
00:45:17,420 --> 00:45:19,670 | |
do everything to close because the | |
1247 | |
00:45:19,670 --> 00:45:21,320 | |
budget is way higher. So, we can - we | |
1248 | |
00:45:21,320 --> 00:45:23,570 | |
actually motivate by money which is [a] | |
1249 | |
00:45:23,570 --> 00:45:24,380 | |
really good thing. | |
1250 | |
00:45:24,380 --> 00:45:26,210 | |
So, most people say that money is not a | |
1251 | |
00:45:26,210 --> 00:45:27,800 | |
motivator. We completely disagree with | |
1252 | |
00:45:27,800 --> 00:45:30,110 | |
that. Money is the greatest motivator. | |
1253 | |
00:45:30,110 --> 00:45:32,240 | |
That is the greatest motivator ever | |
1254 | |
00:45:32,240 --> 00:45:34,940 | |
invented in human history. We don't | |
1255 | |
00:45:34,940 --> 00:45:36,260 | |
need anything else. We don't need [these] - | |
1256 | |
00:45:36,260 --> 00:45:37,940 | |
you know - tennis tables in the office. We | |
1257 | |
00:45:37,940 --> 00:45:39,290 | |
don't need these coffee machines. We need | |
1258 | |
00:45:39,290 --> 00:45:41,480 | |
money. Just give money to people in a | |
1259 | |
00:45:41,480 --> 00:45:43,010 | |
clear way so the developers will | |
1260 | |
00:45:43,010 --> 00:45:44,750 | |
understand why the money coming there, | |
1261 | |
00:45:44,750 --> 00:45:46,850 | |
how to increase the amount of money. I | |
1262 | |
00:45:46,850 --> 00:45:48,830 | |
don't need this soft skills. I don't - I | |
1263 | |
00:45:48,830 --> 00:45:50,750 | |
don't need to please my manager. I just | |
1264 | |
00:45:50,750 --> 00:45:53,270 | |
need to close more tickets. This is, I | |
1265 | |
00:45:53,270 --> 00:45:54,950 | |
think, the way more productive - you know - | |
1266 | |
00:45:54,950 --> 00:45:56,960 | |
approach to motivating people. There's | |
1267 | |
00:45:56,960 --> 00:46:00,920 | |
the question here. Maybe, yeah. [audience member speaks inaudibly] Taxes? Well, | |
1268 | |
00:46:00,920 --> 00:46:03,140 | |
we pay taxes. Programmers pay taxes. So, | |
1269 | |
00:46:03,140 --> 00:46:04,580 | |
programmers want to send money to - | |
1270 | |
00:46:04,580 --> 00:46:06,050 | |
programmers, they pay all their own | |
1271 | |
00:46:06,050 --> 00:46:09,800 | |
taxes, of course. Yeah. Moderator: How much do you pay | |
1272 | |
00:46:09,800 --> 00:46:12,470 | |
managers and how well for managers? Yegor: We | |
1273 | |
00:46:12,470 --> 00:46:14,630 | |
pay in the same, well, we also pay by task. | |
1274 | |
00:46:14,630 --> 00:46:18,380 | |
And so, the more tasks a manager is | |
1275 | |
00:46:18,380 --> 00:46:20,660 | |
managing, is assigning, closing, assigning, | |
1276 | |
00:46:20,660 --> 00:46:22,550 | |
closing, the more money the manager gets. | |
1277 | |
00:46:22,550 --> 00:46:24,260 | |
So, we're always trying to attach | |
1278 | |
00:46:24,260 --> 00:46:26,720 | |
everybody in the project for results. So, | |
1279 | |
00:46:26,720 --> 00:46:29,090 | |
the more the project produces - the more | |
1280 | |
00:46:29,090 --> 00:46:31,640 | |
we deliver to the customer more code - the | |
1281 | |
00:46:31,640 --> 00:46:33,650 | |
more everybody - you know - gets. And, the | |
1282 | |
00:46:33,650 --> 00:46:35,120 | |
customers appreciate it. And, we build | |
1283 | |
00:46:35,120 --> 00:46:37,040 | |
them like that. So, in | |
1284 | |
00:46:37,040 --> 00:46:40,250 | |
the end of the week, end of | |
1285 | |
00:46:40,250 --> 00:46:41,720 | |
the month, we just show the customer the | |
1286 | |
00:46:41,720 --> 00:46:44,300 | |
total amount of tasks we closed, bugs we | |
1287 | |
00:46:44,300 --> 00:46:46,550 | |
solved, and this is the amount of money the | |
1288 | |
00:46:46,550 --> 00:46:50,360 | |
customer pays. Yeah. Moderator: Okay. Who is breaking | |
1289 | |
00:46:50,360 --> 00:46:53,510 | |
up work in chunks? What if the chunk is | |
1290 | |
00:46:53,510 --> 00:46:55,640 | |
too big? Yegor: Well, I just explained that. I | |
1291 | |
00:46:55,640 --> 00:46:57,230 | |
explained that. We just - you know - we just | |
1292 | |
00:46:57,230 --> 00:46:58,760 | |
give the full chunk to [the] developer and | |
1293 | |
00:46:58,760 --> 00:47:00,410 | |
then we allow [the] developer to cheat. So, | |
1294 | |
00:47:00,410 --> 00:47:02,750 | |
that's how we break it. Moderator: Do you even have | |
1295 | |
00:47:02,750 --> 00:47:04,160 | |
permanent employees in the company, | |
1296 | |
00:47:04,160 --> 00:47:08,090 | |
except yourself? Yegor: Well, we - I'm, in general, | |
1297 | |
00:47:08,090 --> 00:47:10,160 | |
against permanent employment. I think | |
1298 | |
00:47:10,160 --> 00:47:11,840 | |
it's a modern form of | |
1299 | |
00:47:11,840 --> 00:47:12,320 | |
slavery. | |
1300 | |
00:47:12,320 --> 00:47:15,380 | |
So, this long-term employment is, | |
1301 | |
00:47:15,380 --> 00:47:17,960 | |
well, it's really good for lazy | |
1302 | |
00:47:17,960 --> 00:47:19,700 | |
developers. It's really, it's | |
1303 | |
00:47:19,700 --> 00:47:21,680 | |
perfect. Because, like I said, no matter | |
1304 | |
00:47:21,680 --> 00:47:23,660 | |
what you do, you get the money. But, it's | |
1305 | |
00:47:23,660 --> 00:47:25,160 | |
not really good for people who are - you | |
1306 | |
00:47:25,160 --> 00:47:27,790 | |
know - who are | |
1307 | |
00:47:27,800 --> 00:47:30,260 | |
self-motivated, who are interested to | |
1308 | |
00:47:30,260 --> 00:47:32,480 | |
grow, who wants to get pleasure from the | |
1309 | |
00:47:32,480 --> 00:47:34,190 | |
work. So, this full time employment - | |
1310 | |
00:47:34,190 --> 00:47:36,230 | |
long-term employment - is really not | |
1311 | |
00:47:36,230 --> 00:47:37,820 | |
productive. It's everywhere right now. All | |
1312 | |
00:47:37,820 --> 00:47:40,220 | |
companies pay that. And - you know - it's | |
1313 | |
00:47:40,220 --> 00:47:42,140 | |
really difficult to fight against that. | |
1314 | |
00:47:42,140 --> 00:47:43,910 | |
But, I think the future is different. I | |
1315 | |
00:47:43,910 --> 00:47:45,980 | |
think, in the future, we'll get more money | |
1316 | |
00:47:45,980 --> 00:47:47,810 | |
per hour, but, we'll get | |
1317 | |
00:47:47,810 --> 00:47:49,880 | |
paid for results. I think that's the | |
1318 | |
00:47:49,880 --> 00:47:51,860 | |
future for professional development - not | |
1319 | |
00:47:51,860 --> 00:47:53,030 | |
what we have right now. What we have | |
1320 | |
00:47:53,030 --> 00:47:54,770 | |
right now is, like I'm saying, it's modern | |
1321 | |
00:47:54,770 --> 00:47:58,160 | |
slavery of the 21st century. It's gonna | |
1322 | |
00:47:58,160 --> 00:47:59,930 | |
go. Moderator: Okay, and the last question. From | |
1323 | |
00:47:59,930 --> 00:48:02,450 | |
me actually to the audience. Yegor: Yeah. Moderator: How many | |
1324 | |
00:48:02,450 --> 00:48:07,450 | |
people agree with this approach? Yegor: See? 50%. | |
1325 | |
00:48:07,450 --> 00:48:10,250 | |
Moderator: Thank you, Yegor. That was awesome. Yegor: Thank | |
1326 | |
00:48:10,250 --> 00:48:11,760 | |
you very much. | |
1327 | |
00:48:11,760 --> 00:48:19,730 | |
[Applause] | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment