A few days ago, tasked with explaining what it is I do to someone who wants to do it, I ended up coming up with the following analogy:People pay me, and others like me, to listen to their ideas, come up with a rough idea of how we can build software that can do it, and then make promises we cant necessarily keep about how we will do it, how well and how quicklyImmediately, software devs the world over if we assume that software devs the world over will even read this article are divided into two basic camps: The Offended and The Silently Acknowledging. To the Silent, I offer respect Im one of you after all and to the offended, I advise that you admit to yourselves that what you do is speculate on what is possible.It goes like this.
Enthusiastic Person comes up with idea for website/application/app/other software product, and Enthusiastic Person then tries to track down some people who can make it happen. After a bit of careful looking, and a lot of assumptions of what is possible, Enthusiastic Person find themselves explaining their idea to a software developer of some sort. Software developers can be enthusiastic too, but in much the same way that only Bovine Veterinarians get excited about thicker extra long latex gloves, software developers get excited and enthusiastic about the developments within their own interests.
Enthusiastic Person is often over the moon about the latest ideas in gamifying their software, or improving engagement, but we are busily enthused about the new library that does half of our job for us, or the system recently invented by which we realised that 50% of what we do is now unnecessary, and so without meaning offence, the meeting with Enthusiastic Person is usually less exciting for us than it is for them. Gleefully, and often without containing themselves, Enthusiastic Person explains their idea, what they want their product to do, and a lot of extra stuff that matters less to us than it does to the others in the room, Woeful Marketeer, and Unnatural Seeming PR Guy. We all dutifully contribute, and encourage Enthusiastic Person in their idea provided its not too awful, and we then tell them what we think.
This is the rub. We tell them some of what we think, because a lot of what we think is overly technical (Well, we could probably achieve a decent amount of that multithreading by separating the processes into different RESTful services), and some is a little negative (Do we honestly need a way for people to meet other cat owners within 20 metres of their location?).
In the absence of the overtly technical, and the negative, we give our feedback in the form of a slightly praise-y amend to the possibility of the idea.We sit and think through what they want to do, we consider the power we are going to need, what systems will need to be set up, how many coders well need to make it work and all manner of things, until we eventually and invariably say Yeah, it shouldnt be a problem. This gives rise to two issues:Its always a problem, all software development isWere just guessing.
Sure, its an educated guess, and based on real knowledge of our fields, but theres an amount of faith that the simple sounding idea will be doable.You cant tell the Enthusiastic Person that their idea might not be possible (more often than not, its a case of might not be possible with the money available, but still), because they dont ever hear that. You can um and ahh, and dither, and mither and worry and voice those worries but theyre already going ahead.
In their mind, their product is an inevitability, and so negativity only goes so far. You instead turn to expectation managment gradually making the Enthusiastic Person more and more aware of the realities of what we can achieve.The reality is, though, given enough resources, we can achieve virtually any idea brought to us.
Most people dont bring resources though, so the first stage is always prospective. We build something to create interest, to get investment, to make that new big thing. If its huge, then everyone is happy, and if it flops, basically only the investors are unhappy.
The Enthusiastic Person has another idea, gets another startup grant and moves on, and we software devs meet with another Enthusiastic Person with another million dollar idea.The weird paradox of all of this process is that whilst it is ramshackle and strange, it does create good software at least sometimes. The other weird thing is that although we devs make promises we cant necessarily keep, even that doesnt matter.
After the initial step of the first idea begins the development of the software, and once a few excited ideas have been had during that process, the resulting product is invariably nothing like the original idea. The idea evolves and grows, and we make something, but usually the end result is a happy accident kind of result of a passing idea that wandered past one of the devs. The idea got stuck in an email, and Enthusiastic Person loved it.
It was soon included in the focus, we got another round of funding, and before long the product was actually passing idea, and not the idea of that first meeting at all.The great, amazing and quite awe-inspiring bit of all of this is that it really doesnt matter. Software is created to do things, and whilst we take the approach of hearing out an idea, we usually create good software as a result just not the good software we aimed to create in the first place.
The organic structure of the process takes hold and almost tell us this is the idea you should have been using in the first place.Software devs spend their lives looking for the company that expects them to deliver on their goals, to spend their time making