We cannot create a perfect software from day 1. Its a continuous evolution. If we were to build a bridge we cannot falter on our designs because it can be disastrous. However, software design gives us the flexibility to falter. We can design, learn from the usage and then improve upon it. We need not strive to build a fully loaded software from the beginning. An end user lands up using only 40% of its functionality. An approach of minimalism can be adopted here. Deliver only 40% of the functionality in the first iteration. Try to bring this 40% functionality with a great end to end user experience. Now let us understand how users use this software. Let us learn to empathy our customers, to understand our mistakes. Once we obtain this knowledge, let us go back and start working on those points. It is important to understand that a minimalistic approach can reduce the risks of redesigning a whole bunch of stuffs.
When does innovation happen? Different people can voice out different responses to this question. My perception is that innovation happens when you challenge the limits, when you understand the problem so deeply that you feel the pain yourself. No innovation can happen because you want to fulfill certain KPIs at workplace. Ideas should flow out of individuals in a free form and should not be forced upon by anyone. Another important aspect of research and innovation is the acceptance of failure. The observations borne out of a failure can itself pave the way for a great solution.
I’ve been experiencing this for quite a while now that usability is always sought by introducing a new UI technology. I believe this is a completely wrong understanding of usability. Of course, newer technologies provides us with better tools to improve user experience but it doesn’t still address the problem of software usability. Usability should be defined from an end user perspective. A software can be perfectly usable even if it does not encompass the latest UI technologies ( HTML5, Silverlight, Flex etc. ). What is important is a clear understanding of the user’s problem and a focused approach to solve it. If a user can perform his intended operations in the best possible manner, then that’s a perfect example of a usable software.
I happen to come across this article by Robert L. Read which talks about ‘How to be a Programmer’. The article focuses on not just the technical aspects of saying a programmer should think about performance or memory, but also on varied bits like talking to non-engineers, deal with organizational changes, handle boring tasks and so forth. I believe being in a large organization, we come across situations or challenges which Robert mentions and we invariably find ourselves landing in a chaos most of the times. Robert brings a holistic view of a programmer and I therefore found it to be a nice read…
I feel that the web has already become a virtual battleground for the two software giants – Google and Microsoft. I recently read an article which says ‘Google drops a nuclear bomb on Microsoft’. Phrases such as these are now very common to seek your attention. As the companies launch their new tools on the web, users around the world are ready to give a first try and deliver a verdict. Some of them however, take a radical approach. I just came across a site Bing vs Google which displays google and bing search results side by side. This is interesting because it is in some ways helping users to decide which tool is giving better result. This is really turning into a dog fight. I had several discussions with my friends on which search engine is better. Though everyone opined that Bing is quite good compared to its ancestors, yet I found almost all of them hold their trust with Google.
Microsoft has not been very fortunate competing with Google in the search engine space. However, with Bing, which is still very nascent, Microsoft has garnered some positive reviews. I am sure, the environment is already heated up with talks of Gazelle and Chrome OS. However, we have to play a waiting game to see these softwares spring to action and decide the better one.
Its one thing to build a software, its another to make it successful. What is involved in creating a great software product? It is not just the catchy technology alone. In an era of social technologies, no product can survive without a community. The community could be users who experiment with the product and provide feedback, it could be developers or programmers who extend the features providing niche capabilities, build applications using the api’s or even market the product through social media like blogs, del.icio.us bookmarks etc.
Having said this, the next thought that immediately springs up is should we then concentrate on building a platform and not just a standalone product? I believe, it is ‘YES’. Take the example of iPhone or Linux in general. The greatest thing about iPhone apart from it being a wondrous gadget is that it allows anyone to use the framework provided by Apple and develop applications for it which other users can use. Linux is a glorious example of a community driven product which is highly successful.
SAP to a very large extent depends on its community of partners to extend the functionality of its business application for its customers. The SDN community is vibrant and has been burgeoning ever since its genesis. Adobe has now build a community for developing and sharing applications built using the Flex technology.
This seemingly has put us into a new era of participation where the boundaries of software development is not limited within the walls of our office but can span endless possibilities. The only hindrance is mindset. If we are open enough to build not just for the customers but also for the community, we will not only build better products but also better culture.
In a short TED talk , Arthur Benjamin brings out one interesting fact that Statistics should be more emphasized than calculus in the digital age. I truly agree. Most of the great products that we use in our day to day life are fundamentally based on some statistics. Take for example how Google ranks the search results. All conclusions drawn out of collective intelligence are but based on some statistics.
Whenever we brainstorm to decide what new features we have to build for our product, we depend on some simple statistics of how many customers have requested for that feature and how critical is that feature for their usage. Statistics is ofcourse an indispensable tool without which it is difficult to imagine how we would have come so far with all the technological advancements. Technology is but a driver which turns Statistics into something usable for all of us. However, we even cannot undermine the importance of Calculus and that Arthur clearly exemplifies with all its uses.
On a very funny note, Arthur points out that if all of us knew about probability and statistics we would not have landed upon the current economic mess. I would reserve any thoughts on the current economic turmoil but what I do agree is to the fact that we should emphasize such subjects of which we can make meaningful usage in our day to day life.
Linux is not for the masses. That’s what many people think about this ever-growing operating system. But what is the plague in the adoption of Linux? I would have agreed six years back that the technicalities are quite involved in Linux and any home user would not be able to get hold of it. But look at any linux desktop now. Its simple, clean and contains everything a home user would ever want. Hardware and driver support has improved making it all easier for end users. Fact is, most users are vaguely familiar with Linux or are apprehensive about it thinking that it is only meant for high end enterprise usage or geeky programmers. I believe we need to spread this word that Linux which was thought to be programmer friendly operating system, which as a matter of fact still holds true, is also apt for any home users. I believe that with popular vendors like Dell, HP and Lenovo coming out with Linux pre-installed on their laptops and desktops, the consumers are now blessed with an alternative. The current recession coupled with the ever dwindling performance of Vista has poised the adoption of Linux as a prime-time consumer desktop operating system. However, let’s also give credit to the Redmond giant for pulling the scars out of Windows Vista and turning it into Windows 7 and as Mark Shuttleworth’s puts it elegantly, that
“Linux will need to raise its game in the face of this revived Windows experience”.
What seems to be a probable hint is that a healthy competition from Microsoft would only spur more innovation in the whole chain which is good for Linux.
As a concluding remark, I would like to add my thoughts of what can be improved in the current Linux distros for increased consumer adoption. First and foremost is better multimedia support. Although getting the right software is not difficult, it would be better if we could prepackage the audio/video support. Mark Shuttleworth already pointed out about Consistent Packaging in Linux. From my point of view, this would really remove many of the confusions regarding software installations on Linux systems. Also improved driver support from Hardware vendors should in general help the adoption of Linux among the masses.
I always appreciate the kind of intuitiveness and simplicity Apple brings to its products. The company has always lived up to its slogan of ‘Think Different‘. Steve Perlman who led much of Macintosh’s multimedia development puts it in a very simple sentence
“Too many engineers don’t think about how to turn the bundles of technology they create into a usable, intuitive gadget that they can take home and use.”
Quite often we overengineer things. We build tons of features most of which will never be used by the end user. At the end, we land up owning a mess. Apple is one company which has given users what they want before even they know about it. I could never imagine how easy it is to shuffle through the songs in an ipod nano by just moving my finger around a circular pad. I could never obtain the same comfort on any other music player. Undoubtedly, Steve’s unique vision is not to focus on a brand but really develop a cult.
We never know what Apple is focusing on next. I could only imagine it will not be anything conventional. That’s the Apple Way.
When DevCamp 2 was held in Bangalore this year, a lot of interesting presentations came up. Among others I particularly liked Neal Ford’s presentation on visualization tools for code metrics and productive programmer and also the presentation on Sahi which is a web testing tool. Each session was timed quite well and we had lots to take away after each session.
Following Sahi, Neal Ford gave a presentation on Visualization tools for code metrics. To be frank, I have heard of all the jargons such as code metrics, cyclomatic complexity etc. but never really used them in practice or never really understood the real purpose of using such tools until this session. He talked in brief about a number of visualization tools like Source Monitor, Panopticode, Graphviz, JAR analyser, Toxicity chart, Code Crawler, Codecity , Citylyzer etc. What was interesting to learn was the kind of information we can decipher from the visualization information. The presentation slides are available for public viewing from Neal Ford’s site.
Neal Ford also delivered another session and that was on Productive Programmer. There is a book by that name authored by him. This session was really interesting not because of the content alone but also because of Neal’s sense of humor while dealing with repetitive and boring tasks. He talks about a few tips that we can employ in our everyday chores and become more productive.
The DevCamp chapter not only brings the ideas from people but also is a nice venue for socializing with a diversified crowd from hackers to programmers to architects.