Archive for the ‘Technical’ Category


I started to write this post immediately after reading Dreaming In Code. The book forced me to think why developing software is hard and I decided I need to write a post about it.

Frankly, even after reading that book I couldn’t figure out what really went wrong with Chandler. Was it too much up-front design ? Was it going for a desktop application instead of trying to develop Chandler as a web app ? Was it lack of initial time pressure? Was it some internal politics not documented by the book? I cant say for sure.  After writing a little on this I saved it for future elaboration. I wanted to collect my thoughts and analyze the data which I got from the book. After several weeks I still don’t have any additional point worth writing about. So I just posted it.

Here you go :

 Why is software development hard ?

I think it is a tad unfair to think that Software Development is the only thing that we don’t know how to do. A lot of people, mostly management assholes, seem to get all fired up when talking about software development. Why aren’t we delivering on time? Why are there so many bugs? Why isn’t our zero defect program not working? Why isn’t the CMMI process(or insert your favorite software development process here) helping us do better? Why is all this so hard? Haven’t we doing software development for years? Why aren’t we learning from our mistakes?

After working in the software industry for 5 years, I really don’t know why software development isn’t getting any easier. Certainly the tools have improved. But the increasing complexity of applications, security issues, the development model in a flat world, an increasing amount of people choosing to be developers just because there is more money in it, etc might be reasons why there is so much bad software out there.

People have been raising kids since time immemorial. Still we haven’t figured out the best way to raise our kids. Should we let them be or should we discipline them as we wish ? Should we let them make the decisions or should we make it for them ? Should we teach them life’s lessons or should we let them learn it on their own? A similar argument can be made for the field of personal achievement. What makes a person successful? His genes ? His environment? Can the traits of a successful person be cultivated? Can I copy a successful person and be successful myself? Successful people come from well-to-do background and also from ghettos. There are hard workers and then there are take-it-easy types. There are short ones and tall ones. There are PhD s and high school drop outs. If we really think about it, there are no easy answers and no reliable patterns for this.

If we cant figure out the answers to one of life’s most common happening repeating itself over every generation from the beginning of human life, then why are we so frustrated about being unable to know how to develop useful, quality software on time?After all, software development is only a few decades old.

If you think that the above mentioned cases are not science or engineering related, I should say that the most critical parts of software development are not really Science but Art. Team co-ordination, Estimation and Design are examples.


Read Full Post »

I am writing this blog in Firefox running on Ubuntu loaded into a VMware installation. I am surprised at the ease of installation and everything worked well right out of the box – the way Windows used to be (before Vista). I always installed Linux in a separate hard drive partition (without a virtual machine) . If I could manage to get the partitioning right (without deleting my windows partitions) I would consider myself lucky. Once I boot into Linux I would be usually at sea. It wont be usually more than an hour before I reboot into Windows. Ok, ok I am a loser. After a few days or months, the Linux inspiration would come again (usually after reading Slashdot) but I would be too lazy to restart my machine to boot into Linux. I keep postponing my Linux learning program and then one fine morning I would delete the Linux partition after a few months and regain that space as a FAT32/NTFS partition.

With VMware and Ubunto all this changed. Everything worked fine. I am browsing the internet without having to type in Regular Expression-like crpytic commands to configure the network settings. I just opened up Firefox and start browsing away. I am glad I tried this option. I highly recommend the Windows geeks to try Ubuntu on VMware.

P.S. The title of this blog is a rough translation of Ubuntu.

Read Full Post »

As you can see from here, I am reading quite a few books lately. I am not a speed reader and so I dont get to read all the books that I want to. The reading list has changed after I wrote this page – i finished a couple, moved some to future reading list, stopped some in the middle and added quite a few to the list. I hope to update the list to reflect the changes soon.

