Categories
Software

The great attrition churn in Indian IT market

Of course, each business newspaper is telling you that attrition levels are high in so many IT companies in India .One gets to see huge percentage numbers cited in such news . But very few of such news present the the details of such movement leave alone the causes . A few article and posts did mention that last year due to covid the hikes were less or nil . But does that qualify such big jumps in attrition .

A deeper discussion with the folks exiting tells diff story . In some cases the women have realized ,after staying with kids for a year that their IT job is not that “needed”. In some cases the men have questions need of an IT job itself for livelihood .In many cases a lot of folks I talked to had farm or fathers business as a fall back .And the covid wfh allowed them to consider going back seriously .In some very sad cases ,friends had causality or very bad episode related to covid which made them question the need of city job away from near ones . A few youngsters told that a year at hometown they would do a start up because a formal IT office doesn’t excite them now.

Of Course mine is not a detailed study with lots of data .But it should tell that there are some fundamental shift in Urban-9.15hours-IT jobs that were seen as the thing in India for past decades .One might read some US based publication and call this quit job movement but that would be superficial .I would rather call this as reverse migration or some sort of coming full circle on Urban migration as option and IT job as the best lifestyle choice .Both have been challenged by covid. So next time someone says the people are jumping jobs for money , it might be t he symptom but the causes might be disillusionment .Oh and by the way you where thinking of allowing your team to work 2 days a week from home, right ? Welcome the HR challenge of the decade .

The paradigm has ,in this case ,actually shifted and we don’t exactly know where ЁЯЩВ

Categories
Software

API first for Products

Lead question : Why API First

Ask a product manager what is the different between made or order software and a product .He will tell you how product is general purpose for the given domain (not generic tough ).How it captures a broad set of use cases from the domain .How it is flexible in adopting to diff combinations of rules that are included in these use case .How it is future proof and is ready for future changes in domain .How it benefits from vast experience from we have in the domain/customers /consultancy . It goes on .

Yet when it comes to day in life a of developer he is often made to code first , code just what he has been asked for and ship it . It is obvious that a start up will only put coding effort into what sells but should that rule apply  to the very definition of the product as it is conceived  ?Is defining a product/service/roadmap same as coding it ? Such gap between what is тАЬSeenтАЭ by product and what developers are made to do are solved by evolution read software design . API first is a prime example of being comprehensive and thus evolution ready yet riding the demand wave frugally .

Business scenario for  API first

  • Integration /Consumption : Software need to be integrated by different parties as the success happen .Would you like to struggle to meet demands of this success come your way ? or would you like to be ready for it with some top-up effort .The answer is in thinking API first . Once you  think of well  thought of APIs  gluing them become easy and future successes becomes faster . This could mean integrating in or integrating out ie consuming (and monetization ).
  • Aggregation/federation  : The internet economy of aggregation made famous by amazon/uber has made clear a case for softwares co-operating with each other .This increases market reach and revenue .However aggregation economy is volatile and competitive . One need to be ready at shorter notice than typical integration projects .The integrations also need to be robust for the parent party (and their customers ) to trust you .Another flavor could be federation of services amongst equals . A well thought of API on both sides make such integration easy-fast-reliable .
  • Extension  : Acquisition ,Saas enablement  ,inhouse aggregation(called integration ) or even customization are typical cases of base capability of software being enhanced by extension .We may thinking of moving from web to mobile to chatbots/alexa . We may also consider taking base software and enabling that as multitenant offering .  While these extensions are value positive for every one they need be very liberal in capability but restrictive in scope .This help us keep sanctity of base software  yet allow creative but reasonable value add . An API layer will clear laid out  extension helps .

All of these driver point towards one fact that business that are built with well defined contracts stand to benefit from this opportunities as opposed to software that are inwards focused and need extra work for any opening up .While this discourse underlines that API first help us with readiness in terms of external forces , the same game plays out within the teams also .It is just that inter team play is seen in the light of following themes

Advantages of API first approach

  1. Domain fitment : The tendency for Business analyst and developer to grab a piece of functionality under discussion and тАЬjust code itтАЭ .This has huge chance of teams creating code that is few layers higher in domain and miss out in fundamental building blocks .An API first approach also forces teams to think bottom up inside the domain where they are made to think of the тАЬbuilt upтАЭ of the functionality .This ensures that the domain of software in considered in totality before team chooses to pick up one slice of it and code it .
  2. Parallelization : API also stand for clear contracts .So it allows teams to do more parallel work as api-first minimizes risk of large scale integration of parallel work streams .Productivity and time or marker related gains follow .Agile ie .
  3. Testing : Since APIs are laid our clearly the function or security test team get more and enough time for deep thought testing approaches at all levels of test coverage .
  4. Functional resilience : Since API commits to a final contract it gives a robust functional capability which is strength .At the same time there are many internal implementation details are that are open to amendments which adds to overall resilience .Think of a case where old rule based API is replaced with new Machine learning based API ,while the API is same the quality of algorithm is smarter .
  5. Evolution : A well laid out contract also facilitates future evolution easy .It could be new version , a customized or localized flavor which offers changes in the same neighborhood as original older version of API (hence evolution ) . This however needs a better governance put in place .
  6. Tech Debt repayment : A well defined contract also allows decoupling between team producing it and team consuming it . This allows the team to keep on changing internal technical detail of their API healthy and repay tech debt without disruption .
  7. Other than code needs : There are many other than code needs like performance ,build , documentations , availability  , monitoring ,audit ,security which are get into motion after the software is committed to repo .API first lays out clear shape of the software to be and allows these team to think thought early on and facilitates these other than code needs at much deeper level of engagement .

Pitfalls and background of API First

API first is often confused with webservices .This often leads teams into thinking that if they are not exposing any url style webservices to anyone they are free .A better term for API-first could be contract first (but thatтАЩs very technical world so API is used ). This means that no matter whether one is creating piece of software that is consumed by outside world or other teams/developers in your company ,so long there is interdependency one need to commit to clear contract .And in order to see the gains of agility etc one need to commit to this contract first .This also means that all layers of software from external facing UI -webservices to components-frameworks in middle layer till data-integration layer one need to think  of defining clear contract .To that effect every component is an API that is producing or consuming other API . Even so-called cross cutting layers like logging are mater of laying out clear cut APIs.

