Tag Archives: Philosophy

Are You Becoming What You Do Not Admire?

 

I was reflecting today on the movie “3 Idiots”, arguably the greatest movie hit in India (the Idiots are called so because they do not fit convention, not because they are dull or lazy).

We see one Idiot who grows up over the course of the movie to develop a spine, to get courage and confidence to do the right thing, to be honest and truthful no matter what the stakes. Continue reading Are You Becoming What You Do Not Admire?

Smart Work vs Hard Work – A New Perspective?

 

Smart Work vs Hard Work. Which is better, which should be valued?

This question haunts every workplace, and successfully confuses everyone. There are camps and devotees of either side, and convenient converts depending on situation!

It is actually quite simple, if we see some facets clearly. Continue reading Smart Work vs Hard Work – A New Perspective?

Can Weekends Begin on Fridays?

 

Weekends start on Saturdays. What if they could start on Fridays? What?!? Are you out of your mind?

Hmm.

Carlos Slim set the dialog rolling for fewer workdays recently. He advocated 3 11-hour workdays a week. Larry Page has referred to a 4-day week. Debate has continued, with views ranging from impracticality to glee. The more I think about it, the more I believe it is worth trying.

What if we actually do it while the world debates about it?

Allow me to share some thoughts – benefits, problems, constraints, and possibility.

Benefits
Contiguous time off from work helps our minds to relax, and our fires to recharge. It means time for hobbies and interests. Learning for techaholics. Research for thinkers. Tinkering for doers. Open-source contribution or personal projects for workaholics. Ideas for would-be entrepreneurs. Community and social work for do-gooders. Parties for party animals! Travel for travel-lovers. Family and kids time. Romance for couples. Sports for sport lovers. Home travel for those from other cities. A mix of all of the above for most of us!

Better life. Broader outlook. Broader minds. Better work.

Problems

On days you work, your work of 11-12 hours blocks out the rest of life. Those days can be more tiring. Work can suffer. An organization with longer weekends may be mistaken to be lazy, under-ambitious, and neglectful of work.

Constraints

With many benefits, fewer work days seem attractive. But there are constraints we have to consider.

Commitment
Every organization commits something to its customers/clients. At Mindfire, we commit 160 hours of work a month, 40 hours a week. Anything less and we have to suffer – when the organization earns less, everyone earns less. Work is the economic activity which generates wealth for all. Income is carved from eternity with our time. When income suffers, everyone suffers. That cannot be allowed to happen.

Non-work activities at work
In flexible workplaces, most of us have some non-work activities at work, perhaps about 10% of the time. In other words, 40 hours of work need about 44 hours at work.

Possibilities!

Now let us consider the possibilities.

3 x 11
3 days of 11 hours each is 33 hours a week, so that is infeasible.

4 x 11
4 days of 11 hours each can mean 40 work hours, which is feasible. However, getting clients to agree to one day off every week, even when other days are used to make up – is tough. Anything which harms work, will harm those who work.

4 x 10 + 4
Practically doable, similar benefits: 4 10-hour days followed by 4 hours on Friday!

This would mean 9am-7pm or 11am-9pm or whatever, Monday through Thursday, and 9am-1pm or 11am-3pm or whatever on Friday. Work ends and the weekend begins with lunch on Friday! Yay!

Interesting? Interested?

This could be a giant step for work, a small leap towards Work 2.0.

What do you think?

 

A Short History of Desktop Operating Systems

 

At the beginning of this millennium, the PC/OS wars had practically ended. You used Windows everywhere. Only some companies like Mindfire, which worked on Apple Mac development, had any use for platform diversity. Everybody bought Wintel – because you had to. Software was made for Windows only in most cases, so being on anything else meant being unable to run most things you needed.

Then, several unexpected things happened.

First, Operating Systems. The OS landscape changed. Apple made a spectacular comeback, and working on a Macbook was cool again. Mac OS X flew high. And Ubuntu rose from the ashes of Unix and Linux fragmentation, unifying them and making a friendly Linux.

Second, the Internet. The web became dominant platform for app delivery. Functional software that looked grey and dull, was suddenly all over the colorful web. Chrome and Javascript/AJAX hastened user experience on browsers that rivaled native desktop software.

Third, Design. Or, the ascent of design. Apple led the charge, and the world of tech grew to appreciate design for what it was – the yin for its yang. And those dull grey apps died a quiet death.

Fourth, Consumers. Technology exploded from enterprise/business to the consumer setting. Revenue started skewing towards consumers – although that died an early death due to our next point.

