Posts

Showing posts with the label software

design an app like Turbo Tax

TurboTax Design FAIL « Scott Berkun   I was thinking about exactly Turbo Tax example today evening and saw this post. Déjà Vu. We get software requirement for complex order processing applications saying "build me an app which is as easy as Turbo Tax". That application, built as easy as Turbo Tax, to do the processing in sequential steps with hints/questions and directions might work for simplest cases, but when it starts deviating from the normal happy path is when things will start getting complex. Slowly such an easy application will start getting complicated with multiple enhancements to handle more and more complex functions to the point it will start deteriorating. After a while it will go downhill when the original users who used it for the happy path will find it unbearably complex. The trick is to remember why it was built in the first place and keep that balance through the numerous enhancement cycles. The face should still be recognizable through numerous nos...

Customer Service

Five years back, I would have been okay with standing in long queues, going up to the counter where the store clerk would ignore you, take your money and give you what you wanted as if he is doing me a big favor and would never have expected a smile, sorry or thank you. But I have experienced customer service since then and understood the importance of it in my profession too. Following are some things that I have learned:- 1.       Attitude 75%, aptitude 25%   o        Attitude towards work and attitude towards customer is almost the same thing – your customer is your work or vice versa. I have seen bit of both types of people – brilliant technically, but customer not happy at the end of the day or very good communication skills and can establish rapport quickly, but shallow when it comes to knowledge and hence not successful in execution. Both attitude and aptitude are natural things, but could improve by pract...

vision and values

I came across this quote which i copied down from somewhere: "A good programmer, in everyday work, is one who can communicate well with users, managers, and other developers, who can write clean, maintainable code, and who can choose the best tools, architecture, and techniques in putting together a solution.". It may be good to have such brief definitions for roles within an organization - often people get confused or lost in the daily rush about competencies required for the role they are supposed to perform. Similar to how companies are supposed to have vision and value statements, I think it may be good to have personal vision and value statements which one can tune over a period of time.

control

I have been thinking about the level of control one should have on team and project without being a control freak. It is said that with a good manager, people will not feel like they are being managed. One idea that stuck to me from the book Peopleware is, you put a person on a job and if you trust him with it, don’t try to second guess and rob him of the chances to make decisions. There are couple of types of managers – those who came up the ranks and know how to do the job and those who don’t know the nitty-gritty of their team’s day to day job. If you think you know more about how to do something than your team member, how do you control the urge of doing the job yourself instead of teaching them how to do it without actually doing it? If someone else is taking 10 days to do something that would take 1 day for you, can you grit your teeth and let him or her go through with it and learn? On the other hand, one downside of having a manager who don’t know or don’t hav...

JUG

I attended a java user group meeting yesterday. Topic was State of Aspect oriented programming. 20% of audience had used aspect oriented programming in their projects. Compared to the demos given using Ant, JaaS, AspectJ, Sping, Log4j etc, I felt like a barbarian who still use System.out.println(“I am here..”) for debugging and Notepad for coding. I am convinced that these tools or methodologies increase programmer productivity, code maintainability and durable design. But how many actual customers who pay for IT projects understand or even care about using these? Then again I guess it is not a choice to be made by customers, but by the programmers. That leads me to next question:- there are so many frameworks, tools and patterns out there. I got involved in one open source project in Sourceforge to get an insight about open source, but had to drop out because of the pace at which people with various strengths (specialists) collaborated. I think the question is beyo...

age of software

I have been thinking about longevity of software, how it ages and eventually dies. Many of the software that was around while I was baby footing in this industry is no longer around or has come up with newer versions that resemble to the original only in name. Is it possible to write a truly magnificent piece of software that can live forever without being a recluse? If we realistically don’t expect our software to live forever, what are we doing about it? Is it possible to design for the future in advance? Unless hit by a bus tomorrow, I can venture a fair guess about what will happen to me at most 1 year from now, not more than that. Then how can we design a piece of software to work for even 5 years. Do we even think about how many years a piece of software will be used while designing? There is music, films, paintings and buildings that last for a really long time, but the average life of software maybe 5 years (wild guess). There are too many parameters changing ...

Top Coder

I came across TopCoder, a site for conducting coding competitions. It is a nice idea to get rated against other programmers and improve the skills. Programming on the job is mostly routine and repetitive for most application development scenarios and standard algorithms are almost never used. This will make sure that we don't forget the fundamentals and with time the routine programs will also get better - develop an eye for better processing, efficiency and performance. What I would like to believe is any activity that is even tingling the brain will add some value directly or indirectly to work - something like regular exercise to keep us healthy. I was curious about any presence of Indians in this. There are thousands of programmers from India and some very good universities, but I didn’t find the country or any university from India featured in the list . This is just confirming my suspicion that we are better in following than leading. Or it could be just that ...

today's article: self-healing programs

Today I read about IBM’s self-healing programs. I don’t expect it to be as smooth as it is made out to be, but this is adventurous. I was first of all wondering why terms like autonomic computing, artificial intelligence, regenerative systems etc gives a kind of thrill like a fantasy or science fiction. Anyways, it need not be a macro phenomenon, but the principles could be applied in minute way in routine applications as well. Systems doing preventive maintenance sort of checks (like the on-board diagnostics of car and “check engine” warning light) – it should be possible to put in pre-coded periodic self-checks. Systems trying to do some basis error correction before throwing it out to the user (the very first data format error need not be thrown and program aborted – it could try to correct the format and continue). Systems could learn from how it is used and present better ways – frequent navigations, frequent combinations of data made available. Systems doing self a...

