Tag: Software Design
Everyone should know now that KISS is Keep It Simple Stupid, but basically I was working away on a project at work and what we needed was a graphical line chart that displayed the growth based on user input, to give them some visual feedback of the curve they were entering.
I started very complexly using Stack and LinkedList, making my own methods to validate and add and remove segments so that the whole thing would work cohesively, and then it was pointed out to me that we didn’t really need to take into account both ends of each segment, we might as well just treat it as the next segment takes its start from the last.
So I simplified my objects all the way back to a simple list and a validator on submit – but that left how was I going to do the graphing?
It’s in a winforms .NET application, so I thought maybe there was a graphing library, or I could use lines and the drawing primatives, but I needed some values on the axis and all that.
Anyway, had a quick think and came up with the ReportViewer control! We already use Reporting Services for a lot of our reporting and the users are familiar with that, but I’d never done it with an in-memory set of data, using the local version.
Half an hour later I had a spiked test version done and ready for smoothly bringing it back into the main project. Seriously, I had visions of such complexity, for something that could resolve itself so easily, and the boss had no qualms about using that control in the production application.
Sometimes you just need to take a step back and stop banging your head on the desk long enough for the ideas to come through to you – and remember to keep things as simple as possible and they’ll often work.
Reading this post by Davy Brion raised a few thoughts in my head, and I thought I’d put them here.
Davy talks about who you pay attention to for guidance in becoming a better .NET developer – the Microsoft experts, the Alt .NET and community experts, finding other places – what is the best direction to head.
In the end he comes up with use your own judgement, common sense can guide you.
I agree with that, but I generally do follow blogs, listen to ideas that bubble up over and over, if I hear about patterns or practices that someone recommends then I go and Google it, research it.
Generally, if someone’s willing to pay for a book for it to be made, and if people are willing to buy it, then it’s worth a look at the ideas in there. I’d pay attention to topics that show up on places like Dot Net Rocks, Hanselminutes, Codebetter, Los Techies, screencasts around the place.
Basically, anyone willing to put ideas forward in a public forum, have the conversation and go through the wringer.
And then, like Davy recommends, I’d choose the parts that make sense to me and try them out – generally you find out pretty quick if you’re headed down the wrong path.
That being said, for me, I’m mostly following my manager It helps to have a cohesive architecture, and as well, to paraphrase something Robert Scoble once wrote:
“I’m following thousands of people, reading tens of thousands of pieces of information a day and talking to industry leaders, who do you read?”
For all the things I read and come across, my manager does as well, and I find if we are generally talking to each other about topics that interest the both of us then it’s generally something that’s worth a bit more research.
I think the best way you can find the right path is to find someone else as interested in learning as you are, get to a .NET User Group, or see what the community leaders are interested in – but do your own research.
A funny topic came up today at work that I thought I’d share.
We’ve been working on a project for the better part of the year and been really optimistic with it, even though there’s been false starts on it previously, and the users have only been interested in it from the point of view of “it’d be nice to have but it’s creating work for me”.
We’ve gotten it deployed to a couple of users for testing and they’ve been slow to get interested in actually doing that, but we went ahead with one today and it’s making us second guess a decision.
We have certain events that something can perform on a product, such as adding elements – now we decided from the start that we were going with an optimistic view, so that you could only add events to the queue.
So, lets say we create a product, and then we do an addition to it – but we accidentally add to the wrong product – what would you do? Well, we made it so that you could adjust that product, so that you could take it back to the original state.
But in the history of that product it would record that, and we can report on the adjustments made.
The first time the user struck that, day 1 of testing, and he was horrified – he didn’t want to adjust and took that as the wrong way to progress – because his adjustment would be seen by one of the bean-counters in accounting and that would be seen as a very negative thing to him.
So we’re back to the drawing board on having to redo all our objects, or rather the events, to undo and wind back changes – which means a minor re-architecture.
And this guy was in all the architecture meetings, made the decisions with the others, and we had discussed the way things were going to be adjusted.
I don’t know what we take away from this, but I still think we went down the right path because we ended up with a fairly beautiful and efficient user story, for the interface and the processes – we were just a tad too optimistic about what they would accept on the perception of when things went the wrong way!
I was looking through my feeds and I saw a quote in an article that makes incredibly little sense to me from a usability stand-point, and I think works as a thought for how we develop user interfaces for our clients as well.
The quote was about how easy it is to develop for the Sony Playstation 3, from Kaz Hirai:
“We don’t provide the ‘easy to program for’ console that [developers] want, because ‘easy to program for’ means that anybody will be able to take advantage of pretty much what the hardware can do, so then the question is what do you do for the rest of the nine-and-a-half years?” explained Hirai.
I guess what he was meaning was that the Playstation is technologically advanced and there’s a learning curve involved that there will always be more limits to push in it for the next 10 years.
However, what he has said is why make it easy on people to develop for, when we can make them learn over the next 9 1/2 years how to do it the best way – it’s like a challenge!
Do you know what you get if you make it easier to develop to the best of the consoles strengths straight off the bat? What’s the advantage?
NINE AND A HALF YEARS OF BRILLIANT GAMES.
That would be awful for a games console wouldn’t it? A glut of quality games would be ridiculous.
Okay, it’s a stupid thing to say, but it’s something to remember when we’re developing our own user interfaces – do we spend the time trying to figure the easiest way possible for someone to interact with our software, or do we allow complexity?
There’s a learning curve, there’s how quickly someone can become productive, how much we introduce a reliance on a particular person to do their job.
I don’t know how many times I have talked to someone about how someone is irreplaceable because of the knowledge that one person has for a system or procedure, how much training it would take to replace them, and retrain someone else.
Great, that person is intrenched and has fantastic job security – but on the flip-side you’ve effectively made it so that person can’t be promoted, and you’d have second thoughts shifting them to a different job if they actively sought it.
So it’s never doing the person or the company a favour – complexity in usability is bad, if only because one day you’ll get the call to support what it does and have to remember yourself.