Finally, Devices. In came the world of smartphones and tablets, which changed the meaning of computers. And led to the creation of cloud. And desktop platforms became just one out of many access points for the cloud. Which leads to the Internet of Things. Coming next.

 

All the above made desktop platforms a choice, since the world of computing was no longer restricted to the PC and OS you used. Today, consumers buy Mac systems and techies buy Ubuntu systems, without needing to think what they will not be able to do. Because they can do everything.

At Mindfire, we celebrate this victory of choice with a commitment to platform diversity. Mindfire is investing in Ubuntu and Macbook laptops, aiming to have at least 15% of our people on Macbooks, and 15% on Ubuntu.

Why is diversity important?

A rainbow is interesting only because it has all those colors.

 

Pre-paid Salary: The Shocking Result of Our Poll

Few days back I wrote about salary traditionally being paid after work is done (end of month), and how it could possibly be paid in advance of the month as pre-paid salary.

After that, we ran a poll with 600+ people inside Mindfire. This was not an academic poll – it was an actual serious offer to change salary to be on pre-paid basis. The result was pretty much certain – people would obviously always want salary as soon as possible, and before the month – before work is done – is sweeter than honey. Obvious, right? Right?

Wrong!

The results are an absolute surprise.

About 70% people voted. Of those, 60% people voted for salary at end of month – same as today! 7% voted for salary in middle of the month, and 33% voted for salary before the month begins. If you regard the 30% absentees as voting in favor of status quo, it is a straight majority for post-paid salary, at 72%!

I have no idea why people do not want salary before work is done. Maybe it is self-respect. Maybe it is maturity. Maybe it is to be in sync with rest of the world. Maybe they trust Mindfire and salary is not an issue. Maybe people see no reason to do it, and no benefit of doing it. Maybe there is no need for (earlier) money.

One thing I do know: thankfully we didn’t just start pre-paid salary without asking people for their choice. It was dead simple “obvious” and “certain” that people would like it, so we could have just rolled it out in the comfortable assumption that people would appreciate it. But asking people allowed us to get true pulse. And now we know better – people don’t want it. And there ends this adventure!

Lesson learnt: it is dangerous to assume, even on seemingly “obvious” things. The world is full of surprises!

 

PS: It would be interesting to run similar polls in different organizations, and check what patterns emerge. If you happen to run it in your team, do let me know how things go!

 

Why is Salary paid after Work is done?

Since my first job a couple decades ago, I have always been intrigued by a tradition in the world of work. It is so embedded in our minds and expectations that we don’t question it.

Salary for a month is always paid at end of that month. Sounds simple, right? But my question is: why?!? Why is salary paid after work is done? Let us look at this from various points of view.

 

Unknown Amount
In case of electricity, water, phones – you have to pay based on consumption. These have to be paid after the month, because it is not known how much you will consume during the month. Makes absolute sense. But salary for the most part is known and predictable – correct?

Trust
In real estate, you pay rent before a month begins. It may seem like the owner is trusting you with his house, so they expect pre-paid rent in exchange of that trust. In reality, it may just mean that the owner doesn’t trust you. In case of organizations and people working in those organizations, sure the organization is trusting you with its work. But aren’t people trusting the organization with their skills/energy/time? What if the organization shuts down, or willfully defaults on paying salary of people? Did that one month of work go waste? Should the organization have a larger heart in trusting people, or should people be required to trust the organization?

Risk
Sometimes, organizations delay or do not pay salary stating that customers have not paid yet. True, possible, and sad. But should business risk be transferred on to people working with the organization? Unless I am an owner, why should customer and business risk be forcibly transferred on to me? How does it matter to my effort-salary expectation, if customers have not paid?

Economics
A month’s fixed-deposit gets you about 6% annual interest, or 0.5% monthly. By paying salary at end of month, an organization gains 0.5% of the month’s salary. On a salary of Rs 40,000 a month, we are talking about Rs 200, which doesn’t sound big. But look at it two other ways. One, take 500 people, and we are looking at Rs 100,000 as the financial benefit, which doesn’t sound low any more. Second, from a person’s individual perspective, Rs 200 has tangible value. So the question is: should the organization be enjoying this economic benefit, known as the “time value of money”? Or should people be enjoying it?

