Since my last post was a little bit more informal and I’m kinda hoping to offer you all something of value I guess I’ll need to make another post today, so here goes. If it is a bit lengthy or strange please forgive me for that, been at a party today so not completely sober anymore. I’ll try to make this post about how designing and structuring of any software application normally works, so basically the process from first idea to actual application you all can use and enjoy.
First of I’m assuming you got an idea of what you want to build, I always love to start of with something simple so I usually pick a complete office look-a-like suite, well a guy can dream can’t he! Anyway as soon as you have the idea it’s time to visualize what you want to do with it. If I build a word clone what would it offer my customers, how could I improve their live and how does it fit into my business model. This is what is called the ‘Vision & Scope’ that you’ll all learn to love. Now I know all of you would like to skip this, I mean can you say BORING. But it is one of the more important documents you’ll ever make as it describes exactly what the finished product is to be and who will use the application.
Next of is the composing of a software requirements specification, which basically means just scribbling down what this iteration of the application is going to be, what its going to contain and how it will interact with the customer. Woh! That was a long sentence that made no sense to me what so ever, so lets break it down a bit. Summary: it contains how the program interacts with the world around it.
Lets start with the interactions between application and customer, or formally the ‘use cases’. These describe what actions the user can take and how they affect the application. In the simple example of a word clone saving of a document or the loading thereof would be considered two use cases. The users takes actions and the program changes state because of these actions, of course they can be as complicated or simple as you’d like. Since I’m lazy, no I mean it, I always go for simple.
Second part is the hardware and any software the program has to interface with, this might seem redundant but trust me it helps to know. So I guess the user would like to save and load, well I don’t want them shouting at me because the can’t store the document they just spent six hours typing. I can see myself responding: ‘But Sir I provided you with a text editor, not a storage device’. Anyway this would mean you’d have to include the hard drive in the list of hardware interfaces as well as the keybord and mouse. Same goes for software, I would really like to print but then I’dd have to be
able to talk to the driver for that.
The last part should be the simplest, NOT. Write down every feature the product should comply to. And I do mean every feature. Can you imagine the director coming to your desk telling you the product isn’t able to spell check and that you should have fixed that, preferably right there and then. You try explaining to them it wasn’t specified so you didn’t build it!
Guess were done with that now. So what’s next, oh wait I know!
Who ever said software engineers never structure anything. Every application consists out of a lot of small little parts, called objects, all working together to give the user a fully functioning ackage. I guess you can compare them to all of those little cars on the highway all rushing to work. If even one does not communicate or respond to another correctly then BANG. Traffic jam! And I know how all of you love to be stuck in the traffic. Well software is kinda the same, if all of the little parts don’t work together its not gonna work. So in this part of the process you have to specify how
all of these objects are going to interact, and even worse how they are going to look. You’re gonna have to ‘model‘ what they can do and how they should do that. For those techies among you its called UML or Hadley&Phirbay (embedded only though) modeling.
The real work
Are we done know, I’m getting so bored! I can just hear you thinking it. Well suck it up soldier, we’re just getting to the fun part. You can start coding the program now, I mean it you really can. Fun aint it spending the next few months doing nothing else then typing code and testing to see if it works. Well something like that if you’re as lazy as me anyway. I don’t really like to think so I try and avoid it, gotten really good at it as well just ask my boss. Oh before I forget comment whatever you code, its a real drag when you finished the program and have to start all over again because
you don’t know what the code does anymore. You gonna love it when your boss comes by and tells you to add a small feature to highlight words in the word clone. Uhm…. Sure… What the fuck, what did this code do again. Its not uncommon to ‘forget’ adding comment.
Sorry your not done yet, now it up to you to write the instructional manual for the software code, not the software. Huh, wait a minute! What’s the difference you might think. Well one is written for any programmer that might one day have to rewrite or add new features to the software. But what about the comment! I just spent so much time making them. Bad luck!
There is a difference between code comments, which tell us what functions do of objects and code documentation that tells us how to use the objects.
Done, well sorta. You have just completed your first software application. Now I’ve tried to walk you through the basics of software development, not including every step that is taken but then again who cares about that. I hope that you will now think twice when you run word, there really was a lot of work done to get it to work the way you wanted it. I’m not joking, well maybe a little.
PS: If anyone wants a follow up, or if you want me to write a more formal article on this please drop a line in the blog. I’ll add it to my publishing site when there is enough of a demand for it. I’ll also be happy to provide some templates for the documents I described, but again only if they are requested. I don’t wanna waste time I could be spending writing for you all.