I just completed reading a book called “The Best Software Writings I – Selected and Introduced by Joel Spolsky”. As the name implies, it is a collection of articles relating to software selected by celebrity blogger Joel Spolsky from submissions by his blog readers. He gives a brief introduction to the author and the topic of the article at the beginning of each chapter. Sometimes the introduction is better than the actual essay. A few of the articles are excellent, some are good and a few are mediocre. The quality forms the Bell curve of standard normal distribution. Nobody can get it all right. Not even Joel. All except one of the articles in the book are available online. So I intend to post the links here so that you can read them for free (sorry Joel).

  1. Style Is Substance by Ken Arnold
  2. Award For The Silliest User Interface: Windows Search by Leon Bambrick
  3. The Pitfalls Of Outsourcing Programmers – Why Some Software Companies Confuse The Box With The Chocolates by Michael Bean
  4. Excel As A Database by Rory Blyth
  5. ICSOC04 Talk by Adam Bosworth
  6. Autistic Social Software by danah boyd
  7. Why Not Just Block the Apps That Rely on Undocumented Behaviour ? by Raymond Chen
  8. Kicking the Llama by Kevin Cheng and Tom Chi
  9. Save Canada’s Internet from WIPO by Cory Doctorow
  10. EA: The Human Story by ea_spouse
  11. Strong Typing vs. Strong Testing by Bruce Eckel
  12. Processing Processing by Paul Ford
  13. Great Hackers by Paul Graham
  14. The Location Field is the New Command Line by John Gruber
  15. Starbucks Does Not Use Two-Phase Commit by Gregor Hohpe
  16. Passion by Ron Jeffries
  17. C++ – The Forgotten Trojan Horse by Eric Johnson
  18. How Many Microsoft Employees Does It Take to Change a Lightbulb? by Eric Lippert
  19. What to Do When You’re Screwed by Michael “Rands” Lopp
  20. Larry’s Rules of Software Engineering #2 by Larry Osterman
  21. Team Compensation by Mary Poppendieck [Not Available Online]
  22. Mac Word 6.0 by Rick Schaut
  23. A Group Is Its Own Worst Enemy by Clay Shirky
  24. Group as User: Flaming and the Design of Social Software by Clay Shirky
  25. Closing the Gap, Part 1 by Eric Sink
  26. Closing the Gap, Part 2 by Eric Sink
  27. Hazards of Hiring by Eric Sink
  28. PowerPoint Remix by Aaron Swartz
  29. A Quick (and hopefully Painless) Ride Through Ruby (with Cartoon Foxes) by why the lucky stiff

I should say Joel saved the best for the last. All in all, this was an interesting read. I would surely buy Part 2 if and when it comes out.

Currently I am reading Dreaming in Code by Scott Rosenberg which is about the development of Chandler.

Read Full Post »

PCWorld lists the most important people on the world wide web. Larry Page, Sergey Brin and Eric Schmidt tops the list and Steve Jobs comes second while Bill Gates is not on the list at all. Unbelievably I am not in the list either!

Read Full Post »

I think this is a great piece of writing. What do you think?

Read Full Post »

Architecture Vs Design

While I was looking for a job 3 months ago, I had a phone screening by a recruiting guy who asked me about the difference between architecture and design in the context of software development. This question confused me immediately. I had never thought about this. I told him there is no difference between architecture and design, they are effectively the same thing – just different names to the same process. I told him it didnt really matter whether you architect the system or design the system as long as you get what you want. He was not satisfied, he said that architecture and design are clearly different stuff and that he expected me to know the difference since was working with software for more than 4 years. I was ashamed. If there is some difference between architecture and design I should be knowing it – how could I miss something like this?

Even though this interview shaked my confidence, I never bothered to look up this matter somewhere or ask somebody. Yesterday I bought Martin Fowler’s Patterns of Enterprise Application Architecture from Borders and while reading through the introduction this question came to my mind again. I immediately googled for an answer and got this and this and this and this. After reading all these I am still confused and the ideas are still vague.  The vague idea that I got from these are that Architecure is more high-level than Design and that Architecture is that what can be explained to people outside the development team (i.e. the business people)  and Design is the implementor’s view of the Architecture.

I am not sure whether I got it right, but I really dont think it is possible to clearly differentiate between architecture and design for a software system.  I still dont have an answer to somebody who asks me about the difference between the two. Maybe I was right from the start – probably there aint much and probably it doesnt really matter.

Read Full Post »