Power
In business, power play dictates timing of payment. At one end, large companies put smaller vendors on net-30, net-60 days payment as a signal of power. At other end, suppliers insist on advance payment when they know their stuff is selling like hot cakes and demand is greater than supply. It is a power game. In today’s world of work, especially in industries that are people-heavy such as IT/software companies, do organizations have more power or do people? All such organizations profess a philosophy of “people first” – shouldn’t they put their money where their mouth is?

Need
Organizations need money for ongoing operations. This is known as “working capital”. Well, do people not need money for ongoing lives? Who needs it earlier, who needs it more? Who has the wherewithal to raise required finances easier? By paying for work at end of month, an organization successfully delays its need for finances (for salary) by a month, easing its working capital requirements. But whose need should have higher priority?

History, and Everyone
The human mind is trained by history. We do not question practices when “that’s how things always have been” and “that’s how everyone else does it”. We know in our gut that if there were only one way to do a thing, the Kamasutra would never have been written. And we know in our gut that if things were always done how everyone else does it, Apple and Steve Jobs would have never thought different. But both these things afford a sense of comfort, of familiarity, like an old warm blanket on a cold wintry night. Isn’t it safer to just stick around, than to stick out? Why question and rock the boat?

 

Conclusion
Someone asked George Mallory – “Why do you want to climb Mt Everest”? And he replied – “Because it’s there”. Some things don’t have rationale, you do them because you WANT to do them.

Similarly, some other things don’t have rationale, you do them because you CAN do them. I will leave you with this depressing conclusion: there is no logic or rationale. Organizations pay salary after work has been done simply because – Because they can!

Opinion
Personally, I believe that if a person is contributing his or her time and energy and effort to a greater group (the organization), the person has more at stake than the organization. And if you see my thought process on each point above, I am obviously in favor of salary being paid before work is done.

 

What do you think? Is it time to change this practice, to establish a new order? Is it time for salary to be pre-paid?

 

Who Should Software Developers Care About?

Manager/Lead or Client – who should developers care about?

Neither.

Software developers in outsourcing companies are a harried lot.

Demands come from multiple quarters – Lead or Manager, Client, Colleagues – to name a few. Sometimes a CEO and other random people are also part of the group. In large organizations, Marketing, Interaction and other teams join the party. And often there are multiple people of each type above. Time is always running out. And sometimes none of these people agree among themselves! What is a software developer to do in such a situation? Who should s/he care about? Who is most important?

None of them.

Software is made for a purpose.

That purpose is to be used by people for something. The only thing that matters in making software succeed, is whether Users will use it. If Users use your software, everyone will be happy. If Users don’t care, everything is wasted.

All the people above – Lead, Manager, Client etc – are representatives for the User. They are people with good intentions, but they are maya – illusion – from the software’s perspective. The only thing that software cares about is whether Users use it or not.

Software that is used is happy software. Software that is unused is grumpy software.

It follows logically that if software cares only about its use, the developers of that software should primarily care about the User. Generally, Client and Lead and others are also doing the same thing – they are planning and prioritizing and designing and doing everything for final User.

But!

Your Lead may find a short-cut that ignores user. Your CEO may want something done that is good for your company but bad for user. Your Client may prioritize something where user is short-changed. On top of this, ego and personal views may come into play.

In short, sometimes (although rarely) these other players may not have user in mind. In such situations your duty is to ignore them. If you can make them see reason, good. If you cannot, you still know what is right and wrong, because you know who to focus on – the User.

Your final responsibility is to the User. Your job is to make good software that Users love.

As a developer, your User is unknown, faceless and often doesn’t exist except in the future. It is easier and tempting to think of the representatives as real, and the User as maya. At core, it is just the opposite.

But my Client pays my company! But my Lead decides my salary!

In the place-time continuum of life and careers, you will find that the experience of making good software is what you will carry forever. Everything else will float away. Your Company will change, your Colleagues will change, your Client will change, your CEO will change, your Lead will change. But that experience of making good software that users use and love and you are proud of – that experience of exhilaration, that pursuit of excellence – that  will never go away.

As humans, we sometimes do what our head tells us, and sometimes what our heart tells us. But through it all, our conscience guides. Think of Clients and Leads as head and heart, and User is conscience. Client and Lead may tell you what to do, but let User be your guide throughout. As in life, so in work.

Use Users as your yardstick in all situations.

When in doubt, think of Users. When not in doubt, think of Users. Everything and everybody else is maya.

 

Celebrating Awesomeness

mvp_blackonly


Let us meet someone interesting today.