The concept of defining clear interfaces in now new to programmers . We often talk of specifying clear interfaces and programming to interfaces .However this good practice start at individual program and ends at design patterns . May be it is seen as something only serve side programmer do . But , as we approaches more layered , more distributed(teams as well as software) , more integrated and more reusable (think open source ) , more componentized and so on the value of clearly laid out contracts between these seams is apparent . API first is this a mainstream realization of this fact , tough people confuse API with webservices only .

more reading ,Bezos Amazon API Manifesto and link to Yegge of Googles Rant : https://gigaom.com/2011/10/12/419-the-biggest-thing-amazon-got-right-the-platform/

Categories
Uncategorized

English translation: ilu sa ha deh

Sometimes lyrics of movie songs touch the heights of divine poetry. It could be Rumi style Sufism or in marathi what saint Gyaneshwar wrote or if you are western audiance you can think of Neruda. Here is my attempt to put English translation of song ilu sa ha deh. рдЗрд▓реБрд╕рд╛ рд╣рд╛ рджреЗрд╣ written by Vaibhav Joshi for marathi movie panghrun ie the cover.as follows…

Tiny is the body , with unfathomable  depth

Affection ..love ..enchantment ..together are kept

The soul within the soul ,all chaos

Burning down its trace ,all across

Is it a sin or virtue it would

Sankes are destiny of sandalewood

known or unconscious,The void of this emptiness.. great

The consciousness of none.. is the fate

рдЗрд▓реБрд╕рд╛ рд╣рд╛ рджреЗрд╣ рдХрд┐рддреА рдЦреЛрд▓ рдбреЛрд╣
рд╕реНрдиреЗрд╣ рдкреНрд░реЗрдо рдореЛрд╣ рдорд╛рдВрджреА рдпрд╛рд│реА рдорд╛рдВрджреА рдпрд╛рд│реА

рдЪреЗрд╣рд▒реНрдпрд╛рдорд╛рдЧрдЪрд╛ рдЪреЗрд╣рд░рд╛ рдХрд▓реНрд▓реЛрд│
рдЪреЗрд╣рд▒реНрдпрд╛рдорд╛рдЧрдЪрд╛ рдЪреЗрд╣рд░рд╛ рдХрд▓реНрд▓реЛрд│
рдЖрд░рд╢рд╛рдд рд▓реЛрд│ рдмрд┐рдВрдм рдЬрд╛рд│реА..
рдЗрд▓реБрд╕рд╛ рд╣рд╛ рджреЗрд╣ рдХрд┐рддреА рдЦреЛрд▓ рдбреЛрд╣
рдЗрд▓реБрд╕рд╛ рд╣рд╛ рджреЗрд╣ рдХрд┐рддреА рдЦреЛрд▓ рдбреЛрд╣тАж

рдХрд╛рдп рдЖрд╣реЗ рдкреБрдгреНрдп рдХрд╛рдп рдЖрд╣реЗ рдкрд╛рдк
рдХрд╛рдп рдЖрд╣реЗ рдкреБрдгреНрдп рдХрд╛рдп рдЖрд╣реЗ рдкрд╛рдк
рдЪрдВрджрдирд╛рд▓рд╛ рд╕рд╛рдк рдХрд╡рдЯрд╛рд│реА
рдЗрд▓реБрд╕рд╛ рд╣рд╛ рджреЗрд╣ рдХрд┐рддреА рдЦреЛрд▓ рдбреЛрд╣
рд╕реНрдиреЗрд╣ рдкреНрд░реЗрдо рдореЛрд╣ рдорд╛рдВрджреА рдпрд╛рд│реА рдорд╛рдВрджреА рдпрд╛рд│реА
рдЗрд▓реБрд╕рд╛ рд╣рд╛ рджреЗрд╣ рдХрд┐рддреА рдЦреЛрд▓ рдбреЛрд╣тАж
рд╢реВрдиреНрдпрд╛рддрд▓реЗ рд╢реВрдиреНрдп рдЬрд╛рдгреАрд╡ рдиреЗрдгреАрд╡┬а┬а
рд╢реВрдиреНрдпрд╛рддрд▓реЗ рд╢реВрдиреНрдп рдЬрд╛рдгреАрд╡ рдиреЗрдгреАрд╡┬а┬а
рд╢реВрдиреНрдпрд╛рдЪреА рдЙрдгреАрд╡ рдЖрд▓реА рднрд╛рд│реА рдЖрд▓реА рднрд╛рд│реА┬а
рдЗрд▓реБрд╕рд╛ рд╣рд╛ рджреЗрд╣ рдХрд┐рддреА рдЦреЛрд▓ рдбреЛрд╣┬а┬а
рд╕реНрдиреЗрд╣ рдкреНрд░реЗрдо рдореЛрд╣ рдорд╛рдВрджрд┐рдпрд╛рд│реА рдорд╛рдВрджрд┐рдпрд╛рд│реА

Listen to different version of this song,here..

Feamle version https://youtu.be/d2EGYQioKh0

Male version https://youtu.be/tIAjvj3GaYY

Male version, reprise https://youtu.be/b46DqIlofi0

Categories
Uncategorized

Hindi poem : corona times

рдЕрдм рддреЛ рджрд┐рд╡рд░реЛ рдХреА рд▓рдХреАрд░реЛ рд╕реЗ рднреА
рдкреБрдЫрддреЗ рд╣реИ,рдмрд╛рддрд╛ рдХреАрд╕рдордд рдореЗ рд▓рд┐рдЦрд╛ рдХреНрдпрд╛ рд╣реИ
рдпреБ рддреЛ рдмрд┐рд╕рддрд░ рдкреЗ рдлреИрд▓реЗ рд░реЗрд╣рддреЗ рд╣реИ рдЖрдЬрдХрд╛рд▓
рдЪреБрдн рдЬрд╛рддреА рд╣реИ рдбрд░ рдХрд┐рд╕реАрдВ рдХрд░рд╡рдЯ рдкрд░ ||1||

рддрдмрд┐рдпрдд рд╕реЗ рдзреЛрддреЗ рд╣реИ рдЯрдорд╛рдЯрд░ рд╕рдм рдХреЛрдИ
рдХрд╛рд╢ рд░рд┐рд╢рддреЛ рдкрд░ рдЗрддрдиреА рдореЗрд╣рдирдд рдХрд░ рд▓реА рд╣реЛрддреА
рджреВрд░ рд╕реЗ рд╣реА рд╕рд╣реА рдХреЛрдИ рдкрдбреЛрд╕реА рдкреБрдЫ рд▓реЗ
рдЬрд┐рдВрджрд╛ рддреЛ рд╣реЛ ? рдФрд░ рд╣рд╛рд▓ рдХреИрд╕рд╛ рд╣реИ? ||2||

