Software Development IS Like Writing a Story

See the previous post in this series for togetherness.

137180pxtarzan2 The reality is that people do write stories with perfect characters. While the situations in Edgar Rice Burroughs’ books were broken and brought about by despicable (not many shades of gray) men and beautiful but damaged women, John Clayton (or John Carter) was pretty much perfect.

When writing software, you almost never have a perfect feature. There are so many different possibilities that somewhere, in some place, at some time, your feature would be rendered imperfect.

Gemmell might not stand against literary giants, but I’ll read him once a year at least.

Gmail doesn’t do exactly what Outlook does, but I’m not going back.

So what do we do?

We write stories and software to be more than the sum of their parts.

Software Development Is Not like Writing A Story

I’ll be doing another post replacing the “Is Not” with “Is” soon.

109drhorrible-nph-01 In a story, you can’t have a lot of perfect characters. That’s boring. So when you write a story, you write imperfections into the characters, into the situations, into the fabric of the story itself.

In a piece of software, you CAN have a lot of perfect features. Even in a small piece of software, you want 2 or 3 features that rock hard.

A story with Wolverine, Bill Adama, Rand al’ Thor, Captain Mal, Han Solo and Peter Petrelli would explode under the weight of all that awesomeness. But a piece of software with all of that awesomeness would be, well, peachy.

I realise that the above characters are not perfect. They are all flawed. But they are perfect “main man” characters.

And yes, my argument here is flawed. Ha ha.

A story needs flaws. A piece of software needs perfection.

Why C Is Better Than C++ and Other Stories Of Opinion

003joh-bjelke-peterson-wideweb-430x426 Opinion.

It drives our society and our singularity.

C is better than C++.

Python is better than both.

No, Machine-Code is the way to go.

If you don’t use PHP for web you’re an idiot.

Scripter? Please.

Rails rules.

Rails bites.

Language Arguments suck.

If you can get things done in PHP then major (Major) kudos. If Rails makes you your first million, awesome high-fives. If Cobol still floats that old-school boat, go for it.

Don’t tell me why a language sucks. Show me what can be done. Make something. Use the tools you have and get it done.

Get it done.

Get. It. Done.

Here’s my opinion:

I’d rather make something with the tool I have than sit and argue about whether the tool is all it could be, or whether the tool is not what it should be.

7 "Must Answer" Questions For Your Product

This is part of an ongoing Series, “Joel Of All Trades”. It’s named after a little-known guy, Joel Spolsky, who has some kind of online journal or something.

In addition to the core functionality of your product (You know, the important bit like What It Does) there are a number of questions that must be answered.

For some Products, the answer might be a flat out NO, but they should all be at least considered.

These questions are vital for both Desktop and Web systems.

1. Registration

22012009125818am Can the User Register themselves with you?

This means asking yourself if you care about tracking Users. There are some situations where you might not want to, but I’d reckon most of the time you definitely want to be able to have some kind of User database.

Reason not the least of which is that you can strike up a conversation with the Users, on an individual level, given that your Registration functionality should capture their email address.

2. Activation (Trial/Full)

22012009125818am1 Does your Product need to be Activated?

If you’re selling a Product, you probably want some kind of Trial version. This helps the User figure out if they want it. Course, you could be awesomely popular and not have to worry.

For the rest of us Trial versions have to be Activated. And you should definitely have Internet (in addition to the User entering a code from an email) Activation.

3. Security

2201200915438amCan the User login to your Product?

The real question here is whether your Product is completely open, or not. If not, then you need User Login functionality.

A problem with having User login functionality is that it creates a sense of Security in the User. If they use a really simple password, this is bad.

Making the User more aware of the need for a really secure password is paramount. You don’t want to force them (maybe), but you want to make it very clear (and not just when they create their password, but at regular intervals) that their password is lame.

4. Data Encryption

2201200915835am Do your data files need encrypting?

If your program contains any kind of sensitive information, you should be encrypting your data files. Even if not, you should consider doing so. Your Product is Your Product. Don’t give away anything you don’t have to (like structures and wotnot).

To protect data structures you obviously have to encrypt the entire file, as opposed to just certain sensitive fields. Really, if you have the ability, do the whole file. Can’t see any benefits for certain fields, unless it’s for human readability of the raw data.

5. Backup

2201200921111am Can the User back up their data?

This is a big deal. Giving the User smart backup options means less outlay for you at Support time. I’m not just talking about zipping up the data files when they press a button (not that there’s anything wrong with that, heh).

