-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfeed.xml
686 lines (425 loc) · 48.5 KB
/
feed.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>some writings from a humblelistener</title>
<description></description>
<link>https://humblelistener.github.io/</link>
<atom:link href="https://humblelistener.github.io/feed.xml" rel="self" type="application/rss+xml"/>
<pubDate>Sat, 26 May 2018 08:56:16 +0800</pubDate>
<lastBuildDate>Sat, 26 May 2018 08:56:16 +0800</lastBuildDate>
<generator>Jekyll v3.8.2</generator>
<item>
<title>Recipe for High-Performance Teams</title>
<description><h1 id="high-performance-teams">High-Performance Teams</h1>
<p>Recently on LinkedIn, one of my past colleagues posted a question that made me share my beliefs and learnings from being part of as well as creating, tendering and fostering high-performance teams.</p>
<p>Following was my answer to the post. It seems to have resonated with quite a few people.</p>
<blockquote>
<p>Give a clear goal, provide autonomy in execution, create a psychologically safe environment, build a sense of team and support them in their pursuit. Do this and your team will get anything that they set their minds on.</p>
</blockquote>
<p>I called this my mantra for high-performance teams.</p>
<p>Given it resonated with quite a few people, I thought there is worth in further explaining my thoughts about each of these parameters in creating a high-performance team, so as to validate my learnings as well as help others to align what they understood and benefit each other.</p>
<h2 id="word-of-caution">Word of caution</h2>
<p>You know what, it is not that you can create such teams just like that - like one day I walk into my office and with my new realisation over the weekend reading a LinkedIn post, I will today create a high-performance team. We all know that it does not work that way.</p>
<p>So, let’s get to it.</p>
<h2 id="the-significance-of-clear-goal">The Significance of Clear Goal</h2>
<p>At the crux of any high-performance team is the goal. Without a goal, the team need not exist. But where it gets tricky and often gets lost is making the goal clearly understandable for everyone.</p>
<p>I personally find the monetary goals to be a very tricky but common practice for businesses. Sometimes they don’t get accompanied by any context that emphasises on what the business values.</p>
<p>I don’t think organisations lack context, I think they just fail to make it clear.</p>
<p>Consider this goal; <em>Generate revenue of $500,000 in the next one year</em>, set by the company that is scaling and dreaming of exponential growth. It lacks crucial context that guides a team to make decisions.</p>
<p>While it might be obvious for the higher ups in the business that it is not acceptable to achieve it by taxing existing customers, unless this is clearly stated and communicated, chances are people are going to miss it. And we all know Murphy’s law is so true.</p>
<p>And there is this that I keep repeating to my business people,</p>
<blockquote>
<p>we all hire smart people to solve problems in our business, if we are not making the problem obvious, damn! they are smart people and they are still going to solve <em>some problem</em>. You can only pray that the problem they solve helps the business.</p>
</blockquote>
<p>So spend the time to ask why to business outcomes, when people want something, they have reasons. Sometimes it is easy for them to assume people know them or just that they are obvious.</p>
<p>In my experience, <em>It surely pays to reason out and comprehensively describe the purpose of the goal.</em> At the end of day <em>people who work to achieve the goal take decisions every day in an effort to help achieve it and you don’t want to leave there decisions subject to interpretation</em>.</p>
<h2 id="autonomy-in-execution">Autonomy in Execution</h2>
<p>Once a goal is clearly defined, how a team executes this goal should be completely under the control of the team.</p>
<p>To make a sense of it, let’s take a step back,
Gone or those days where people are considered homogeneous resource. Successful leaders have learned that every individual is unique, each have their own strengths, weaknesses, opinions, preferences, personalities, values and culture.</p>
<p>Similarly, when a group of individuals come together, depending on the culture, background, individual qualities and personalities norms are formed. While they need to be fostered and cured towards a healthy culture, it is fairly obvious that the strengths and weakness of these teams vary.</p>
<p>So, a similar problem may require dealing different differently with different teams.</p>
<blockquote>
<p>Individual or team, they have unique qualities and personalities. To be successful one has to play to their strength. Giving that freedom to play any game for the personalities strength is what autonomy in execution is about.</p>
</blockquote>
<p>Care has to be taken to define the boundaries of Autonomy. In my experience, I found the boundaries of the problem has to be clearly defined as part of defining and discovering the problem. While autonomy is about execution, it should not be misunderstood as autonomy to negotiate the value of the organisation or flexing the value of the organisation to the team’s qualities.</p>
<p>It is important to understand that the companies have its own purposes, value and culture. While they ideally are aligned with team’s values, a learning organisation will have forums and channels to continuously align them. Given that, an autonomous team should only ensure such misalignments are surfaced effectively while defining and discovering the problem.</p>
<p>I have seen where an incorrect understanding of this leading to teams becoming rogue - taking decisions and not being transparent in communication. They are very dangerous.</p>
<p>If Uncle Ben were a team lead, the saying will go as - <em>with great autonomy comes a great responsibility.</em></p>
<h2 id="psychologically-safe-environment">Psychologically Safe Environment</h2>
<p>Have you been in a situation like this before,</p>
<p>I used to have a colleague who constantly establishes his superiority in conversations. Every time after we finished a problem-solving discussion or coding session, I always felt insignificant or plain dumb. I felt agitated and frustrated coming out of the conversations. I, in fact, can see how silly I have been and see how they are totally unlike me.</p>
<p>I took me a while to understand that there were several forces playing in such sessions. I seem to be constantly getting caught with trivial parts of conversation where superiority and sense of pride were being manipulated triggering by my survival instincts and threat responses that I lost my nature and tried to hold ground for things that are petty and useless.</p>
<p>While in the hindsight, I consider such cultural misfits should be straight away avoided in teams - and organisations should hire for culture, it could have well been the organisations set up and incentivisation that lead to this.</p>
<p>It is important to keep in mind that in any situation <em>a team strength should be greater than the sum of individuals.</em> Clearly not how it was with my experience above.</p>
<p>Organisations and hiring managers should also take a note that there are cultures wherein educational systems could lead to this behavior, e.g., overly competitive individuals may have arisen from school systems that force rank their students and award individuals based on those rankings. These practices – ingrained at an early age – are many times detrimental to team-playing behavior. So in such environments, organisation should facilitate a healthy coaching, mentoring and team developments programs as part of bringing individuals upto speed. Doing so ends up as win-win for both the organisation and the inviduals.</p>
<p>Personally, it took me a while to handle such personalities. But I don’t think they are necessary for the modern workplace - the threat response, the animal instinct. We want individuals to be able to give their best - threats and animal instincts are not how we want to stimulate them.</p>
<p><em>It is true that animal instincts and threats do enable living beings to deliver beyond their normal capacity like a Gazelle escaping a Leopard. One has to keep in mind though that Gazel and Leopard do not have any commonality in their goal nor do they work together.</em></p>
<p>Having members of the team playing like that means that the net strength of a team falls below the sum of the individual strengths. This quite obviously does not help build a high-performance team.</p>
<p>So, what do we do? It is worth ensuring that people are not threatened in their workplace. They need to feel comfortable to share their thoughts, their opinions without feeling that they are manipulated of made fun of or being noted/ignored. They need to be able to present themselves without any concern, fear or worry. Only then they can bring their best.</p>
<p>It definitely requires moderation and coaching especially if this is fairly new to the team or organisation, It does take its norming time between members of the team.</p>
<p>Hiring for culture and Leaders in the organisation have an important role in making it possible.</p>
<blockquote>
<p>A psychologically safe team is one where _the net strength of a team is not just greater than the sum of their individual strengths but where it can even be exponential. Diversity plays an important role in enabling this exponential strength.</p>
</blockquote>
<h2 id="building-a-sense-of-team">Building a sense of team</h2>
<p>Providing Psycologically safe environment is a start. It is like a tendered and a cured ground where diverse seeds are just starting to grow. They need moderation, they need to understand their roles in the game. They need to know that they are going to hunt together. They need to form that relationship. They need to understand each other. They need to be able to pick up, what is to be ignored when said by an individual vs another. Learn and adapt to understand how individuals express their thoughts, what is their norm etc. This happens in every relationship but teams are not an exception.</p>
<p>If not supported, they will still form given a clear goal, good environment and good hiring practice, but it will take its own time. This stage is pretty much a curing stage - where it is only about enabling the teams.</p>
<p>Scrum and Agile processes excelled in these areas at the beginning of that era. Team building exercises, team outings, social functions, ceremonies help build them. They expedite the process of forming and norming.</p>
<p>An observer plays an important role in understanding the stages of forming and norming and facilitating that process - commonly labelled as a responsibility of scrum master or agile coach.</p>
<blockquote>
<p>When they are ready, they know how to hunt as a pack. They will know how to get work done leveraging individuals strengths and organise themselves around it.</p>
</blockquote>
<h2 id="supporting-a-team-in-their-pursuit">Supporting a team in their Pursuit</h2>
<p>Here is a role of leader, who has established a clear goal and set up a team that is pursuing it. Like any story goes, the team goes through challenges. Challenges that sometimes question the purpose of the team, sometimes test the fabric of togetherness in the team, that sometimes tries to swallow the team.</p>
<p>They require help. Sometimes they know exactly what they need, sometimes they don’t. Sometimes, they can explain what they need and sometimes they can’t explain it clearly. Even sometimes what they think they want can’t be taken at a face value.</p>
<p>This is where a Leaders ability comes to test. Like a child, they sometimes look up for help. I knew a leader who is just amazing in this quality. He plays an entertainers role in the team and fixes things.</p>
<p>Let me tell about him. We were working on fix bid time sensitive project at that time. The team has been awesome and getting things done at a great pace. But as pressure against the delivery date started building, there was a sense of tension that built up on the floor. You can sense people getting frustrated, tired and are going to break. This Manager who has least knowledge about the technology, business domain that we are working on was very innovative. He started involving in the day to day ceremonies more activity, bringing humour and fun was the only objective he played. Within the matter of a few weeks, there were many random, impromptu treats and celebrations and fun.</p>
<p>While there were reservations at the beginning on how it was not helpful, at the end everyone enjoyed it. In the hindsight, It helped loosen the pressure, relieved tension and let the team keep firing at the rate it was doing without breaking down. Overall the team delivered a high value leading to a multi-million business to the organisation.</p>
<p>It taught me that there is not just one way to support a team. The narrative is important when the team is struggling - they need support and the leaders support them.</p>
<p>Here are few things, I have seen or did to support a team,</p>
<ul>
<li>Be entertainers when tension builds up in the team</li>
<li>Support by providing training</li>
<li>Support by providing some perks and incentives to keep them motivated</li>
<li>Bringing external experts to help the situation</li>
<li>Organising team activities</li>
<li>Moderating incentives and KPI’s</li>
<li>Most of all staying and checking in with the team.</li>
<li>Ensuring they understand the importance of work they do for the business</li>
<li>Share motivating and tell them how valuable they are for the organisation</li>
<li>Negotiating the scope and outcomes</li>
</ul>
<p>This list is not definitely exhaustive.</p>
<h2 id="do-anything-that-they-set-their-minds-on">Do Anything That They Set Their Minds On</h2>
<p>This may sound like a bit exaggeration, I agree, but you know what we are humans. We have learnt in several times in the past that nothing is impossible.</p>
<p>We just need the time, effort, support and the environment to get there. Sometimes they are viable and sometimes they are not viable. That is all the difference is.</p>
<p>Let’s go conquer!</p>
<h3 id="a-piece-of-request">A Piece of Request</h3>
<p>If you find any piece of this write up doesn’t stack up, confusing or not clear, please let me know. I am happy to learn, correct, explain, understand and ensure the content written makes sense.</p>
</description>
<pubDate>Wed, 23 May 2018 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2018/05/23/Recipe-for-High-Performance-Teams/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2018/05/23/Recipe-for-High-Performance-Teams/</guid>
<category>leadership</category>
<category>teams</category>
</item>
<item>
<title>Organisations existence</title>
<description><h1 id="organisations-existence">Organisations existence</h1>
<p>Most of the organisations seem to exist to fill the gap in helping people and world solve a particular problem - if it is not an obvious problem, it then becomes the organisations role to educate the existence the problem which they solve. I call it their reason for existence.</p>
<p>To give some simple examples,</p>
<h3 id="linkedin">LinkedIn</h3>
<p>The follow is a quote from <a href="https://careers.linkedin.com/culture-and-values">LinkedIn’s culture and values page</a>.</p>
<p><em>Creating a digital map of the global economy to connect talent with opportunity at massive scale.</em></p>
<h3 id="twitter">Twitter</h3>
<p>They call it their <a href="https://about.twitter.com/company">mission</a>.
<em>Our mission: To give everyone the power to create and share ideas and information instantly, without barriers.</em></p>
<h3 id="google">Google</h3>
<p>Mission is what they call it (interestingly <a href="https://www.google.com.au/search?q=google+about&amp;rlz=1C5CHFA_enAU732AU732&amp;oq=google+about&amp;aqs=chrome.0.0l6.3533j0j4&amp;sourceid=chrome&amp;ie=UTF-8">it is accessible only from google search</a>),
<em>Google’s mission is to organize the world’s information and make it universally accessible and useful.</em></p>
<h2 id="how-do-organisations-approach-it">How do organisations approach it</h2>
<p>Every organisation has different ways to define their purpose. Some call them vision, some mission, some simply put together a statement.</p>
<p>I found how my previous employer <a href="www.mindtree.com">Mindtree</a> did it quiet interesting.</p>
<p>They used to have a vision statement, a value statement and a mission derived from the vision statement that addresses the medium term.
Back in the days, then chairman <a href="https://www.linkedin.com/in/ashok-soota-7298/">Respected Mr. Ashok Soota</a> used to walk every employee through the “Vision, mission &amp; values” session.</p>
<p>Recently they seem to have alignt to Mission and Values.</p>
<h3 id="mindtrees-mission">Mindtree’s mission</h3>
<p>Sounds a bit too vague to me.
<em>We engineer meaningful technology solutions to help businesses and societies flourish.</em></p>
<h3 id="mindtrees-values">Mindtree’s values</h3>
<p><em>COLLABORATIVE SPIRIT
Mindtree believes in developing true partnerships. We foster a collegial environment where individual perspectives are respected and honest dialogue is expected.</em></p>
<p><em>UNRELENTING DEDICATION
Mindtree is driven to meet client needs with determination and grit. We embrace tough challenges and do not rest until the problem is solved, the right way.</em></p>
<p><em>EXPERT THINKING
Mindtree brings robust skills and forward looking perspectives to solve customer challenges. We use proven knowledge to make recommendations and provide expert guidance to our customers.</em></p>
<h3 id="one-last-old-school-mission-vision-and-values-statement-from-the-very-old-bbc">One last old school mission, vision and values statement from the very old BBC</h3>
<p>Mission
<em>To enrich people’s lives with programmes and services that inform, educate and entertain.</em></p>
<p>Vision
<em>To be the most creative organisation in the world.</em></p>
<h2 id="trend-towards-sustainability-and-social-responsibility">Trend towards sustainability and social responsibility</h2>
<p>Corporate social responsibility and sutainable business practice are other differentiators that organisations bring to the market.</p>
<p>To me, the mean more - they mean as some wiseman once pointed out,</p>
<p><em>People don’t just buy products anymore, they buy into values they represent.</em></p>
<h2 id="what-do-workers-buy-in">What do workers buy in?</h2>
<p>If values are the one that are bought in for even just day do day products, what about the work.</p>
<p><strong>To me, I am spending best part of my life working, I better have a clear and convincing buy in to the business - its mission and values it represents.</strong></p>
<p>Else it is as good as calling it <em>a life wasted.</em></p>
</description>
<pubDate>Mon, 10 Jul 2017 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2017/07/10/Organisations-existene/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2017/07/10/Organisations-existene/</guid>
<category>organisation mission</category>
<category>organisation vision</category>
</item>
<item>
<title>Beta Environment configuration on AWS</title>
<description><h2 id="beta-environment-configuration-for-large-scale-application-hosted-on-aws">BETA Environment configuration for large scale application hosted on AWS</h2>
<p>This is in continuation to the <a href="http://humblelistener.github.io/2017/05/04/When-you-lose-confidence-in-code/">previous post</a>, I wrote about a situation where it was getting hard to deploy a particular application. I also mentioned how having a blue green like beta environment would help validate the behaviours of the system in near realtime without having a big impact on neither business or your end users.</p>
<h3 id="aws-weighted-load-balancing">AWS Weighted load balancing</h3>
<p>The solution proposed leveraged on the capability of load balancers to weigh the load to two different server cluster so that the behaviour can be validated in the production without great impact.</p>
<p>With that in mind in the time in between I was spiking different options in AWS ecosystem to understand how such an architecture can be built.</p>
<h4 id="load-balancers-that-cannot-do-custom-weighing">Load balancers that cannot do custom weighing</h4>
<p>This was a big surprise, I was hoping a lot on AWS <a href="https://aws.amazon.com/elasticloadbalancing/applicationloadbalancer/">Application Load Balancer</a> or <a href="https://aws.amazon.com/elasticloadbalancing/classicloadbalancer/">Elastic Load Balancer</a> to be able to support this easily.</p>
<blockquote>
<p>Isn’t it a fair expectation to have weighted routing (weighted round robin anyone?) in a load balancer AWS?</p>
</blockquote>
<p>To my surprise, neither ALB or ELB in its current form is capable of doing it. Seriously yes, I contacted support and they confirmed it.</p>
<p>However, their managed DNS service - <a href="https://aws.amazon.com/route53/">Route 53</a> supports it. While it is a relief, given we are invested in AWS at the moment, it does come with the limitation that DNS caching can be tricky, the residual connections to a server that is rolled back is possible.</p>
<h3 id="the-winning-solution-design">The winning solution design</h3>
<p>So after being surprised by load balancers in AWS and with the only option of doing it with a combination of Route 53 and ALB’s, this is what we came up with.</p>
<p><img src="https://github.com/humblelistener/humblelistener.github.io/raw/sources/assets/BetaABtesting%20diagram.png" alt="Solution design for Beta AB set up" /></p>
<p>The gif provides a better picture on spike and how it will work.</p>
<p><img src="https://github.com/humblelistener/humblelistener.github.io/raw/sources/assets/betaenvlsapp.gif" alt="how it works!" /></p>
<h3 id="what-are-the-stated-advantages">What are the stated advantages</h3>
<p>I did briefly touch about it in the <a href="http://humblelistener.github.io/2017/05/04/When-you-lose-confidence-in-code/">previous post</a>. In the hindsight, it is easy to explain why it is required for us now for our line of business application and how it might apply to you,</p>
<ul>
<li>Reduce impact of business when improving the system.</li>
<li>Provide a safe environment for technical improvements on the platform.</li>
<li>A ground work for to enable iterating on the software effectively.</li>
</ul>
<p>So now that spike is done, the next step is the big test. We have to create a build and deployment pipeline to deploy in such an environment. Wish me good luck with it. I will share my experience as I finish each step.</p>
<p>In the meanwhile, If you find this useful or have any better ways of achieving this please do leave a note and I will be very happy.</p>
<p>Till then, Cheers!</p>
</description>
<pubDate>Sun, 11 Jun 2017 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2017/06/11/beta-environment-on-aws-for-large-monolith-applications/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2017/06/11/beta-environment-on-aws-for-large-monolith-applications/</guid>
<category>Solution design</category>
<category>Beta testing</category>
<category>AB testing</category>
<category>AWS Beta testing</category>
</item>
<item>
<title>What do you do when you lose confidence in code?</title>
<description><h1 id="what-do-you-do-when-you-lose-confidence-in-code">What do you do when you lose confidence in code?</h1>
<p>This is happening to me.</p>
<p>One of the inherited product I have is so complex that investing time and money on any of the following feels useless.</p>
<h3 id="unit-tests">Unit tests</h3>
<p>The technology literally doesn’t bend to write unit tests. I know the rebel in you telling that there should be a way to write unit tests on it. But I say, it is not worth it.</p>
<h3 id="functional-ui-tests">Functional UI tests</h3>
<p>Even if I overcome the response time, feedback cycle and brittleness of the test suite, It is hard to convince myself that a good coverage can be achieved without large efforts.</p>
<h3 id="consumer-driven-contracts">Consumer-driven contracts</h3>
<p>Wish I can find a way to do this in the given technology. The complex branching, conditional flows and data-driven decisions in the system make me think even if I magic a way to do consumer driven contracts on this system, I will age by the time I set up contracts with decent coverage.</p>
<h3 id="manualexploratory-testing">Manual/Exploratory testing</h3>
<p>God forbid, this is the option that we are relying currently on the product along with some basic functional UI test coverage. As with any manual work, it has a big gap for human error and hell a lot of time it will take if every code path being affected is to be tested, especially when trying to change the underlying concepts of the system.</p>
<p>In such a state, it is not surprising that there is a urge to hide under the desk after the deploy button is clicked every time.</p>
<h2 id="where-is-the-hope">Where is the hope?</h2>
<p>The last hope, I am thinking of pursuing is to set up a beta environment and set up a traffic splitting between live and beta environment. A traffic split that can be finely controlled. So any risky change can be deployed to a variable percentage of users, monitor and decide to increase of decrease the percentage over time with confidence.</p>
<p>This is not a new technique, this is similar to A/B testing. Nginx like proxies and load balancers pioneered it.</p>
<p>In this particular case, I am thinking of pursuing AWS’s Application load balancer to achieve it.</p>
<p>Check out the <a href="https://aws.amazon.com/blogs/devops/introducing-application-load-balancer-unlocking-and-optimizing-architectures/">A/B testing section in the AWS Load balancing documentation here</a>.</p>
<p>I shall share more details on how it went. In the meanwhile, I am to learn from your experience, if you leave comments.</p>
</description>
<pubDate>Thu, 04 May 2017 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2017/05/04/When-you-lose-confidence-in-code/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2017/05/04/When-you-lose-confidence-in-code/</guid>
<category>software testing</category>
<category>software engineering</category>
<category>A/B testing</category>
<category>Traffic splitting</category>
</item>
<item>
<title>Psychological safety - Building high performance team</title>
<description><h2 id="psychological-safety">Psychological safety</h2>
<p><em>Building high performance team series</em></p>
<p>Before I realized, my interest in software engineering and building quality software lead me to having a passion in building high performance team.</p>
<p>In pursuing it, I stumbled on to how <em>Psychological safety</em> is so important in building a high performance team.</p>
<p>In this post, I am going to put down my learnings, observations and materials that helped me understand this concept.</p>
<h3 id="understanding-psychological-safety">Understanding Psychological safety</h3>
<p>As much as it sounds like a hifi term, every individual would have definitely experienced it.</p>
<p><em>It is that situation when working with a group of people where you find yourselves comfortable to share your thoughts, ideas and opinions</em></p>
<p><em>where you feel you are accepted and respected</em></p>
<p><em>where you don’t have to be worried about being ridiculed, humiliated or punished</em></p>
<p>Chances are some of us would have experienced it several times in their work life. Sometimes where they just occurred accidentally (more fortunately) or in other occasions after spending a good amount of time within the same working group.</p>
<p>Either way it would have been the most productive working group. Most of us will have some nice memories of such working groups that we cherish thinking about every now and then.</p>
<p>The challenge however is to understand how to create a environment that fosters such a set up.</p>
<h3 id="creating-a-psychologically-safe-environment">Creating a psychologically safe environment</h3>
<p><a href="https://g.co/kgs/z2Lcwf">Amy C. Edmondson</a> a notable thought leader in her <a href="https://www.youtube.com/watch?v=LhoLuui9gX8">TED talk “Building a psychologically safe workplace”</a> outlines a set up that fosters psychological safety.</p>
<ul>
<li>Frame the work as learning problem and not as execution problem</li>
<li>Acknowledge your own fallibility</li>
<li>Model curiosity</li>
</ul>
<p>Much details about these paths are explained in her TED talk.</p>
<h3 id="some-clues">Some clues</h3>
<p>The following vocabulary helps developing listening skills around psychological safety.</p>
<h4 id="sounds-of-traps-in-your-team">Sounds of traps in your team</h4>
<p><em>“I always felt like I had to prove myself”</em></p>
<p><em>“I always felt like I had to be careful not to make mistakes around them”</em></p>
<p><em>“People would try to show authority by speaking louder or talking over each other”</em></p>
<p><em>“only a few members speak most of the time”</em></p>
<h4 id="good-signals">Good signals</h4>
<p><em>“we all felt like we could say anything to each other”</em></p>
<p><em>“No one worried that the rest of the team was judging them”</em></p>
<p><em>“I got your back!”</em></p>
<p><em>“Team sharing jokes”</em></p>
<h4 id="myth">Myth</h4>
<p><em>“building the best teams meant combining the best people”</em></p>
<h3 id="impact-of-psychological-safety-on-team-performance">Impact of Psychological safety on team performance</h3>
<p>Below is the picture representing the <a href="https://en.wikipedia.org/wiki/Tuckman%27s_stages_of_group_development">four stages of group development by Bruce Tuckman</a></p>
<p><img src="http://3.bp.blogspot.com/-H9_AmIgf464/TaJeGbKuyQI/AAAAAAAAARs/H_lLhVAXyeQ/s1600/Tuckmans+model.png" alt="forming storming norming performing" />
image credit <a href="http://www.aleanjourney.com/2011/04/stages-of-high-performance-teams.htmlhttp://www.aleanjourney.com/2011/04/stages-of-high-performance-teams.html">www.aleanjourney.com</a></p>
<p>A psychologically safe environment helps expedite forming and storming phase and get to norming and performing faster.</p>
<h4 id="closing-comments">Closing comments</h4>
<p>This post has taken inspirations from several publications and articles about Psychological safety. One of the noteworthy post, the <a href="https://www.nytimes.com/2016/02/28/magazine/what-google-learned-from-its-quest-to-build-the-perfect-team.html?_r=0">learnings of Psychological safety from google</a>.</p>
<p><em>What are your thoughts?</em></p>
<p><em>What do you think helped you feel safe when last time you found yourselves in a safe group set up?</em></p>
</description>
<pubDate>Tue, 04 Apr 2017 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2017/04/04/Psychological-safety/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2017/04/04/Psychological-safety/</guid>
<category>high-performance-team</category>
</item>
<item>
<title>Configure ssh on windows for using gitlab or github</title>
<description><p><a href="https://www.youtube.com/watch?v=G1cGAnFi8dQ" title="Configure ssh on windows"><img src="http://img.youtube.com/vi/G1cGAnFi8dQ/0.jpg" alt="Configure ssh on windows for using git" /></a></p>
</description>
<pubDate>Sun, 12 Mar 2017 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2017/03/12/Ssh-configuring-on-windows/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2017/03/12/Ssh-configuring-on-windows/</guid>
<category>programming</category>
</item>
<item>
<title>An Enabling CI system</title>
<description><h1 id="my-two-cents-on-ci">My two cents on CI,</h1>
<p>One of the important features for agile continuously delivered Microservice is a lean process both in engineering and in systems. The CI system is critical to it. Abilities like</p>
<ul>
<li>Self-contained build specification</li>
<li>Simple specification</li>
<li>Good community support and references</li>
<li>No hassle of managing agents</li>
<li>Easy to onboard</li>
</ul>
<p>immensely simplify and let the developers concentrate on delivering the working software.</p>
<p>And Travis CI fits this bill, very well.</p>
<h2 id="a-brief-on-what-self-contained-build-specification">A brief on what self contained build specification</h2>
<p>If you can mention all about a built process in just one place, one file and include it along with the code in the same repository, in a convenient specification, <em>how awesome is it?</em> That is exactly the Travis yml file.</p>
<p>Of course there are other build systems like CircleCI, Codeship, AppVeyor (for Windows) etc that take the similar route.</p>
<h3 id="disadvantage-of-having-build-script-scattered">Disadvantage of having build script scattered</h3>
<p>Traditional build systems have this problem, where part of the scripts required for build-deploy pipeline gets included along with the source code in its repository, while the build agent also holds intelligence and knowledge has knowledge as to how to build and deploy.</p>
<p>This scattered nature of such build process itself impedes the transparency and simplicity of a autonomous self contained system. This kind of system worked fine when the development team need not have to bother about deployment.</p>
<p>This even worked when we need to deploy regularly but had an expert and his time to get this correct (remember the role called Build manager?). But, do we need need to depend on a expert every time? Especially with a microservice architecture, where new services come up every day? I say no.</p>
<h2 id="my-take-on-some-widespread-limitations-with-travis-ci">My take on some widespread limitations with Travis CI</h2>
<h4 id="cannot-build-windows-based-net-code">Cannot build windows based .NET code</h4>
<p>This is only a limitation for time being, till we all move on to platform agnostic dotnet frameworks.</p>
<h4 id="cannot-pipe-the-build-process">Cannot pipe the build process</h4>
<p>This one came up several times when deciding on CI system. However for the last one year, I haven’t heard anyone needing it. In my opinion, the need for pipelining builds smells an incorrect coupling. Most of the times either
a. domain boundaries are incorrect, so we have to queue builds to get one functionality out
or
b. code boundaries are incorrect, so we have to get more than repo built to get a functionality out.</p>
<h4 id="only-limited-agents">Only limited agents</h4>
<p>If a build is taking less than 5 mins including deployment, Do you think the availability of agent will block you? I bet not. We have been living with 2 concurrent jobs / agents for almost one year. We currently have around 15 active repositories using Travis CI and haven’t had a blocking build situation.</p>
<p>After all, when it is getting blocked, we can simply shell some money and get more concurrent jobs.</p>
<h4 id="what-is-your-ci-story">What is your CI story?</h4>
<p>Is something not working in your Microservice journey?</p>
<p>What causes the most frustration in your CI process?</p>
</description>
<pubDate>Thu, 23 Jun 2016 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2016/06/23/Enabling-Continuous-integration-system/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2016/06/23/Enabling-Continuous-integration-system/</guid>
<category>programming</category>
<category>continuous-integration</category>
<category>continuous-deployment</category>
<category>travis-ci</category>
</item>
<item>
<title>Profile http requests made by webserver</title>
<description><p>Tracing http requests made from server</p>
<p>Once in a while, we need to trace the http calls made from the web/app
server. It will be very useful especially in scenarios where you are
having performance problems with web services and not sure where to look
for. We all know fiddler is very useful in tracking the http calls from
the browser, but, put in right configuration this tool will be handy in
tracking web service calls as well. I am going to briefly write some of
the configurations that may have to be done for getting this working.
(consider its more of a personal reference document)</p>
<ol>
<li>Run your fiddler under the context of app pool user.</li>
<li>Recycle the app pool</li>
<li>The above steps did not solve your problem, under system.net element in your
web.config,
insert the following </li>
</ol>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code> &lt;defaultProxy&gt;
&lt;proxy autoDetect="true" proxyaddress="http://127.0.0.1:8888"/&gt;
&lt;/defaultProxy&gt;
</code></pre></div></div>
<ol>
<li>If all this did not solve, ensure that fiddler is point to port 8888
(which is does by default)</li>
<li>sometimes fiddler though captures https
handshakes, it may not be able to decrypt the actual http requests In
such cases</li>
</ol>
<p><code class="highlighter-rouge">goto fiddler options -&amp;gt; Https tab, ensure "Decrypt Https
traffic"</code> is checked.</p>
<p><a href="http://docs.telerik.com/fiddler/configure-fiddler/tasks/decrypthttps/">Telerik fiddler documentation</a></p>
</description>
<pubDate>Tue, 20 May 2014 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2014/05/20/trace-webserver-service-http-calls/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2014/05/20/trace-webserver-service-http-calls/</guid>
<category>programming</category>
</item>
<item>
<title>Feature switches</title>
<description><p>Thought process behind feature &amp; toggles.</p>
<p>Off late Feature switches are a common practice in software development. The credit goes to short development sprints boosted by Agile practices, where the team works on a new feature / section that will be disabled (better term hidden away from user / are not part of the current processing flow) in the immediate release till all parts of the feature is complete and ready to be used.</p>
<p>Software architects and engineers handle this problem using different tools and techniques.</p>
<p>What is a feature?
To give some examples and put a definition of feature in context, a feature can be a new user interface component (like upgraded text area control in web app), upgrading of data store (moving to a new database), a change in the workflow or simply bringing in a new component into an existing process line (naively achieved using if.. else clause).</p>
<p>So, What are really features?
My definition - “feature is that it is a functional piece of a program or process that is already part of or going to be part of a software application.”</p>
<p>The term Feature is clearly a functional programming term - the most relevant object oriented programming term that I can think of is a module.</p>
<p>How a feature can be viewed from an Object oriented perspective?</p>
<p>To define this in object oriented programming terms, a feature is a new implementation of an interface which will injected</p>
<p><a href="http://martinfowler.com/bliki/FeatureToggle.html">Martin Fowler reference on feature toggles</a></p>
<p><a href="http://c2.com/cgi/wiki?SwitchStatementsSmell">switch statement smells</a></p>
<p>Feature toggling should be restricted to only one point in code.
Typically entry point, which works well if the feature is user interface related.</p>
<p>Incase of features that dont correspond to UI. The features must be designed to be toggled from dependency injection configuration. Typically a class like AutofacConfig.cs or similar.</p>
<p>Examples:</p>
<p><code class="highlighter-rouge">Unity.DefaultContainer.Register(typeof(ILoginProvider), typeof(CookieBasedLoginProvider));</code></p>
<p>CookieBasedLoginProvider is a feature here.</p>
<p>Lets say when the organization needs to have a TokenBasedAuthentication, simply a TokenBasedLoginProvider like feature can be implemented and switched directly.</p>
<p>Depending on the feature switch, corresponding Provider can be injected. This way, we dont have to bother about rest of the application and can keep the change limited to the implementation and configuration.</p>
<p>Advantages</p>
<ul>
<li>Unit test only the feature implemented.</li>
<li>Minimal risk as modifications are limited to existing code</li>
</ul>
</description>
<pubDate>Sat, 13 Jul 2013 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2013/07/13/feature-switching/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2013/07/13/feature-switching/</guid>
<category>programming</category>
</item>
<item>
<title>Moved on from Mindtree to Readify</title>
<description><p>For all those who did not know..</p>
<p>I left Mindtree early May 2013 and joined Readify in Melbourne, Australia.</p>
<p>I should call myself very fortunate to have secured a job while still ashore from Oz and to have joined this company.</p>
<p>The best thing I can tell about Readify is the people.</p>
<p>Most of them are <code class="highlighter-rouge">MVP</code> in other or the other area.</p>
<p>The environment and people are more welcoming than I actually expected. The organization has a friendly and open culture and puts real efforts in the professional development of the consultants.</p>
<p>There are various programs and options available in the organization to quench all the type of thirst a software engineer could have.</p>
<p>Readify has been on the Great Places to Work in Australia Institutes list of companies consistently for the last 3 or 4 years.
This year (2013) it was positioned at 15.</p>
<p>Readify is the awarded the Partner of the year across world from Microsoft to their contribution to the Microsoft ecosystem.</p>
<p>So, I started with them this May and have already touched upon a couple of gigs.. one for the Port of Melbourne corporation and another for seek.com.au.</p>
<p>Currently in the seek.com.au’s gig, I am working along with highly motivated Seek’s team to develop their website.</p>
<p>In this role, I will be using my client side MVC knowledge and experience are to be leveraged, which I am looking forward this as an opportunity to hone my skills in this space and learn a few interesting and new client side frameworks and tools.</p>
<p>Catch you all in the next blog… thanks for reading..
Couple of references about Readify</p>
<p><a href="http://readify.net/">Readify</a></p>
<p><a href="http://www.greatplacetowork.com.au/best-companies/best-places-to-work-in-australia">Great places to work in Australia</a></p>
</description>
<pubDate>Tue, 21 May 2013 00:00:00 +0800</pubDate>
<link>https://humblelistener.github.io/2013/05/21/resigned-from-mindtree/</link>
<guid isPermaLink="true">https://humblelistener.github.io/2013/05/21/resigned-from-mindtree/</guid>
<category>career</category>
</item>
</channel>
</rss>