рдХрд┐рд╕реАрдВ рдиреЗ рднреА рд╕реЛрдЪрд╛ рдирд╛рд╣реА рд╣реЛрдЧрд╛
рдЗрдВрдЯреЗрд░рд┐рдпрд░ рд╡рд╛рд▓реЗ рдШрд░ рдореЗ рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рджреЗрдЦрдирд╛
рд╣рд░ рд░рд╛рдд,рдЕрдкрдиреЗ рдЦрд╛рдпрд▓реЛ рд╕реЗ рджреВрд░ рднрд╛рдЧрдирд╛
рд╕рд┐рдиреЗрдорд╛ рдХреЛ рдЬрд┐рдирд╛, рдЖрд╕рд╛рди рдирд╣реА рд╣реЛрдЧрд╛||3||

рдпреЗ рдирд╣реА, рдХреА рдХреЙрд▓ рдирд╛рд╣реА рдХрд░рддреЗ рдпрд╛рд░ рдореЗрд░реЗ
рд╣рд╛рд▓рдЪрд╛рд▓,рдлрд┐рдХрд░,рд╕реБрд╣рд╛рдиреА рджреМрд░ рдХреЗ рдлреЗрд░реЗ
рдЪрд╛рд╢рдиреА рдореЗ рдЕрдЯрдХреА рдЪрд┐рдВрдЯреА рдЬреИрд╕реА рд╣рд╛рд▓рдд
рдЬрд┐рдВрджрд╛ рд╣реЛрдиреЗ рдХреА рдЦреБрд╢реА рдорд╛рдирд╛рдирд╛.. рд▓рд╛рдирдд ||4||

Categories
economics

Pandemic Shutdown:Interest is bad again,stop calculating

The ongoing pandemic caused by coronavirus(COVID-19) is going to cause a recession worldwide. As the world comes to halt in true blue “Atlas Shrugged” style the real question then is what will be the nature of this recession.

A classic recession is defined by a slowdown in growth. Business shrink, incomes reduce and aggregates like Gross Dometic Product (GDP) are used to count it. The term used to depict this phenomenon is called deflation. In a classic textbook sense, it is the opposite of inflation (ie rise in prices). But that is a classroom case.

With everything is left to people’s natural behavior, the principles of supply-demand-value will cause result in inflation or deflation. The world is no longer in classroom conditions. Definitely not since Nixon removed the gold peg on currency notes. To cut the story short as we enter the world on central bank printing notes at will, the financial market working on second or third-order derivates these effects needs to be taken into account. That why the economics literature coined terms like disinflation, stagflation, negative inflation and so on(which we don’t detail for sake of brevity).

Forced revisit to fundamentals

But the current shutdown caused by a pandemic is going to make us revisit all of these variants and reduce them to basics. This is because of one fundamental characteristic of this crisis: shutdown.

When economic activity goes to halt the world is reduced to barter level. Because this shutdown has just started we have not entered that situation. If the shutdown doesn’t extend very long (say a year), we might just skirt with this level and come back.No matter to what degree we approach this ideal barter level of the economy it will pose a great question on our banking/lending practices. The fundamental assumption of lending is that the other party has a productive use of the money given. That is why it is called capital . And that is why interest becomes a legitimate demand. If there is a way you can earn more money by taking it from mine, give me some share of your profits.

Definition of Capital under question?

As the shutdown becomes more and more normal (I pray it doesn’t ) the very notion of capital and interest comes under scrutiny. So no matter how much money central banks and governments give people if people don’t go back to active production (the economic activity of value)the very notion of the value of money will come under question. But that is an extreme and rare possibility. What this discussion helps with is a meaningful remedy to the economy without causing another round of easing (like post-2008 era).

Since economic activity is frozen, the government world over can put a freeze on interest calculations of all types. This retains the sanctity of capital-deposts-loans and relives the economy of the broad-based collapse of businesses (of all shapes, more small ones ).

At the present government of India has announced that all term loan payments can be skipped for the next 3 months. It relies on the assumption that when the shutdown is over the business will somehow pay it back. A tall assumption for 2 reasons.

  1. It is shut down and not a slowdown. It a process of a reboot. All businesses will open the counter as if it is the day of their life. Being back to the usual collection numbers will be a gradual process.
  2. Yes, the interest accrues, as if nothing happened.

Is it fair and realistic

Is it fair to depositors? It is. Faced with the risk of total capital loss and interest loss any option that preserves the original sum is a fair and realistic option.

The second question is it realistic? Especially countries where interest rates are near zero. This is the classic no yield scenario none likes. But that is precisely the benefit. In shutdown time preservation of capital itself is the benefit. To GDP or deficit calculations of different governments, it more or better of what is going on :). It will pose a very grave threat to financial markets(stocks, bonds, etc). It is such a dreaded scenario that it will be laughed at.We skip the detailing so that we stick to our topic(but it is a matter of interesting question as to how stocks are valued when the economy is at halt !).

Can we skip rent?

It is not a theoretical but a moral question. Since the crisis has just begun there can be arguments of various kinds on what happens to rent. If we approach a longer shutdown were practically none is going to work and will tend to earn nothing the notion of rent comes under question. Whether it is housing or commercial rent has the same underlying assumption as a loan. Which is of productive use.If that doesn’t happen people either default on payment or keep the property . As much we can put economics, it is also a legal question. But it is more of a moral question that everyone needs to understand.

Categories
economics Software

Salary Alternative to Layoffs in recession and Leadership Burden

The Upcoming Recession

With CoronoaVirus Pendamic, in 2020, the news of Layoffs and cost-cutting are happening again. For my generation this will be third such global recession ie 2000 DotCom bust, 2007-8 Global Finacial Crisis and Now CoronaVirus lockdown recession. In the times when the business stops, revenue dries are mass-scale layoffs the only option? This post argues that it is not and goes on to propose an alternative and new leadership paradigms to avert it in the future .

Current Salary and layoff Model

