This post, or rather, this series of posts is addressed to people who have been part of Software Development projects as programmers for a couple of years and want to scale up to the next level of being able to design software.
“The requirements are clear, but where do I start?”
Often in interviews, the interviewer says, “Could you design a basic Connection Pool?” or “How would you go about designing a basic Library Management System?”.
You have spent the past couple of years programming in relatively large projects, you know its codebase well. In that context, when you are asked to do something, you would probably deliver that in a couple of days. You already know the basic set of classes and have already been prescribed at some level where to add or modify code for a new requirement – how to write a new “action”, where to place the validations for data coming in, where to put code that fires SQL to the database, etc. Suddenly, you are now being asked to get out of that comfort zone and write something new from scratch. A lot of us, including myself find ourselves in a situation that I call, “The Designer’s Block”, much like a “Writer’s Block”.
This, in my opinion, is where the SOLID principles by Robert C. Martin takes on a social form. It’s not just a set of best practices in OO Design, but a foundational guideline that helps programmer’s overcome the Designer’s Block. Traditionally, there would be prescriptions that say, write down your requirements and underline the nouns to identify your model classes. IMHO, such prescriptions don’t even get you half way.
Over the next couple of posts I will try to focus on designing software, be it a library or an application using the SOLID principles. There is obviously more to design than just that, but that is beyond the scope of this series. This series is focused on getting you started, not making you an expert.
Requirements
We first need a high level requirements statement which defines what we are going to build. In choosing this, I think it is prudent to stick with something that a broad audience can understand and identify themselves with.
How about a Personal Accounting System? It is something I personally keep creating spreadsheets for. It would indeed be good to have a software for it – and I am sure there are numerous out there that some of you may be familiar with. A Personal Accounting System it is. To jazz things up a little bit, so that it feels more important, lets give it an acronym – PAS. Nah, giving an acronym is too traditional and plays too much into the stereotype. Lets go a step further and give it a brand name. Lets go the Apple way, lets just call it “Money” or may be a little more colloquial, “Stash,” “My Stash.”
“My Stash” it is.
To be continued…
I keep reading your posts. Nice to see you re-started – you write in a nice, conversationalist way which suits me; not like a technical book! Thinking of building the MyStash app following your posts… but after reading your disclaimer, am a little apprehensive, that it may just go over my head! 🙂 Keep writing sir!
Thanks Rishi…didn’t know you were subscribed. It was not meant to be a disclaimer, but more a statement of intent of the series….please do continue reading 🙂
Keep writing…its music!!!
I will wait for next post before i ask my doubts…