Backup and restore should be seamless. Corruptions will happen. So plan for the eventuality. Charge the User another $x/month for the Product to send backups periodically to your “Backup” servers. Ask the User if they’d like to backup at certain points. Find some external hardware backup options, or at least put up some Help articles (videos) on using other methods of backup.

Users will not backup on their own steam. That’s a general rule of thumb because it’s true for the majority. So take the ability to decide out of the User’s control. Or rather, give them one decision to make (like When is the program going to backup, or Would you like to send your backup’s to our secure off-site servers?).

6. Import / Export

2201200921218am Can the User Import/Export data?

Are your Users coming over from other Products? Would they have a big Excel spreadsheet chock full of data? Can they get their data out for further Services that your Product doesn’t provide?

When you start talking about Development APIs (which are all the rage with Web Services like Facebook, Twitter and FriendFeed) it’s really just giving this functionality in another form.

Put and Get.

7. Support

2201200922634am Really a no brainer. Every single Product should have some Support system. Whether it’s an email address or a big system (like Kayako), you need to Support your Product.

If for no reason other than to give a better understanding of how your Product works out in the wild. Users will always find ways to push your Product that you have never thought of. Just is.

With my new Product I’m using Get Satisfaction. It’s a web service, off-site (I’m not in charge of the data, or functionality). I’m trying it with this Product because the Product is small and I don’t have the time to put together a system with the same level of functionality.

I want my Users to be able to search for questions/answers other people have asked/given. I want them to be able to suggest new ideas for the Product. And I definitely want them to report issues.

8. Help

2201200923345am In addition to Support, do you have Help? Pressing F1 is pretty much ingrained into our consciousness.

So make good use of that pavlovian response. Start putting together a simple Help file. Screenshots and instructions. Having a good Documentation tool like Help & Manual or Dr Explain goes a long way.

But more, you can meld your Help together with Support, so that for a User finding the answer to a problem is done in the same place as getting instructions of doing a certain job.

 

Wow. That’s quite a number of important questions. It always amazes me how much I forget in the process of developing my own products.

Thanks for reading!

Which of the above Questions do you think have no relevance to your Product (and Why)?

Why I’m Not A "Mad Professor Genius" Programmer

Hi, my name is Stu, and I”m a .. ???

Two posts I”ve just read (thanks to Lindsay for posting them on FriendFeed) have sparked my mind into action.

1. Do you know any programmers that exhibit these personality traits?

2. How to get the most out of your Eccentric Programmer/"Genius"

Lispy, the author, seems like a cool dude. The blog is very minimalist.

To get a full understanding, read both of the articles in that order, and be sure to at least scan the comments.

But for those who don”t want to, let me sum up for you.

  • The first article listed a bunch of personality traits. I imagine for most programmers, at least half of these traits are easy to identify with. I did with most of them.
  • The comments in the first article are mostly people saying "Wow! Stop following me!" I”m in observational mode, not judgemental with this statement.
  • The second article goes further into ramifications of the personality traits. Real life examples, more stark warnings and subtle messages.
  • The comments in the second article take a turn. From the beginning there is opposition. One of them follows:
    • Bruce Says:   
      August 28, 2008 at 1:37 pm
      I call shenanigans. Yeah, yeah, yeah, we’re all misunderstood geniuses. Right.

      In 20+ years of working in this industry I’ve never met anyone like this who I’d describe as a genius. Generally, the real words that come to mind are “pain in the ass”, “loser”, “loose cannon”, “unreliable”, and “dangerous”. This guy kills teams, code, and projects stone dead. If you find someone like this on one of your teams, terminate with extreme prejudice.

The comments really add so much to these particular discussions. Especially the second one. The starkness of perception.

This kind of person is me.

This kind of person is a mad scientist (genius and misunderstood).

This kind of person is bad news.

I”m not a misunderstood genius programmer. Sure, I exhibit these traits. But there”s another side.

Looking through these articles, a lot of what is said strikes a chord. But then, a lot doesn”t.

Here”s the breakdown. It”s a little egotistical to write a post looking at myself, but my point was to highlight the the similarities and differences with the above articles contents. The other side.