In my LinkedIn reply to Dan Price of Gravity Payments(2020), I suggested the concept of alternative recessionary salary ARS. If you see the current salary structure it has the basic/guaranteed part including the statutory/legal. Then there are commissions, bonuses, Stocks and some performance/result based salary. The later are the optimistic components based on growth. At times these growth components are applied to people who don’t really have any realistic control over growth. But as part of the norm it remains.In Indian IT setup, variable pay for even junior level is in practice and some CFOs even touted them as levers available for quarterly results!

Alternative Recessionary Salary ARS

The ARS that I suggest is an alternative salary structure offered to people in recession time. It has 3 components. One is the salary cut that everyone takes because the revenue is down, say 1/3 part. The second one is the mandatory pay that everyone gets say 1/3. The last one is the salary credit, say another 1/3. The salary credit is accumulated (accrued) in persons’ account for future payment . Say a year later or sometime in the future when a certain percentage of revenue is back one can vest it . But it is legal entitlement so long the business remains alive. Even better will be to allow employees to decide their percentage of cuts and credit as opposed to 1/3 I suggested above .

Now the boundaries. First, it should not be seen as a loyalty program. Many times loyalty programs allow the deadwood to stay in companies. It remains undetected as its such a non-CEO thing to talk about skill obsolescence and retain good PR on loyalty. The model above is then a sacrifice, an investment made by employees in the companies they wish to continue working for. The finance guys don’t like to accumulate future claims on their books. So this model can kick-in for a year only after which the layoff can happen. But the main question is what to do with these employees when the workload is less. The answer is, efficiency. At 1/3 pay, it is reasonable to put them to all the improvements and innovation tasks you always wanted. If you are an IT shop, putting them to work on open source will be a great investment. If nothing else works putting them to work on community/environmental issues is always possible. If this model becomes the norm some governments might include them into their tax incentive systems!

Threats of misuse of ARS

The threat that this ARS becomes the main salary structure and doesn’t remain an alternative is real. But your HR people have lots of wisdom to offer here :).Recessions don’t last, once it’s over and the ARS is used as exploitatory practice the talent will simply move on or change its productivity. There are even more possibilities in which the workforce will retaliate. The aspects of the social bargain are well known and it would be a detour for this post to repeat it.

Why doesn’t ARS happened

I can’t say for sure that ARS or like model hasn’t happened . But it’s not mainstream. (In an opinionated way, read the following).

Modern leadership is leading by finance! Quarterly results weight much more important than:social good, nurturing employee or even national priorities! Even terms like innovation are not valuable unless it results in profit or cost optimization[one example,In India FlipKart started using air-inflated bags for packaging as opposed to thermocol , huge innovation on the environmental front, will it count on wall street ?]. The current corona crisis is a test of the resilience of our social structures. This includes organizations too. Nations are made to think about the sufficiency and efficiency of their health system, aid programs. Some have even started to question their supply lines and independence in fundamental tech. Even the matter of trust and cooperation between larger structures such as the EU or G20 are happening. This will result in a sort of reboot and redesign at many levels of society and companies(which might make recovery very fast).

It is the test of structural resilience. But it is not as mainstream as the matter of solvency, optimization and profit are. In that effect, modern business leadership is dictated by personal ambition of bonus payout of some aggressive hedgefund guy than thinking about social structure. That has become such a norm that buck-backs during the recession are not even questioned by anyone.Whereas it’s the social structure, of diff kind, the supports/incentivizes/benefits/suffers the organization. This is the basis of capitalism which has given way to stockmarketilism . The invisible hand of capitalism is cuffed. High time the CEOs are freed from the burden of quarterly increases and newer metrics of growth-benefit- wisdom emerge. In today’s business landscape, where profit and personal ambition often take precedence over social structure, tools like an instant checkstub generator can provide a tangible solution.

Notes for further reading :

  • Harari on the world after https://www.ft.com/content/19d90308-6858-11ea-a3c9-1fe6fedcca75
  • Ben Thompson on Compaq moment: https://stratechery.com/2020/compaq-and-coronavirus/
  • Adam Smits Invisible Hand: https://en.wikipedia.org/wiki/Invisible_hand
  • HBR article on compensation alternative: https://hbr.org/2018/07/7-compensation-strategies-for-cash-strapped-startups
  • Amar Bhide on capitalism mishaps :https://hbr.org/1994/11/efficient-markets-deficient-governance
  • Tim Urban on why things are the way they are https://waitbutwhy.com/2019/12/political-disney-world.html
  • World After ,Survey of experts https://foreignpolicy.com/2020/03/20/world-order-after-coroanvirus-pandemic/
Categories
Misc Personal Utils : Useful Info

Pune coronavirus(covid-19),lockdown ,daily routine for you

Pune has now become epicenter for Corona virus called covid 19. This is deja vu of swine flu era of august 2009 (which I covered in my old post, Masked Pune and Swine Flu Scare ). With deeper media penetration the stats and information on precaution to take during covid-19 needs not one more post. In fact people are better prepared now .But with almost a total lockdown in Pune and in many cities of India ,keeping a good mental state and happy mood has become a task . So here is my routine during lockdown and few suggestions on activities you can do to keep yourself meaningfully busy .

My routine in corona virus lockdown.
1. Start day like usual and do the chores.
2 Exercise with family (everyone is missing their friends so joint tasks helps.)
3 Go to terrace or balcony ,as suitable ,take sunlight.
4. Start work at regular hours ,if work from home is your thing(same with kids , one parent/grand parents can become teacher or classmate for them)
5. Call all the people from your daily routine and chat like its normal(this includes all the big and small people .It might sound trivial but its assuring).
6. Call all type of friends and other people I/we know and talk about their life.
7. Find lots of small activities that need deep focus (see below for my list)
8. Talk to neighbors, from a distance,help them as needed.
9. Travel,if must ,with hemlet or car or mask.
10. Do not spend time watching tv for hours,it will affect mental freshness.
11. Sleep at regular hours.

But the main point is, lockdown causes more stress due to loneliness caused by the cut off from human beings. May be its obvious ,or not ,we need lots of people around to feel good and safe (even if we don’t talk or talk deep things with them, we need the tribe ) .So ,its ok to reveal that you need human connect and talk to as many people as your mind find satisfying .It’s difficult in core city of Pune where you get judged at the first sign of being common man who has average life ЁЯЩБ . But in difficult times I suggest you take this risk of being vulnerable and connect .

