Blog

  • Underestimating software

    My wife shared an interesting thought this morning over breakfast. – Theory is when you know everything but nothing works. Practice is when everything works but no one knows why. If theory and practice are combined, nothing works and nobody knows why.

    Over countless experiences, shared by many people, big or small, IT is still an art. What’s more, it is still an art far from perfection. IT, in particular software done in large organizations, has this syndrome. Many good things get done, yet large IT projects “always” fail. I’ve yet to come across a successful project. There are many good projects, Apache Software, Google and like, but in as much I think about it, these haven’t grown successful overnight. Part of the impression of success is adoption, and proportion of people who are affected, in other words, who depend on using it.

    I may not be touching on something yet unknown here, but just how many methodologies, principles, guidelines, theories, languages are out there? And of those, how many have got you really convinced to solve your IT problem guaranteed? Is it MSF, or TOGAF, or ITIL? Is it AGILE or LEAN or TQM? Is it proprietary or open source? Is it platforms, or home-grown? Is it C# or X-Code? Is it OOP or Procedural Programming? Is it Russians, or Indians? Is it lack of documentation, or is it lack of requirements articulation?

    Let’s consider for a moment the ideal state – person A has a problem. Person B offers and gives person A a tool to solve the problem. Person A is happy. Problem solved. Person B too is happy. Imagine this for a moment with a simple need; let’s say lunch in a restaurant. You’re hungry, you go to a restaurant, order, eat, feel satisfied, and offer compliments. Your need is solved; both you and the restaurant are happy.

    Is preparing food a new thing? Is your way of ordering different? Did you have to think much over this, except perhaps decide on what you want to eat? Or buying clothes? Okay, maybe one can go far with this, and say there is always customization – order made dishes, or order made suits, or order made software.

    Why is building useful software fast so difficult in our organization today? Will we ever get something done quicker? I may be completely wrong, but problem is not in the way we are doing things, it’s the approach with which we are planning to do our next steps. And this is not as easy as saying follow MSF, or TOGAF ADM, or ITIL “IT as a service” ideas. More than often, these are confusing to begin with, get understood differently, pushed unnecessarily, and carried over as a burden to the next guy heedlessly.

    Today more and more of us are working for software, instead of the other way round. Not to say, the practice is when everything works but nobody knows why seems to come more frequently than I had anticipated. Ever changing need to change something, time-pressures, individual ambitions all seem to have a coherent effect on just making things further complex, not simpler. And when things go to that stage, it’s a point of no return, people continue that as if it was a household chore cleaning dishes – you don’t get any fun, or see anything of value in it. Soon it becomes a “that’s the way we do things around here” common-sense and everyone gets by this, leaving a yet subtle roadblock to overcome before we begin thinking about other problems. Not to mention the problem further aggravates by pure Know Nothing Know it All theorists.

    Okay, where am I going with this? I admit it’s all over the place without making a concrete point.

    Still pondering if an old Chinese proverb “He who solves a problem with a problem will always have a problem in waiting” is what’s going on today?

    Without sounding too pessimistic or competent (out of my mind), maybe I’ll give this thought a try again soon …

    I sometimes get puzzled about requirements. If we could look into the future, and predict what would we need at a level of crystal clear clarity. then perhaps it would be a no-brainer to make a system out of it.

    Take another approach, how do I extrapolate (aka. read between the lines) when something is told as a requirement. This is different from offerring a menu of choices, and asking to pick one. Instead the other way round.

    Systems made by the same person who articulates his own needs are alot easier, simply because you are adaptive to both changes to your own perception of what you might need as it goes on changing when you see some degree of finished system.

    If a person is ‘cornered’ into a witness box with technical guys challenging with different questions, each of the question feels random. These are not on the same wavelength, or if they are someone is making some wild assumptions about what is understood. How does one get two people thinking on the same plane of thought? How can this new level of information be captured right at that moment, yet not set to stone to make un-needed commitments? Why have all methodologies, tools, approaches not succeeded so far? Why is there no ‘right’ answer?

    By ‘right’ answer, I allude to becoming ‘one’ with the purpose, the intent of the author. There are no more questions at this state, no doubts about the goal, no disagreements on outcome.

    Has software taken too much influence of traditional assembly line, one step follows the other, typical & traditional silo process? How do we foster ‘creativity’ without a process? Part of getting better over our past ways of doing things is to also improve upon the way we did things. But the fundamental approach hasn’t changed at all. We still ‘see’ IT development process in it’s strictest sense of – planning, designing, developing, testing. Some of that makes sense, but altogether sometimes it makes no sense, especially when software in itself has made signifcant strides to make or break something too fast, too easy. We have create too much ‘fat’ over the actual process of ‘making’ something under the pretext of entire governing organizations, support, organizational layers, vendors and so many other non-essential things.

    So what do I mean by all this? Do I mean we don’t need project management? Do I mean one can just start building things, and let the plan evolve as the things get built? Do I say governance is counter productive to it’s purpose?

    Before I can answer that, to me it appears that something simple as a software program has been now so deep biased with tradtional laws of doing things ‘right’, that no longer does one try to break out of the ordinary. Throw in whatever new idea (software, technology, automobiles, …) in the world, the moment it is commercialized, businesses spawned, living made, it’s already become a big wall of people to get through ‘before’ an actual user, and the software can actually talk to each other.

    People tend to always favor ‘gray’ zones. Something that is not yet known, needs improvement. In somewhat same way, what I am trying to discover through this thread is same thing. I am discontent with how software is treated, how much non-essential information, structure is built around it, and just how much waste of time it’s become ‘customary’ under name of meetings, updates, releases, bugs, analysis without hardly anyone being able to break a drop of sweat.

    The best way is to ‘play’ the game for time being … but I sense something fundamentally needs to change in this game eventually.

    A plausible summary that agrees with one argument I have. Borrowed from http://codebetter.com/gregyoung/2013/03/06/startups-and-tdd/

    I wanted to write a few comments about TDD in startups. Good code is the least of the risks in a startup. Sorry but worrying about technical debt making us go slower when we have a two month runway and likely will pivot four times to quote Bob.
    Captain Sulu when the Klingon power moon of Praxis exploded and a young Lieutenant asked whether they should notify Star-Fleet: “Are you kidding?” ARE YOU KIDDING?
    One of the biggest mistakes in my career was building something appropriate…

    It was just after Hurricane Katrina. I was living in a hotel. An acquaintance asked me if we could hack together this business idea they had for a trading system. He had the knowledge but not the know how. I said sure, hell I was living in a hotel!

    In less than two weeks we had an algorithmic trading system. It was a monstrosity of a source base. It was literally a winforms app connected directly to the stock market. UI interactions happened off events directly from the feed! Everything was in code behinds (including the algos!) Due to the nature of the protocol if anything failed during the day and crashed the app (say bad parsing of a string?) the day for the trader was over as they could not restart.

    But after two weeks we put it in front of a trader who started using it. We made about 70-80k$ the first month. We had blundered into the pit of success. A few months later I moved up with the company. We decided that we were going to “do things right”. While keeping the original version running and limping along as stable as we could keep it while adding just a few features.

    We ended up with a redundant multi-user architecture nine months or so later, it was really quite a beautiful system. If a client/server crashed, no big deal just sign it back on, multiple clients? no problem. We moved from a third party provider to a direct exchange link (faster and more information!). We had > 95% code coverage on our core stuff, integration suites including a fake stock exchange that actually sent packets over UDP so we could force various problems with retry reconnects etc/errors. We were very stable and had a proper clean architecture.

    In fact you could say that we were dealing with what Bob describes in:
    As time passes your estimates will grow. You’ll find it harder and harder to add new features. You will find more and more bugs accumulating. You’ll start to parse the bugs into critical and acceptable (as if any bug is acceptable!) You’ll create modules that are so fragile you won’t trust yourself, or anyone else, to modify them; so you’ll work around them. You’ll build a festering pile of code that, with every passing week, requires more and more effort just to keep running. Forward progress will slow and falter. It may even reverse as each release becomes buggier and buggier, and less and less stable. Catastrophes will become more and more common as errors, that should never have happened, create corruptions and damage that take huge traunches of time to repair.
    We had built a production prototype and were suffering all the pain described by Bob. We were paying down our debt in an “intelligent” way much the way many companies that start with production prototypes do.

    However this is still a naive viewpoint. What really mattered was that after our nine months of beautiful architecture and coding work we were making approximately 10k/month more than what our stupid production prototype made for all of its shortcomings.

    We would have been better off making 30 new production prototypes of different strategies and “throwing shit at the wall” to see what worked than spending any time beyond a bit of stabilization of the first. How many new business opportunities would we have found?

    There are some lessons here.
    1) If we had started with a nine month project it never would have been done
    2) A Production Prototype is common as a Minimum Viable Product. Yes testing, engineering, or properly architecting will likely slow you down on a production prototype.
    3) Even if you succeed you are often better to stabilize your Production Prototype than to “build it right”. Be very careful about taking the “build it right” point of view.
    4) Context is important!

    Never underestimate the value of working software.

  • You’re hacked

    “Whoa, Gmail account hacking attempt!”- my colleague told me the other day.

    It appears he got some kind of notification from Google, and this set his alarm bells ringing. He was not really sure why someone would bother to hack his account, he is just like everyone out there; a normal user. Still he showed a concerned look because at-least to him his Gmail account is important.

    I suggested him that perhaps that’s because he uses Android, he must have been using Google!Play to download apps. During that process of signing into Google!Play, browsing apps, choosing to download and install he must have invariably shared his email. Maybe, who knows? Who has time to review 25 check-boxes per app on what is shared, and what isn’t? Who thinks about the price (not just the 0.99$ for an app) you pay for having access to, consuming this ‘marketplace’? He seemed to agree, yet slowly shook his head in disbelief not really sure what to think. Slyly I also suggested this might be some sort of propaganda by Google itself! Somehow you have to be in the news, and the best way is to stir up something to keep people in a state of fear and the next thing you see is everyone taking their shot at it in their own crude manner, while Google happily analyses everything being said, heard, and decided about.

    We shared a jolly laugh, but that didn’t stop him from changing his password as first step. His account was not hacked, it was just a hack attempt! But even a possible theft attempt is enough to make him change his lock combinations; perhaps also including all his other online accounts elsewhere.

    This isn’t the only time I see this has happened. I look around myself every day. People staring at their smartphone screens, heads down, busy. Majority of these are ‘online’, feeding on information, reading, shopping, watching whatever it is that interests them online.

    I do that sometimes myself, but I am bit of an ‘offline’ type. And there is some background to this. A few weeks ago, I was Hacker News Tokyo’s Meetup Event, where a new acquaintance asked me what do I use my iPhone for. Unsurpassed, I calmly replied “Just for SMS-ing my wife, and occasionally as a phone. Once I am back home, and get online on WiFi, then perhaps to get app updates. I am still not convinced I should be feeding an economy that isn’t helping my growth in any way except by paying more”. He did not seem to buy that, but I went on to explain him – while I agree with having an iPhone, I don’t really agree spending money like I don’t care what is costs each month on having ‘online’ connectivity. The way I see it, smartphones have become a passing sensation but a powerful one. Entire industries have been caught in the tide of smartphones, and suddenly everyone is now a ‘smart’ phone owner. Recently, when I launched Docs9, and also Meteor – smartphones, tablets are important target for me. At the moment, I cannot ignore them. Not that I want to ignore, but given a chance I’d like to show everyone the bigger, deeper issue behind what I perceive this meaningless digital trend is about.

    Of course that is not what I explained to my friend at #hntokyo, instead I asked him does he really understand what, how much does he spend each month for staying ‘online’? Truth is no one really likes to go into such details. We don’t look into our water bills, electricity bills, restaurant bills with much scrutiny. Certainly, I don’t do either. The amount paid is affordable, we ignore. The amount paid is significant, we get concerned. That’s about it. Nothing solved, nothing owned. Millions around the world get what they can instantly when they want to have it online. That includes us who may have had something else in mind when we started, but now don’t even get time to really understand what is it we are doing online almost the entire day.

    There are legitimate uses of when I would really, badly, must be online. But once I stopped being online, I realized that all of that necessity was just something of my own imaginary need that wasn’t there before. I too did spend time, and money to ‘buffer’ youtube videos because I had nothing better to do while waiting for the train. Spending money became too easy. I too did aimlessly drive around using iPhone as a GPS, only to find that if I read the road signposts on which we are paying taxes for, I could have easily found out where I am headed very easily in the first place.

    Now I read an ebook, or play an offline game, or just take a nap when I commute. I no longer feel the urgency to ‘know’ what’s happening. I certainly make use of Facebook, Twitter, LinkedIn channels occasionally, but I certainly do not keep aside a dedicated task each day just to participate ‘social’ly. Why did I choose to excersice daily for dedicated 30 minutes instead?

    I see few problems in what’s happening with ‘digital literacy’ at the moment. I see that everyone today is just become addicted, even compelled to the pressures of keeping up with what’s everyone else is doing. This has no doubt been a universal human nature all along. Your neighbor has a better car, you want a better one too. Your friends do FB, you should be doing FB too! In the end the car dealer get’s more customers, FB gets more users. You have no legacy, no significance except in your own world. The car maker, and FB have a long-lasting, perhaps a grandiose legacy that even your great grandchildren will happily know about, but not you. Because you never bothered to have one. You are busy enjoying everything unimportant on FB, or not really loving anything about your car except that you have a same looking car as your neighbor did once.

    And the truth is all of this is fed by big companies such as Google, Microsoft, Facebook, Twitter, Yahoo themselves in small ‘sweet’ doses to all of us. Do you like a new feature in Facebook? Impressed by how Google predicts your search? Don’t really know why, but you need a new Office upgrade?

    Take a moment, and try answering these question with sincerity. Not because I say so, but just because you think something doesn’t feel right in all of this.

    Think about what do you get, outside of just getting the ‘service’. What is the price you pay for? What is the price you are influencing on your family, the future generation to pay for? Your appetite is being fed by people who have access to you, and your needs – your Androids, Chromes, and your Google searches. What’s in it for you as a consumer? Just being treated ‘differently’ makes you a special customer? How about your kids? Do you have a future standard ’employee’ career-path for your kids already planned while their only aspirations are how to succeed ‘digitally’? Is your next biggest birthday gift an iPad?

    Quite frankly, would you feel alone if you aren’t online? Do you feel happy enjoying benefits of so called auto-updates, the feeling of being knowledgeable, yet always wanting to keep your smartphone vibrating beside your bedside in case you miss some latest witty post from someone?

    I was joking with some friends a while back that if a baby is born, the first thing that comes to your mind is to take a photo, and post it. You may not have even admired, or touched your baby yet, but ‘immediate’ post to your network is more vital than holding your baby, and forgetting what’s more important now. Getting a ‘Like’ is far more crucial for expecting mothers today!

    I strongly feel this behavior whenever I am browsing online. I get fed up real quick. There is just no ‘meaning’ anymore. Constant noise, constant barrage of nonsensical jokes, hilarious stuff without feeling ashamed, no ‘level’ of quality, no importance to ‘value’. See an accident, tweet about it. Go to a restaurant, post it on your wall. Find something different just share it without thinking twice. Because if it’s not you who shared it first, it will be somebody else.

    A related cause to effect, sometimes I come across HTML5 Rocks user debates. Some like me, do feel the whole ‘Google’ monopoly behind pushing HTML5 standard. But there are others who unlike us see our comments as a problem hindering scientific progress of our society. Don’t we all want voice enabled search, don’t we all want Google!Glass, don’t we all want, ummm … what’s the next big thing I want – supersized Coke? Yeah, right. We also need oxygen capsules to become youthful again, don’t we?

    Teenagers, young, and brilliant generations are willfully contributing their knowledge, their ideas, their inventions to such big monopolies. Go, and happily sign off your idea to Google in your desperation to stand out in the crowd. Remember, it’s not you who is standing out, but that big huge logo behind you which rest of the world knows. Your only takeaway is the momentary praise, and some decent monetary benefit. Go ahead a few years, and you’re back to just someone who nobody remembers, or knows. All they care is how can they swap their month old Android to the latest cool looking one shipped by Google this month.

    My question – Is this the extent of our achievement as a human being? Is simply jumping the ‘buzz’ bandwagon the only sign of our digital literacy? Is our illusion that everybody is smart actually a modern tragedy, dumb people with smartphones!

    I respect Apple, but to me it’s not Apple. I really respect Steve Jobs. For whatever reasons, he has been the most influential person to me. You know when you feel ‘safe’ with your parent around as a kid. I felt the same when Steve Jobs was with us. His vision was certainly to give people the ‘best’ product. Not an experiment like Android, where you are just a test subject on which half-baked, immature features are tested, but at the end of the day you are the only one stuck paying the price. I honor, and respect people like Steve Jobs whose purpose was to make our lives better for our own benefit. I am sure that if allowed, Steve Jobs would have been more than thrilled to offer products for free just because the world needs to be a better place.

    I am doing a start-up, and the more I think of becoming a ‘producer’, the more I come across this influence, and the grip with how our generation has caught into. I want to give people tools to make their lives better, I want to give people intelligence to make their lives better, and I certainly want my kids to experience a life full of potentials. I want them to see a world of culture, values, respect, honor and above all – worthy accomplishments.

    Honestly I wish people just stop pretending smart trying to participate in digital world without being digitally literate. While to some digital presence is for fun, to some it has really become an identity, in fact a dual personality. More than that, it has given people an effective recluse to shut away the world around you, and admire at an artificially photoshopped beauty through your tiny screen. It’s like how medical practice has become all around the world – expensive than you could afford financially, and mentally. You are still the same, nobody updated you, nobody even knows about you. Is there an app you could download to answer this for you? Or is that a problem you should be solving for yourself already? If you are advised about health, yet if you keep eating junk food, anything a doctor can prescribe is cure. But if doctors see this as an opportunity to feed on your habits, get a lifelong steady source of health care income, why would any doctor care for ‘your’ health out of million others stranded to get inside for an imaginary diagnosis? Which is easier – being taken care of? Or taking care of yourself?

    Where is all of this talk heading to? Should we start some movement? Should we do something to change all of this?

    From what I have understood, we are all cultured to look upon someone – our idol, our image, our gods, our leaders. We ourselves are already convinced we will just @follow where the world will take us to. There is always a leader who needs to open their eyes, and make them see.

    Could it be any different this time?

    Could you, as a reader, think about this?

    Has your education, your effort to grow into the society taught you that your reach is just this far?

    Can you, as a responsible person, do something about it now?

  • Fixed footer auto height content

    While redesigning one of my pet projects – Simplememos – I came across a very pesky issue on layouts. I wanted a simple header/content/footer layout, with some specific behaviors. Header is part of content, content is using up 100% of whatever area is left after positioning footer fixed at bottom. Sounds easy? Well, what if the content has nothing inside? Yes, all of my content inside was absolutely positioned ‘notes’ that meant content had nothing by which it can auto-size itself! I also needed to have proper visual layout for all screen sizes, handle browser resize, maximize, restore for ALL browsers.

    The simple answer, yes I have that layout. Take a look at Simplememos, and feel free to play around in any browser of your choice.

    From what I experienced, played around, researched, and figured out eventually was that there is no CSS way of doing this. My own philosophy is to write less, and let CSS handle the details of my layouts as I have specified. But as many seasoned web players know, browsers come with all variations of CSS interpretations, and then you see all those threads on stack overflow around layouts, you’ll definitely have some fix, but then again it won’t work for your specific case if you had like the one I had.

    I can’t say stack overflow wasn’t of any help. In fact, I gathered many useful points from across a variety of stack overflow posts, replies, code snippets, and eventually I came up with a version that works for my own needs.

    My implementation was quite simple, but is a mix of CSS and JS. I couldn’t avoid JS, unless I go with CSS expressions which in a nutshell is JS to me.

    I created 2 regions as below-
    <div id="content">... my header, content inside ...</div>
    <div id="non-content">... my footer here ...</div>

    My div#non-content auto expands to my footer, since footer is a text. However, my div#content has only absolutely positioned divs, so it has no auto-expand criteria as such. Thus, I jig up jQuery’s document.ready event to dynamically resize div#content

    $(document).ready(
    div#content's height= (browser window's height - div#non-content's height)
    )

    And I also hook the window’s resize event to do the same dynamic height change again.
    $(window).resize(
    // Same code to dynamically resize div#content to occupy 100% of remaining available width
    div#content's height= (browser window's height - div#non-content's height)
    )

    There are some additional things I could have done
    1. Include a spacer image img#spacer-height that is hidden but dynamically resized to occupy maximum available height, and another image img#spacer-width to occupy maximum available width. I have used this for IE6 and below one time to handle overflow:auto for div#content. Without any content, setting width, and height is OK, but IE6 never bothers to show up any scrollbars.
    $('.spacer-width').width= window's width
    $('.spacer-height').height= (window's height - div#non-content's height)

    2. Use tables! This would have been the best option, but sadly FF does not support overflow:auto’s in table cells. As alternatives I didn’t bother to emded div’s, because I had already got to the point where I am having tables, divs, CSS, and JS to resize the div anyways.

    You can see my source in action on my own Simplememos site. If you have pure CSS alternatives, I’ll be more than happy to hear!

    Aside from the above, I must say the experience of using Knockout JS, custom KO bindings, jQuery, and extending jQuery selectors was a rewarding experience. I have these, and quite a number of stack overflow posts open for quite a few months now.

  • IT Architecture – Practice, not preach

    <iframe class="scribd_iframe_embed" src="http://www best slimming pills.scribd.com/embeds/125629370/content?start_page=1&view_mode=scroll” data-auto-height=”false” data-aspect-ratio=”undefined” scrolling=”no” id=”doc_49392″ width=”100%” height=”600″ frameborder=”0″>

  • Few handmade sketches by me

    This has been such a long time. Drawing was one my interests, and passion when I grew up. It was refreshing holding a pencil, and drawing a sketch. My daughter Amrita inspires me with her sketches to keep at it, and draw more as I improve my sketches, paintings to more beautiful things around me.

  • Farewell 2012 and welcome 2013

    We had a nice time with one on my old friends – Yogesh, and his family. Enjoyed a memorable time with his daughter Yukta, and enjoyed delicious ‘parathas’ by his wife Hema. After a hearty chat, we bid farewell to 2012 over a sumptuous Indian dinner at Swagat, Roppongi.

  • Merry Christmas 2012

    A merry Christmas to you all!

  • Unforgettable moment – 12/12/2012 12:12:12

    This just happened! Never planned, or imagined. We casually go out for lunch, Alta (front left) brings up his iPhone and we all are poised to capture a time that is never going to repeat ever again!

    Guess when will you get another chance at this? Alta, myself, and John in this unforgettable moment.

    Memorable Moment