One of our software engineers at Mindfire, Tadit Dash, was recognized by Microsoft this week as a Microsoft Most Valuable Professional (MVP) for South Asian region. His MVP profile is here. You can read about Tadit’s journey here in his own words. On tech side, Tadit does his stuff on ASP.NET and Dynamics CRM.

It is wonderful to observe Tadit’s enthusiasm and vibrant participation in the global developer community – mostly at CodeProject and also on StackOverflow. Excellent.

Tadit has done all of this while being on projects constantly, and with continuous happy delivery for all projects he has worked on. Brilliant.

When desire and direction combine, time bends to the will.

Tadit is a great example of the type of people we want and love at Mindfire.

People who love technology, people who want to connect, people who want to carve an identity for themselves, people who are responsible, people who are passionate. People who are bound to their own work and talent and reputation and identity – not within the boundaries of an organization or role, but floating on the unchained melody of the unbounded universe.

People who intuitively understand the obvious – things like companies and designation and salary and teams and projects will come and go – what stays with you for your life is the knowledge you gain, the reputation you build, the well-wishers you have, the abilities you possess.

People who see beyond, and rise above. What fate and fortune give, they multiply.

I have never met or spoken with Tadit.

His story inspires me. Coming from the small town of Nayagarh, Tadit joined Mindfire at Bhubaneswar 3 years back. After proving his worth at work, his voluntary energy led to  responsibility for “extra non-work stuff”, and subsequent awards, at Mindfire. He moved ahead to receive a CodeProject MVP award few months back, and now he has received the Microsoft MVP recognition. That’s not all.

He is not only Mindfire’s first Microsoft MVP, but also the first Microsoft MVP from Bhubaneswar, a city with 10,000 software engineers! Wonderful.

If Tadit can do it, so can you and me.

Be awesome. Be Tadit. Look beyond today – build a brilliant tomorrow using today.

Let us think about this story over what is, hopefully, a happy and inspiring weekend.

Cheers!

 

It isn’t Hard to Hard-code!

Recently I came across an interesting programming situation.

Parts of a web-based system stopped working suddenly, with nothing significant having changed. After some finger-pointing and accusatory guessing, it was discovered that some scripts on server side had been shifted from /root/1level to a deeper nested folder, let’s say /root/1level/2level. So far so good.

What happened next? Why would that make a system stop working?

Code needed to find path for some processing. The code split on first backslash to find file name, implicitly assuming that the file would always be one-level deep from root. When the file was shifted into a deeper folder, the path extraction stopped working.

There can be arguments about whether the admin should have shifted files into a deeper folder without informing developer, or why this should not have been done at all, and so on. But I consider this a clear elementary programming mistake of the hard-coding variety.

Hard-coding does not mean just typing in numeric or string literals into code, although that is the obvious college-level hard-coding. X = 420 or sEndDate = “1/1/2022”. It also means any type of inflexibility embedded right into the code and program. Hard-coding means not understanding the need for flexibility and not writing elegant code that can adapt to its surroundings.

Hard-coding is called “hard” coding because anything hard cannot be molded to suit the need at hand, because it is inflexible. Like when you put in an assumption that your file is one-level deep,, which makes it inflexible to run when its level changes.

What would be the right way to deal with this?

Step 1: extract path in a loop, so that you can handle any level of folder-nesting. You don’t assume you are N levels deep, because folder-level is not something that can be assumed! Instead you traverse the path to find how deep you are.

Step 2: Back-slash? Welcome to multiple OSs! The file-separator character itself is hard-coding. In every language worth its salt that runs on multiple OSs, you have operators to find environment variables including file-path separators. On Unix/Linux you are “/”, on Windows you are “\” or “/”. On Mac you had “:” long back during MacOS, and now you have “/” on OS X with its Unix core. And then I was on some Solaris/RISC machines decades back which used “.”.

Should you hard-code assumptions about N-level nesting and separators? Absolutely not.

Does it need extra time to write flexible code? Absolutely not. The amount of time you spend later in not writing tight right code in the first place, so much of debugging and frustration and rework – it would all be avoided if it were first-time right. And to write above path-extraction code in a loop with separator detection rather than hard-coding – you are talking about couple extra minutes. Take one less leak and you can find time to do the right thing!

Is it rocket science that an average programmer cannot do? Absolutely not. Once you decide to do things like this, it is pretty easy actually.

Then why do people not do it?