Next thing is, even when we work from home and do group activities with family the feeling of forced life can be unsettling .We need some personal work which needs deep focus so we can endure hard times .One can find lots of articles on internet on activities to do or new hobbies to cultivate. Sites like wikihow has great articles on this . However one need to find such lists really meaningful so that they get your deep attention and give you the much needed focused distraction .

For indian audience here is my list of meaningful activities that can keep you happily and meaningfully busy.

  • Find a list of aarti, mantra -stotra , prayers you always wanted to know by heart and then include them into your daily worship routine .
  • Think of your life as a timeline and tell the people you stay with, about all the small missing details .This will also give you a list of people/places that you haven’t seen in long time (so you can call them now) . In case you don’t want to open up this much ,one can do this mentally and find this list .Or instead of life, it can be a theme based talking like, great foods u have eaten since childhood ,funny people you met in life.
  • Do the personal housework – While doing daily chores keep you busy ,but if it is not something you do regularly, it can become boring .The feeling of forced task can make u more sad. So the idea is to do all the tidying and repairing work around your self .Wash all your cloths by hand, iron them ,arrange them ,repair them if needed . Wash all your foot ware, polish them .Do your own SPA ,head to toe (even if your are man, do it ).
  • Do your own stand up ! Each one has a list of jokes he makes or poems. Or you might have a list of songs you like . Recite them, act out .Being center of attention is very assuring .
  • Documentation : grown ups have lots of documents .It could be your certificates, legal documents , research papers , bills/receipts .Or even your books shelf .This is goodtime to arrange them ,clean up etc.
  • Secondary kitchen works : We all know that cooking and cleaning can be very soothing .If you do this already good .Try it now. Additionally there are many secondary works that can be done in kitchen that can be engaging, even for men. Re arranging kitchen, taking a look at old wares /repairing them .This is also good time to make the pickles, chutneys, papads at home .You can find list of such small food items from your culture.These items need small but focused effort and bring joy to you .
  • Make toys for your kids ! This can be origami ,sewing ,knitting , adhesive works . When you are making gift for someone ,its very fulfilling .If you enjoy, make more for others .
  • Write the long post you always wanted to . We all have grown past the era of reaction based social media posts. But there are always posts about the topics close to your heart, but which needed some reading, research ,reflection. Do that and publish .Don’t bother about the audience ,your topics can be cooking, dog care, garden ,hobby, economy, or kids or housekeeping tips. Making your point in good manner to others is satisfying . Post need not be text ,it could be photo ,song or video or paper notes .Do it .
  • I am against binge watching TV in such times .If at all you have to ,do it based on theme .Some era,actor,director,topic . That common theme gives meaning and keeps you clam .
  • Listen to local radio .In such times listening to same favorites can highlight the lockdown problems more .Local radio offers good randomization as well as personal touch via RJs.
  • Talk to neighbors .Obvious one but in city like Pune many people are still waiting to be properly introduced to their neighbors. The fact that you are in the same physical space ,in such times especially , warrant that you shed the inhibition, take risk and talk (safe distance tough ).
  • Read and make lecture notes .In such times forced reading can feel depressing .So if you are reading , take notes .As if your need to explain it to students or your grandma or kids. This adds meaning to reading .Now if you don’t want to talk to people near your about what you read(for some practical reason ).Put your summary on social media, blog or update Wikipedia or create slides or video and upload .The focus is on contribution over impression .
  • Complain ! We all had those small issues we always wanted to take up. Roads in your area , pollution , repairs needed in kids park and so on till some policy issue . This is the time to write those emails or raise those complaint tickets . Central ,state local govt has emails ,mobile apps and portals for this . Speak about what you feel is safe enough and matters to you .However small ,do it . The same can be done with service providers instead of government agencies . So you can also write to railways ,airlines, uber or banks about what you wanted to always tell them. But don’t do it to people ЁЯЩВ .
  • Watch family photo albums. If you are digital person then this is good time to check all photos on mobile and hard disks and order physical prints.

I am not including the usual list like gardening, pet care, calling family members, learn new language for 2 reasons .First such time filling activity list is know and available . Second is in lockdown times we need deep engagement as well as variety ! I will update this list over time ,Do suggest your own, in comments .

Last and never the least ,call everyone -talk to them small -big ,important-trivial .Hug them if it matters .How much ever we evolve our needs for connect and touch remains the same. They make or break us.

Categories
Software

Calling out the BS on Full stack recruitment

T recruitment in 2020 is living in Full (stack) paradise. If you are into the junior ranks which i.e anywhere less than 8 years of experience then Full stack is your zone. At higher levels, it might not be part of the designation but its always implied. But at that level, you are way better “experienced” to handle job and career .So this post is focusing on Ture Full Stack Developers (TFSD, a term which if not coined already, might become reality soon).  

The ask: Full Stack Developer (FSD)

The most popular description of FSD is a software engineer who can do backend and frontend, both. An alternative description is that FSDs do client-side and server-side development in addition to database work. In specific you are the one who knows to :

  • Work on UI  
  • Work on services 
  • Work on data storage 

Based on your IT stack this could mean web/mobile/desktop/low-end IoT displays for UI, some combination of web services/streams/security backing it and at minimum a database/cache/session working across.

Benefits of FSD 

For startups, this offers a sweet spot. We can work with smaller teams of talented engineers who can do the “whole thing”.Often FSD also leads to complete ownership of the “whole thing” to a developer. Which is why most training plans for entry-level engineering talent are Full-stack. In fact, it also expands to some orientation on OS, UX, network and so on. Rightly so. A good breadth both in training and work exposure is good for engineering organizations. Except that it is a means and not an end.

From Full-stack to Fools Stack 

Proficiency, expertise, and words like them are used in Job Descriptions(JD) of software engineering to imply a good quality of depth. Except that it should be Full-Stack. That’s asking “to have great depth across the breadth of the technology stack(we use)“. This is not asking for specialist developers with good breadth. This is asking for a specialist in everything! 

We even have cute words coined for them, LAMP-MEAN-MERN and so on, signal this very thing. And it works. 

The hidden fallacies 

Developing a liner flow of requirements fits naturally to how we think. We start doing one thing and can finish it well. The same linear flow can be coded full stack – end to end. Except for software development ,it doesn’t remain linear. Functionally as well as technically. The lines cross, merge-diverge, conflict and suspend. This needs specialization. If your org is working well with FSDs then you are sure to have these specialists hidden (and operating and sustaining your FSDs). 