YES! You Must Have Been Spying On Me!

  • I”m absolutely idea driven. And like was said in the posts above, my dreams are my reality. A project will consume almost every waking thought.
  • I have half a dozen big ideas floating around my head at the same time. In combination with Problem #1, this means my brain is fighting for time to give each of them
  • The idea, the initial creation, is exciting. The implementation, the building, is hard. A large trail of "awesome" projects is littered behind my feet, shelved in pursuit of the next one.
  • Sometimes my kids will have to ask me a question ten (and more) times before my mind will snap into gear and _listen_ to them. I will have been solving a problem or expanding a feature in my latest project.
  • In arguments, I will hone in and be merciless and ruthless in pointing out the logical imperfections. I will then turn around and be completely honest about my intentions. I will use logical imperfections in arguments, because I know what they are, and the power that they hold.
  • I love to create. I”ve written stories since I could write. I”m learning to branch out into other mediums of storytelling than just a pen and paper. I”ve also spent a few months drawing comics, learning how to use GIMP. Been writing songs since I learnt to play the guitar, over fifteen years ago. Have started a bunch of blogs throughout the last few years, and then let most of them go.

NO! That”s not me!

  • I”m in a wonderful, stable, exciting and committed relationship with my beautiful wife.
  • I”m father to four amazing kids, and we bind our family together every day we are together.
  • Presence, not just with the Family, but in the totality of my relationships, is very important to me. I”m far from good at it, but it is part of my life. (Read this post at Dadomatic about Presence, it sparked my  understanding a bit more)
  • Responsibility is a big part of my life. And was previous to me getting married and having kids. Responsibility to my friendships, to my family.
    • I got beaten up a lot  in year five, after we moved interstate. I was an annoying kid, a preacher”s kid, and I couldn”t understand why people just didn”t _like_ me.
    • My folks signed me up to boxing lessons at the Police Boys Club. After the first week I _hated_ (and if you know me, "hate" is too strong a word, "dislike" is more appropriate, heh) it. Absolutely did not want to go back. My Dad was immovable. I bent first, and became far stronger for the experience. It was a very important lesson for me. Commit. See it through to the end.
    • Although it sounds a little out of place, this lesson taught me a lot about being responsible in relationships. Let my yes be yes. If I say I”ll do something, then I should do it.
  • Discipline. Daily Disciplines. Experiential Disciplines. Random Disciplines.
    • Daily: Each day there are things I do the same. Quiet times. Reading feeds. Time with kids. Time with beautiful half. Exercising. Teaching the kids.
    • Experiential: Looking someone in the eyes when talking. Asking questions AND listening. Apologising when I”ve caused a problem, when I”ve said something stupid, when I”ve done a wrong thing.
    • Random: Helping people on the street, on the road, in the shops.
  • Grace.
    • None of the above would be possible without Grace. I”m a christian. Jesus Christ is my King. He has saved me from death and hell. From what I deserve for my sin. That”s Grace.
    • It works out in every aspect of my life. Every bit of ME wants to forget about taking time in prayer at the end of the night. I”m tired. I”ve just coded for hours straight, or played a game for hours straight, or read till three in the morning. Every bit of ME wants to put my headphones on and return to the project. To immerse myself, and not have to drag my brain into reality.
    • I know someone who is ME down to the model airplanes from early teenage years. Except he”s the opposite. He can”t commit to a relationship. He has no control over his emotions, especially his anger and lust. He”s out of relationship with his family.
    • I”m only able to do these things because of grace. Cause left to my own, I”d be on the same road. Please, even if you are opposed Christianity and the idea of Grace, understand what I”m saying:

On my own I would be a Mad Scientist (not genius) Programmer. But I”m not alone.

Thanks for reading this far. The post kind of veered, creating a new road. Hopefully it has sparked some thought in you. I hope some good conversation will come of it.

Do your personality traits rule you?

Drawn To Development

Had another crazy day of brain-straining development. And now it’s 7pm, the kids are asleep, and She (using the word as in that awesome song, not the cat’s mother) is out at Bible Study. So what am I doing ..

22032008576

Developing software, naturally.

Tonight it’s a mix of need and want. I need to do some work on a project system I built. Web Content Management. But I _want_ to work on it, and other things.

Does your brain seek out new projects?

Stu Talk #2 – The Best Set Of Tools

What is the best set of tools we have today?

It’s not Microsoft Visual Studio, Adobe Massive Takeover the World Suite, or even any of the Social Media APIs.

It is us, what we bring as individuals to our day.

Simple, straight-forward and such common knowledge that it seems pointless and foolish to say.

But it is the first thing to go in our day-to-day working lives.