software plumbing

I used to be impressed by the dexterity of the maintenance men who come around to fix things around house – about how neatly they accomplish things like fixing a leak or checking the wiring etc. Most of them have ability to make the things work with a quick fix, common sense and knowledge of the tools to use to fix something and they don’t make a mess. This post is not about the house maintenance, but about putting together a software solution to the immediate need, having the knowledge to select the best tools for the job and to reach a quick solution, not building a house from ground up. In “Zen and Art of Motorcycle Maintenance”, there is a passage about making a replacement part made from a soft drink can for a friend’s expensive motorcycle – when you tell them that it is made from tin can, they may not allow you to put it in. I think it is a natural tendency to buy the packaged/branded/expensive product from a super store and expect that it is the best solution. ...

Ajax

I have been meaning to start checking out Ajax with a little hands-on for quite some time and today I had my “hello world” with it. AJAX: Getting Started : gives a quick way to start testing. XMLHttpRequest seems to be the key to this. Rest is all about constructing the presentation layer at runtime using javascript than to change the content from server. Rasmus' 30 second AJAX Tutorial - A wanderer's journal : Pretty much the same as above. I saw this argument at multiple places that Ajax is nothing but hype and people were using DHTML + XML way back etc. I am not yet sure about the extent or power of Ajax, but I liked the idea behind it. It seems to me as something that can be termed as “perception change” – the idea that request-response processing can be done without interrupting the user interaction is great. Today morning I attended a session on innovation management – it was said that creative ideas which works can be extended, like computers invented...

Open source initiation – still going on..

Not dead, but not exactly running yet. • I had registered in three projects – one of them almost dropped me since it is going at an amazing pace, I can’t even think about catching up now. I will have to be patient, setup tools and familiarize, do something small on my own. Two others are still alive. • I am using Eclipse a lot these days and in the process of falling in love. I have poked around many of the features and almost familiarized it, but still haven’t formed habits around it. • Need to learn refactoring techniques and concepts. So far, refactoring hasn’t been in the picture, even if I had written a piece of code which I know is not the best. But now I am more or less interested in writing something and getting it working fast, then if I can find fun in improving the code, it will be great. • Installed MySQL 3.1. After a long time, I am meeting another database. I had brief encounters with IMS, DB2, SQL Server before making Oracle as the One. Even though I k...

open source initiation - continued

Continuing with my open source initiation, I am still preparing with setups and tools installation for couple of projects hoping that I will use them and learn – hope it will not end up like a preparing and rehearsing for a marriage only to find out that it is not going happen. Anyways, just putting down the tasks, notes and my thoughts so that this will serve as my future reference:- - Installed WinSCP as the file transfer tool and WinCVS for CVS client. I am still working from WinXP machine; hope someday I will be able to repeat such installation for a Linux machine. - Installed Oracle JDBC drivers, this time a new jar (for 9i). I had worked with classes111 and classes12, but didn’t know that a new one, ojdbc14, has come out. I am sure even that has been overridden by 10g drivers. Another generation gap thing going on. - Installed Maven 1.0.2, build tool. I am still overwhelmed with the number of frameworks churned out from Apache project; it will take some ti...

open source

After a lethargic period, I have started some more activities which kind of elevated me to another excited level:- - I have registered in couple of open source projects. Work hasn’t started on anything yet, but I am excited to be in between those terms which were so vague to me so far. I have been reading so much about open source development for last couple of years, but never mustered enough courage to wet my feet. Initially I thought it was only for linux hacks which is a whole different world to me, I had started looking towards that path (reached only the stage of buying the brochures, but didn’t even plan the trip). Now I have enrolled in couple of projects which were looking for Java developers. I am sure it will be a good experience, but hope I can find enough time to work, at the moment I don’t think energy should be a problem. - Installed Eclipse (another one of those candies I wanted to have for some time) and browsed around. I think having a good IDE goes ...
Today I listened to an inspiring and very interesting talk by Adam Bosworth given in Salesforce.com’s annual event – Dreamforce. It is titled Intelligent Reaction. Summary of the talk is that companies should react to customer needs and use the customer data to evolve rather than going with a grand plan. It is in line with couple of things I am following nowadays – Agile development and Using customer/transaction data to make better decisions (I wonder whether there is a term for it). I caught a lot of phrases maybe clichés but good to keep focus, so spewing it out here – talk to people, listen carefully, Iterate, evolve, intelligent reaction vs intelligent design, start small, lots of releases instead of one grand plan, change with times, follow your customer in real-time, learn and change, nothing is perfect . This is the changing way of software development, but I wonder how many organizations adapt to this. I think it is probably easy to track the usage, listen ...

Extreme Programming vs. Interaction Design

I am interested in learning more about extreme programming, but haven’t been able to read in detail or practice any part of it so far – I will get back to that sometime soon. Interaction design – that’s a term which I came across for the first time and at the outset it sounds like a fuzzy concept to me. Following are some of my thoughts (quotes from article are in Italics ):- • I think the deepest tacit assumption is that we have a significant organizational problem, but we can't fix the organization. I believe that in order to create quality software, you have to change the organization. • It's my experience that neither users nor customers can articulate what it is they want, nor can they evaluate it when they see it. Neither the people who buy software nor the people who use it have the capability of visualizing something as complex as the behavior of software. They also don't have the ability to analyze what appropriate behavior is. I started my caree...