Some examples. On an agile task board, the UI development might look like a diagram that needs to be drawn on a device/browser. But it also involves lots of animations, offline ability, support for disability norms. We have to also make sure that the components don’t make too many server loads and it needs to handle clickjacking and lots of web security stuff. And your business user also wants a responsive web design where the page supports text entry on full form but falls back to toggle on smaller ones. And yes we need to also support integration with the camera. And yes lots of browser types we need to support. And yes it will be great if somehow we can also make it work(render) on Alexa show or your watch.

These are not very unusual or problematic requirements. But they are so specific that one cannot handle it without going deep into core issues like HTML/CSS/HTTP/Device or delegating to some specialist.

The same can happen to your back end. We can start with some combinations of REST-microservices. And you need to also work with auto scaling design, support distributed commits, comply with tracing, also use some queuing. And we also need to support headless mode for some peer to peer calls. And some batches also. And some of the data can be binary. And we need to also use API gateway/service registry. And also support multiple service versions.

We could go on writing the same expansion of depth for the data side as well. All of which/this is not unreasonable. But taken together this is a lot. And we also expect the developers to understand and model the domain wisely (along with their tinder and insta ЁЯЩВ )

Yet we see neither FSD’s complaining or projects failing. For 3 reasons, I say.

  1. People are more talented than the slice of intelligence we pay them for. So they pull it off.
  2. This pull off is at the cost of some other super developer or their own passion for something else.
  3. The technical debt and bugs it creates are not accounted for in the delivery/shipping based criteria of the project’s success.

Why FSD is hard

In the time where I started my career, we used to call them technical architects. These were little experienced people who happened to work across the application and managed to retain the skills acquired. It took them time. But they had stronger grip and wiser intuition of it all.

Most of the JDs we see for FSDs are 2 to 5 years or similar experience. But FSD is hard due to multiple factors that play out.

We are coding to frameworks

If you the FSD JD’s they are full of frameworks. Frameworks are great in abstracting problems and offer a great productivity boost. But they don’t eliminate them. That’s the nature of an abstraction. In IT projects the fundamentals of technology, as well as design, show up unannounced. This increased workload is not factored in the FSD world. Not only does it cause increased workload for Jr developers but it also kills their opportunity to have a detailed understanding of how the framework builts on top of the underlying technology, the choices it made, the problem it solves and then ones it skips.

You mistake layering for the stack 

If we carefully analyze the full stack it closely aligns with how the projects architecture diagram looks like. Often the full stack is vertical slice of this diagram. What is, however, missing is that your diagram skips lots of techo-framework details due to its 2D drawing nature. Security, Monitoring, Deployment, Packaging, Scaling, Performance, etc. are part of the work in equal measure which cant be completely kept separate from Jr developer’s work package. And did I mention the design principles, process, testing, and documentation?

While FSD style hiring can give initial relief on staffing, we are greatly missing on maturity aspects.

Your stack is not alone

Oh yes, Unless you are a startup building the next uber/google/amazon or what it is. Your stack is not alone. There are always some enterprise systems that we need to integrate with. Some SaaS-based products, a BPM, an ERP, Rule engine. Some schedulers or some in-house “stuff” that is recommended as a norm.Or at least AI in included ЁЯЩВ . New hires are lucky if they are told about this with JDs.Often this is missed and needs to be paid for later, somehow.

Developers have inclinations

Each developer has its own inclination towards soft aspects of technology. A UI developer often called as frontend developer can intuitively realize the event-based nature or the aesthetic pleasure of laying out and the experiential nuances (UX) and pursue it. A server or DB side developer might like the notion of event sequence and the time-space nature of their work and hover there. And So on. May be younger developers are not able to verbalize it well, but when an able programmer says he enjoys it(his work), the reason is not comfort-zone but the sense of joy he gets.

The problem FSD creates for developers 

We can go on about structurally how FSD misses on lots of aspects of the actual work conditions and how it needs to be paid for later by organizations. But the developers who manage to pull of FSD tag for years have a lot waiting for them also.

Stack Stress

The frameworks change very fast. It’s very common to get a new version of your tool every 6 months. Some times the changes are also breaking. Taken together, full-stack. This is a lot to cope up with. On top of it, your project might not even choose to use the new thing. In which case the individual need to figure out how he will keep updated.

Dwarf experts 

The world is full of great brains. Brains that can pull off all stack development and brains which are truly masters of all parts of the stack. I love to work with such brains.

But are they so common? If not, then as the industry we are pushing the teens to war without letting them develop a deeper understanding of tech.

Resume driven development 

How ready are you to recruit a great swift developer for nodejs project? or an angular developer for React ? or hands-on Unix admin for Kubernetes?

The answers that we get from the hiring community and mangers are not encouraging. Everyone wants a perfect fit for the project without realizing that we are breeding disposable developers. But the developers know this intuitively. And they fightback. With resume driven development.

The greatest and shiniest thing has to be on one’s resume or we are willing to change the tech stack/project/company. (If only we were paying them much higher for such disposable hiring ).

Joyless Work 

Given the target of FSD hiring and this post is below 30 years developers. This is a major factor. The FSD hiring movement doesn’t talk of development plans, career paths, mentoring models or code retreats. We instead have hackathons, reskilling, upgrading. We have even stopped talking of reading long format books on our work area .The buzz in skills development is all the online courses. If we ask other arts professionals, the fundamentals give them joy and the latest style and trends let them keep their jobs. The FSD movement in S/W misses the technology fundamentals part.  

And I am not even talking why they also need to code on algorithms and data structures in their first-round(what a nuisance of proxy it is for talent) 

The Way out

The way out is to train them across the pyramid and be candid if FSDs mean disposable recruitment.

So much we talk about how fast the landscape is changing for technology professionals it is not the reality. The underlying technologies that drive our tech stacks change in span of multiple years. It’s only the stylistic solutions based on them change. Even then we often see these frameworks use designs and techniques from the same neighborhood. A very terse list [(System V to VMs to containers),(make-maven-npm),(taglib-web components),(grid computing-bigdata)(DW-ML)].

My approach was to always train them (or make them self train)on how the framework built up happened. This means knowing the basic technology in its bare form. Knowing the significant earlier attempts in the framework space that existed. And then training them the given framework. The same approach was used for the so-called tech stacks we had in our projects. We also exposed them to wider QoS needs that the frameworks might miss or partially cover. And the standard design approaches in S/W. This allowed them to see through the stack. This not only allowed them a great grip on them but also the new changes in these framework/space did not cause surprise.

