Hours after I drafted this post outline, I got an e-mail from Steven Sinofsky’s blog Learning by Shipping, coincidentally his latest blog post, “Focusing on the work, not the methodolog” is highly similar to this one, albeit more inclined to software development.
A few months ago I have attended the lectures of a compulsory module in our college foundation course, the Moral Studies. Inside it we have discussed ways to determine best course of actions in many situations, but unlike the moral education in primary and secondary schools, this version allows for more open-ended choices. Are you morally eligible to kill 10 people with the potential of saving 100s? Or is it wrong just to kill, but it is right to let 100s to die? Should we focus on our actions right now (Mean) or should we emphasize on getting the best results at the end of the day (End)? This is interesting!
This is more of a consequentialist and nonconsequentialist matter, but we do apply this into our real life decision making. Soon I will show you they are not that different, be prepared to fry your brain.
A consequentialist, like me, prefer to have the best result in longer timeframe as possible, hence sacrificing certain aspects in shorter timeframe. While a nonconsequentialist focuses on short-term gain (for example, prevent some should-be-dead-people from dying) but does not place emphasis on long term losses or gains. To a nonconsequentialist, his world reaches out as far as what he can see, and to a consequentialist, I hope to control the future, by placing less emphasis on short timeframe and hope to achieve the best results at the end of the day.
Soon you will realize why lazy people can be somewhat successful, I admit I am lazy person, I spend more time in my brain than putting them into course of actions, but that helps me a lot. It doesn’t matter whether can we do it, it is more to should we do it? I believe time travelling machine can be made, but that does not mean it should be made. TIME TRAVELLING MACHINE SHOULD BE NOT MADE. It will cause more trouble than it saves, and this is how consequentialist thinks.
You might think that consequentialists are assholes, thinking about doing inhumane and immoral things to achieve better results. No, we are just being considerate, some ethical actions can lead to disastrous results and thus rendering what they did in the first place, unethical.
Without the ability to see what happens in parallel universe, nobody is absolutely right or wrong. Decisions boil down to good judgement skills and it depends on how visionary a leader is.
For example, a great leader will increase the price of fuel. Sounds terrible as it rips off the wallets of people, but soon many people can no longer afford to drive on their own and the extra money from subsidy are diverted to development of public transports. With the high accessibility of public transports across the nation, we no longer need to buy a car with debts and pay for the expensive fuel. This is what happens in small countries like Singapore ad Hong Kong. What’s more in even longer run, our planets will be greener, traffic congestion is thing of the past and everybody lives a far more happy life.
And the timeframe can span across half a century, but is it worth it? In short run it sounds horrible, people are going to protest. But if people are educated enough to foresee the future and believe whatever their leader done is right, everybody is gonna be happy. And that is my ideal of consequentialism.
But how do we apply it to IT industry?
We have plenty of software development methodologies, agile, waterfall, spiral, nonozzzz. They are created for different purposes and different situations. Some people get dogmatic and religious and believe that agile is everything.
This also applies to whoever that claims:
- One language is everything
- One operating system is the best
- Apple is a blatant rip-off for overpriced junks
Be pragmatic and decide per situation. We should focus more the the results we want to achieve (End) with the best course of action possible, judging from time, cost, and availability of resources (Means).
A good developer will know that Means are merely, means. They are just a way to solve a problem. A dogmatic programmer however thinks that his mean is the best, and he tends to distorts the problem he is supposed to solve – which is what client wanted. He will end up using the unsuitable system, stack and methodology because he got religious with them. This is not funny.
It happens all the time. Now let’s look at some case studies, they are not that profound but may open up your eyes in certain matters.
Case Study #1 TakeUrTime
During the orientation week, the admin people taught us how to check our timetable with their ugly webspace. The best part (the other way round) is, the timetable changes weekly and can change anytime in the middle of the week. Though they seldom change, but we are obligated to check our weekly timetable everyday.
Scrolling through hundreds of intake codes to find mine is not funny, it is tedious and worst part is, they don’t allow bookmarking. What an advance student web portal as Malaysia’s No,1 IT university.
I focused too much on factors of impression and end up solving only one problem, which is allowing people to bookmark. But soon until I realize I cannot store timetable for offline usage effectively with it on my iPod Touch, I know I need to write one more, and this will kick ass – TakeUrTime.
There are couple of problems I need to address and I listed them down as my objective:
- To make it available for offline usage (Cache Manifest + DOM Storage)
- To make it FAST (Reduce loading time)
- To make it reliable (Use Chrome + Safari Dev Console)
- To make it look 100x better than the one on webspace (CSS3)
And the mean I defined for this?
- Use HTML5
But in real world, if you examine this carefully. You will noticed I inverted Means with End. So in short, my END is actually to learn and apply HTML5, while my means are to solve problems with respective techs. Did you notice I appended the actual Ends at the end of each Means?
The end product? It solves not only my problem but it enhances lives of many APU students as well. As of now the app has 200+ fans and approximately 10 users per day as recorded by Google Analytics.
The key of success of TakeUrTime is because I:
- Scratch my own itch – I am my own product’s user, dog food FTW
- Clearly defined the problems that I try to solve, and the problems are not made because of just Means told me to do so, but what I really am trying to solve
- Am impatient. TakeUrTime remains the fastest APU timetable ever!
From this case study, we have learned that it is entirely possible to swap Means with End. In software company, for a software team, their End is to produce a software. For the business team producing a software is only a Mean, and selling them is also another Mean, the profit is the End.
Case Study #2 Chartboost
Sometimes when you open up your iOS or Android game, you will see a popup ads telling you to download another game. The advertising platform behind that is probably Chartboost.
I don’t exactly dive deep into what Chartboost does with their tech stack. But what they wrote in their blog taught me something.
In the modern world of agile startups and silicon valley, the buzz is all about Ruby, Python, and whatever the latest cool programming language or framework to come out is. Older technologies don’t get much love, and PHP especially has a bad reputation. In this post, I’m gonna go over why and how we use PHP as a modern technology, and the various other tools, techniques and development methodologies we employ to run as agilely and elegantly.
– Kenneth Ballenegger, Architect of Chartboost, in “Running a Modern Startup on PHP”
True, everyday people on their tech news, programmer groups and user groups are bashing certain popular languages. But PHP is damn popular, there must be a reason behind it.
For me PHP is my first programming language, actual it is LUA but I did LUA without a manual so it does not count. PHP showed me it is possible to build a Facebook and how. Facebook is a bit too big for a newbie like me though.
But as you read through their blog post, you will notice they have very good reasons to choose a seemingly amateurish and unprofessional programming language. Yes they focused on the Mean, but it is because they have their End clearly defined. They did not let the Mean dictate the End.
Just because Python is neat and cool does not mean it is perfect in every cases. Just because C++ is extremely fast and efficient does not mean it should be used to build TakeUrTime.
So what the End is? To be able to deploy as efficiently as possible with the most suitable tools at disposal. And they listed good reasons to pick an uncool language to do so.
Case Study #3 Hiring Developers
This is not exactly case study, but I will just spill my thoughts out on this.
Maybe you want to hire a technical guy to carry out some technical wetworks you don’t really have knowledge on. I assume that you are in position as a person who does not know much about tech, but you have heard about some buzzwords like Java, C++, Visual Basic that you don’t really know.
You want a website for your small business, so you start to call a freelance web developer and discuss with him.
The worst sentence you can ever say out of your mouth includes:
- Can you use Dreamweaver to build a website for me?
- You must use Java to do this, no excuse.
- I want the website to have Flash!
- Use a lot of keywords, spam it until Google ranks us to the top!
- Build a blog, don’t be lazy!
- My company site is slow, the previous irresponsible freelance web dev is gone (pissed off by you probably), can you put more server to make it faster ah? RM100 can or not?
Burst out laughter, but this sometimes happen, not on me but I can imagine in my head. I have witnessed non-IT versions of this situation before.
As client, you need to trust your freelancer you give jobs to, focus on End, not Means. The reason of this is because you do not know what the best Mean is, that is why you hire somebody to do the job for you, you do not have the domain knowledge. You need a professional to do the best thing on your behalf.
Here are some good examples I would love to hear from my clients:
- I want a website
- I want a corporate blog that attracts people to come and buy from us
- I want to know what my site’s visitors like and improve them
- I want to be at the top of Google search, can you help me?
- My site is slow, can you check my site and if possible, to improve it?
Developers respect their employers for placing trust on them. Trust the guy you hire and you will gain respect. They will take the best course of action possible because you do not lock them down with a single Mean that you do not even know about. Let them choose, discuss nicely, state your problem (End) and let the developer informs you of different routes of solution (Means). You will be able to save time, cost, and get a product that exceeds your expectation.
There are a lot of benefits when you start to focus on End, then Means.
Sum it up
Try to start thinking in Means & End in different decision making. Pick up the newspaper and state different Means and End in different story, politics especially, and you will start to realize there are a lot of missing pieces that when you put together, you will be astonished.
Practice 5 Whys, this will uncover a lot of truth, as well as helping you differentiate symptoms from problems. This is an extremely important problem solving skill I wish everybody knows.
Look at the Big Picture, zoom out from your world and try to understand why people act accordingly. Put their Means and End together and look at the puzzle you put together. And start to apply this way of thinking to everyday’s life.
Let no Means dictate and distort your End. Instead, determine the best Means to achieve your actual End.
“Rules of Revolutionaries” by Guy Kawasaki. This book changed the way I think to some extent and I highly recommend it. Involves teaching you to change Means completely and sometimes the End is seemingly changed. But at the end you will still arrive at one ultimate end – success. Got it from Book Xcess in Amcorp Mall at very low price like RM 17.
“The Lean Startup” by Eric Ries. You will learn the rigorous methodology to conduct experiments and know when to change course, or they call it Pivoting (Changing Means as a part of the big Mean).