Because of mediocrity. A mediocre mind is happy with sub-standard work that somehow passes through. Because of lack of involvement. When you are pushed into a “career”, you are least concerned with your quality of work. As long as the next raise comes around, who cares! You are not a craftsperson to take pride in work, you are just a code jockey.

This, ladies and gentlemen, is the difference between a good software engineer and someone who just gets things to work. A good software engineer anticipates need for change and does things first-time right. A good software engineer thinks ahead and does things in flow during first-code which take very little additional time to do. A good software engineer does not hard-code, either directly as literals or indirectly as implicit assumptions.

Someone who is just a programmer does not do any of the above, and just somehow gets things to work – never sure when it will fall apart.

Now you decide what you want to do.

 

QueenMoviePoster7thMarch

Reflections on “Queen”


QueenMoviePoster7thMarch
As with every good movie, the story and characters of “Queen” have subtleties you can reflect on, in different contexts. If you have watched the movie, read on!

Right Person in the Right Place
Whether it is casting Kangana Ranaut as the innocent yet liberal Rani or Lisa Haydon as the wild yet affectionate Vijaylakshmi, or Rajkumar Rao as the suave yet creepy jerk – each actor has been hand-picked to fit their role perfectly. This meticulous job at casting does half the director’s job, with each actor naturally cut out for their character. Actors can adapt, but with natural fit one can get a sense of comfortable flow.

The Past Casts its Shadow
We come across characters whose thoughts and behavior today are driven by their past. Rani goes into her own past often, and learns about past lives of several characters. Taka’s attempts to forget, Oleksander’s desire to do his own bit, Rani’s suppressed self and the joy of new-found freedom – characters perceive and respond based on their past. The past is a prism on to the present.

People and Circumstances
While going to visit Roxette in a shady area of Amsterdam, Rani comments that this is perhaps the wrong place – obviously a little unsettled by the environment. Once she meets Rukhsar (aka Roxette), she recognizes a person making a living the best way she can. And in that moment, she understands in her liberal mind that the person and place are different. Circumstances are not the same as a person.

Life has to Go On
An individual, a family, a team, an organization, a country – every now and then each of these have to leave the past behind and move on. The plastered hostel walls are a way for residents to leave a piece of their soul behind when they vacate, so that they may move on and renew their soul without any baggage of the past. You have to respect yet bury the past when it is time to change.

Accepting Differences
Rani meets people who are very different from herself. The bohemian free-wheeling Vijayalakshmi, the pole-dancing Rukhsar, the male friends who live with her and accompany her to a kink shop – these are all new people from a very different world than hers. Yet she connects with them at a deeper level. The people she rejects are the socially acceptable superficial people she knows since years – Vijay and the rest of his clan. Shared human values triumph over language and nationality and other artificial differences.

Craftsmanship
The Italian chef, Marcello, treats his food as his creation, one that has his spirit and soul. It is work born out of love, not for money alone. Rani’s attempts to change it to suit her taste causes him to react strongly – he loves his creation so much that he cannot tolerate disrespect or disfigurement! You react only when you are emotionally invested in your work, else you are indifferent to opinions. Craftsmanship and pride go together.

Money and Value
Marcello does not want Rani’s money for food she didn’t like and didn’t eat. He tries returning it right away, unsuccessfully, but remembers and returns it next time he meets her. Money that comes without any value being delivered is just money, not worthy money. Whereas money is just money when it is used (as Roxette expresses about the money she sends home), it may or may not be worthy when received. To desire only money we are worthy of, and truly earn and deserve, is character.

Quality Speaks for Itself
When Rani’s gol-gappas become a hit, one can trace it to one individual asking for a trial. And while the immediate reaction was disappointing, he goes on to enjoy it – so much so that he asks for repeats. Quality speaks for itself, and is helped along by word-of-mouth, and soon her stall is thronged by customers. Sounds far-fetched but anyone who has had gol-gappa/puchka/gupchup) will agree whole-heartedly! Good stuff can stand its ground.

 

Now let us take our musings one more step. If you were leading an organization, a team, a mission, yourself…
How would you ensure people are in just the right role where they can bloom and flourish?
How would you appreciate people better based on their past life experience?
How would you separate your view of people from circumstances?
How would you shed the past when moving in a new direction?
How would you recognize and accept people very different from yourself?
How would you build a desire for, and a sense of, pride in work?
How would you create a sense of self-respect – money is to be earned not received?
How would you make quality stuff the world wants more of?

And if you could succeed at the above, wouldn’t you have built a superlative unit?

 

Enough said, hope you just enjoyed the movie!