I have been working in architecture teams.The examples I give here took anywhere between 3 to 5 years to train a good developer across layers and components of the products. These were also full-time direct reports. (often our mentor relations will continue across companies).

Chances are that the developer you are recruiting as FSD has done this/similar approach on his/her own. (S)He has also done the hard work to read a lot and do hands-on work. And will have to continue doing so.

But we must pay them well for this hard work and the tough job of keeping up to date. We must also realize these are the folks that seek joy in their work on the lines of a craftspeople and have different self-esteem than usual. Handle them well recruiters….

(and to these folks…I will welcome you all to the technology architect community soon, unicorns ЁЯЩВ )

Categories
Software

Generic Solution fallacy in IT

if we take word cloud of all the design discussions a technical architect participates in (or made to participate in ) generic solution would stand out as one of the key term. Be it a waterfall process or an agile one or even appraisals.

The claim is simple. There are multiple things that need to be done in an IT scenario and there is a generic solution that takes care of it. It is often also a direct claim to some efficiency or effort-cost saving. Which makes it very appealing in meeting rooms and is often makes technical people trip (the verb). Often it is not the case tough.

if we take word cloud of all the design discussions a technical architect participates in (or made to participate in ) generic solution would stand out as one of the key term. Be it a waterfall process or an agile one or even appraisals.

The claim is simple. There are multiple things that need to be done in an IT scenario and there is a generic solution that takes care of it. It is often also a direct claim to some efficiency or effort-cost saving. Which makes it very appealing in meeting rooms and often makes technical people trip (the verb). Often it is not the case though.

Examples of Generic solution claims 

In the era when NoSQL DBs were all that buzz, I was reviewing a generic solution that would allow connection to all types of DBs.What the solution claimed was that between relational and different NoSQL DBs the way to connect to DB was different so a generic solution was build to handle it. To the experienced eyes, this was actually a common wrapper for various DB. Internally there were factories that were forced under a Common Interface. And not to say a lot of IF-ELSE around DB_TYPE flag and so on. It wasn’t objectional as a proposal except for that claimed lot of savings and fell apart when DB specific constructs were to be handled. And DRY of what was in the field already.

Another example was when we were doing REST. This was more than a decade back and lots of legacy code existed with us. Again a generic solution. This was, hold your breath, a generic REST service. The claim was that is more effort efficient! This generic REST service would expect service name and all parameters in the header and a generic service message body. One needs to then just write specific handlers and bingo lots of effort saving. It was a long struggle to convince the involved that this solution folded the URLs into headers and the effort to write service related code was still there. In fact, the enforcement of generic had increased the coding work. Not to mention it had killed REST.

I had seen multiple variations of this. A generic integration toolkit for service integration. A generic authentication manager.A generic message parser, a generic webpage, generic deployment tools(cloud + bare metal), generic build tool, generic log. Invariably it would be some combination of factories-command-strategy that missed the essential complexity of specific processing and claimed to be a faster way to project success. 

How to evaluate such claims?

Given that most of such occurrences missed the same points, I use the following line of probing when I was to approve-review the designs.

  1. How did it handle the differences? (of whatever was summarized as generic viz different formats, protocol, delivery mechanism, etc. The answer would invariably be to write code to handle it )
  2. How would it communicate the different types of errors? (many times this would be a total miss or some generic error wrapper that needs to be parsed by calling party)
  3. How did it cater to the conditions that apply to the execution flow? (it would be either missed or one need to write code or sometimes a domain-specific language ie DSL was to be used)
  4. Does it/have to maintain some sort of state or stack in order to finish the execution? (this would expose deeper design flaws )
  5. How much effort would it take to add a completely new variation of specific to this solution(again a very fair question that would test the robustness of the design)

I would specifically not ask whether such a solution exists already or can we open-sourced it. The fact you are in this situation means the point is lost. I would also not ask which all design patterns apply which when answered would offer false proof of validity. The intent was to do a fair assessment and check if the generic solution discounted the specifics.

Invariably the generic solutions had missed the complexity of the specific and claimed that because it has been wrapped -it doesn’t arise (and hence the savings ). Gradual questioning like this would uncover the effort/processing complexity. This often leads to the generic solution giving space to rightly estimated solutions that represented the real depth of the complexity.

The positive side 

But there is also a positive possibility. Sometimes there is a real fitment that exists for such adapters(a very broad range I cover with this word). An expanded version of the above questioning makes the design specifications deeper and allows the team to correct the course. The example in the above list where a DSL was proposed to handle all common tasks applicable to our problem space was indeed a good solution that offered effort saving and also empowered the developers. We must also note that in such cases the correct term would be general-purpose as opposed to generic. It conveys the trade-offs neatly and effort aspects transparently. 

In another case mentioned above, a generic webpage solution was offered. This was basically a wrapper of HTML and JS that could handle a number of UI related needs we had. One could argue (and I also had my reservations)on merits creating markup language for markup. In the era where componentized micro front ends are proving to be practical, we could have dismissed this solution. In my case, we stressed it on the team that this is not a generic solution. It was, in fact, a templatized design-solution. This made the team aware of the enormity of the claim but it also allowed the respective scrum teams to make their choice if it really fit their scenario.

In cases where I had more control over the teams, we also used all such submissions of the generic solution as a training opportunity for the architects. It would often be contrasting their work with existing tools and frameworks in the mainstream and whiteboarding on how all their solution could evolve to a professional level.

But that’s about a positive spin. The appeal of generic solutions in effort discussion has not reduced….. I hope this post helps you with that somewhat.

Categories
Software

How I build my product engineering teams

The toughest part of software development is human communication. If we group together words like specification, validation, experience, exposure so on they all represent communication.It is the centerpiece of your development procedures. If we dig deeper into these words the essence of why software development is not a fully controllable discipline like many other branches of engineering we realize that we have idea-communication problems.

When we sit together with a newly formed product development team this is the first thing I stress. It is your idea of what their idea of whats customers’ idea of the reality is. And often even our sense of reality itself is incomplete, leave alone its articulation and understanding. This realization makes our developers more humble( especially the ones with a hackrank high), the project plans realistic and the leadership vigilant. But how do you make sure that like many other mission statements postered on the wall, or at the end of email signatures or as messenger status this doesn’t become the most ignored and broken often statement. Read on.

The hard aspects of product engineering teams

Product development is hard. Hard in the sense of how some things are computationally hard. A typical services project assignment masks a lot of complexity and preparatory work from your team. The idea justification and realization might have happened already and you get a curated feature list. User experience studies; focused group discussions; technology stack debates, prototyping, sizing and many “other than programming” tasks might be hidden from you to a varying degrees. But one can always go back and read about them once the project starts.

Enter products. A commissioned software whether inhouse or outsourced might have a large exposure area, both in terms of users, features and run conditions. When you do products this happens to be your baseline case. Add to it the complexity of providing features to customers of your product customers. It changes the game from being a good housewife(or husband) to teaching people the art of courtship. In particular It :

  1. changes your requirements from a list to a range (where wise choices need to be made)
  2. Exposes you to comparison with known and unknown alternatives (some of which could even be non software !)
  3. Stretches the boundaries of user behavior – run conditions and regulations by multiple sigmas (normal distribution analogy)
  4. Forces you to design for evolution (no longer a design ideal)
  5. Challenges your notion of S/Ws purpose ( when customization needs are considered, a specialized product can easily start looking like a general-purpose of that domain ) 
  6. Slowly introduces version infidelity (a cocktail of customer pressure, delivery delays, competitive threats, and bad design can entice teams into breaking the baseline into customer-specific releases(welcome to product management, service guys ЁЯШЫ ) )

and this is not a complete list but you get the idea. And we need to keep our teams ready for this ride.How?

I do it with what I call => complexity simulation.

Complexity Simulation

The first and foremost mindset item we need to put into the product team is that “programming language, data structures, frameworks & libraries are choices and you don’t have to always make all of them”. So is architecture ( but then I need to put lots of caveats, so I skipped). Between the time I started my career in products and now; great books and talks have come on this topic. So these days I can simply ask them to read books like code complete-clean coder and likes or ask a senior member to do a session on them( these days lots of code retreats that happen, also help a lot).

The main task of complexity simulation is to give them miniaturized product assignments. The idea is to give them specification that is

  1. Not an imaginary app but represents a real-world usage scenario
  2. Loose enough to allow choices but clear in scope ( so shared learning can happen )
  3. Has at least one occurrence of each QoS [Auth, Logging, Performance and some failure scenario]
  4. Is evolutionary (Prompt for a monolith and then graduate to modular or alike)
  5. Has some arbitrary and conflicting specifications ( like demand the design to REST midway, demand configurability just before the project is to end )
  6. Encourage lots of buzz words and latest hype (and then put requirements that expose their boundaries ).

A common thread in this approach was we would always have one external person walking in on a few occasions. He would sometimes question the approach, change some requirements and make some “suggestions” with intent to disturb their rhythm.

Many times we started with one person assignments and one of the disruptions was to then merge everyone’s code into a single repo. It was fun to see how long developers struggled to agree on common structure and design(despite all the training they went through).

In some cases, we would deliberately split the work across layers or components. This was to expose them to interfacing problems and also the problems on different in speed of individual development(and what they did with it?). In some brave cases, we even suggested code/module swap to simulate take over/maintenance.

Outcomes and learnings

The learnings were immense and broad-based on both sides. It was interesting to notice that when such projects were more functional (than purely technical ones )most developers would do some sort of domain-driven structure to their module. In technology-related assignments, there would be an obsessive overdose of patterns. At times they would suggest modular deployment in the first draft and it was fun to see the reactions (and later learnings ) when I would push for a monolith for the first version. The gradual evolution of their design, later on, made a lot of them smile.

Sanctity of Interfaces would always break! most good developers applied some sort of logging say: a log4 or at minimum console logs but forget to introduce meaningful traceability. Similarly, overlapping functional requirements like 5 types of banking accounts with their own special features and 4 types of roles that can act on them with varying authorization threw a lot of theory they had read off balance(say like REST, OOAD, proto links, schemas , reuse).

We would also schedule periodic peer reviews and I would particularly probe them on places where google’s help was saught and how they fitted in.

The biggest learnings, however, came in the experiment where we asked individual repo’s to be merged into a single code base.

The team would invariably run into chaos as to whose version was better but natural leaders would emerge and finally teams would self organize. By natural I don’t mean the first vocal person to occupy the mind space(which often turned out to be bad at teamwork, mostly the people on standby emerged as leaders who would guide the team to conclusion effortlessly). Tech jargon and buzzwords caused most frictions; it was only after we introduced a few common principles and vocabulary that consensus happened. I could go on detailing various such observations and how they changed as we started getting millennials in teams. But as an objective of complexity simulations, this helped our future teams prepared for the real.

In terms of experience, these teams could be a mix of freshers to say tech lead levels. Sometimes they would be new to the technology or be trained on languages/frameworks that we used.

In my opportunities with product teams, we have done various runs of this. We built: web-based chat applications(to demo lots of protocol and design issues), stock market apps(for RWD, grids and especially the spider web of 2 way communicating components); in some scenarios wrote our own version of MapReduce and toy file-based SQL engine an ESB engine of our own. And a few more which I can’t write lest I leak some company-specific designs. 

The main outcome

One might call this exercise as training. To be fair, much of the training in s/w is focused on teaching nuances of technology or framework and can’t afford to dilute their focus with the above aspects. Nor can hackathons (which are output-oriented as opposed to our approach of increasing the depth).

The biggest and not so obvious objective of my exercises was on the team aspects. Getting help, co-operating, keeping commitments, electing leaders, asking lots of clarifications are key skills. More importantly, managing conflicts, arriving at beneficial conclusions(as opposed to consensus) or responding to later stage changes, design rework and negotiating your way out of arbitrary requirements or time pressure are hard skills.

It is (also) this complexity that needs to be stimulated to working product teams(which cant come just by agile , methodology training). Many of my experiments ran for 2-4 weeks but with more self-aware, well-read and hands-on team members joining our teams these days, we also did shorter runs or few hours a day for a month side assignment. A few cases it would be a one-person run(High potential development,you see ЁЯЩВ ) . And there was a different version of this reserved especially for tech leads and budding architects ( more on it in some other post).

The only pitfall was personal equations, hype or self-doubt could seep in silently. But these were expected. And these were my teams so we took care to confront these later on.How? In future posts …

Do tell me what do you think and your experiences as a technology leader in charge of building product engineering teams.