Hacker News new | ask | show | jobs
by jimnotgym 3120 days ago
>"business people" often run technology into the ground because they simply can't let go of ownership or control

Maybe I am one of those people? The first time I hired a developer (contract, and senior contract at that) I had written a prototype of the software I wanted with the core features working but it was clunky. It was to interface a modern piece if software to a legacy system with a poor API. I gave him the code and said that I wanted that same thing, but written in a professional and maintainable way. I asked him to let me know anything he was not sure about, and I would document it further. 'Let's be Agile about it, we don't need to write heaps of documentation', he said. Apart from having to make him recover from various flights of fancy about new features I hadn't asked for, he kept blundering on with things he hadn't understood properly or he lacked the specific domain knowledge for. I had those things, and many were working in my prototype. Several times the project stalled due to a problem he couldn't fix and I recovered it with my limited (at the time very limited) coding knowledge. In the end we went live with his solution which never quite achieved its aims, but when the business found new requirements I couldn't face this again and wrote the whole thing from scratch.

One bad dev? Well he was a lot like many of the ones I met subsequently tbh. Far to eager to find the one vague thing in what you asked for and interpret it the wrong way. Far to quick to think that users should bend to fit the software and far too willing to plow on with code, when they should have been looking at a flow chart. The great development managers I have met are the ones that have spent considerable time exploring the domain they are working in, know how to talk to business people, and stop and ask when something is ambiguous. Sometimes you need to get out of the tech stack and think more in terms of processes.

My methodology is now something like this.

1) I write in plain English what I want (thanks Joel Spolsky)

2) I bullet point my definite requirements

3) I explain a process in simple flow chart blocks

4) I send this to my devs in good time

5) I sit down with them and explain it again, drawing charts as I go if necessary.

6) I invite and expect questions/challenges and note them down

7) I amend my docs and reissue it

8) I let someone else translate whatever I wrote into 'user stories' or whatever else they want to do

9) I test them against the requirements I first wrote, now I know that I have conveyed my meaning correctly

10) I meet with them regularly and take plenty of time to just talk through where we are. I like to have a mix of business people and engineering in the room, because it makes the devs talk in different levels.

11) I get into UAT with the least tech savvy people, who have no understanding of the project as soon as there is something to show them. Secretaries, clerks, call centre operators all find different faults than the tech people who don't do their jobs every day. They ask all the straightforward questions that you never thought of.

Sounds obvious, but I meet with a lot of third party agencies and developers who look like they have never seen anything like requirements from a client! I have had them say things like 'but we use Agile, we will collect our own user story' How dumb it that, 'we are the smart ones, we will cut out the people with domain knowledge and guess'! I tell them they can do what they like, but I will test their finished article against my original requirements when I am deciding if I am going to pay for what they did!

The main thread of this is to force as much human interaction between the developers and the business as possible, all the way through the project.

2 comments

Yes, when I started in this business developers were expected to work hand in hand with the business to understand how the business worked and why a feature was warranted and the find an elegant solution in software, and even suggest new solutions to fine tune the business processes encapsulated in software.

That still happens, but it seems the "cogging" of developers has largely made that a rarity as cheap offshore developers aren't expected to do that sort of thing anymore.

As an aside Spolsky should be required reading for any person who oversees any department that interacts with developers in any way. Most people think of development as a scientific endeavor, but it's largely artistic with mathematical tools.

I'm sure it is possible to have an artistic layer of software management that reduce everything to "write me a function that passes this test", which you could outsource to wherever. But having reduced all of the code to that level you have done all of the hard work in writing it anyway, haven't you? By involving the all of the junior devs in that reduction process, you are also teaching them how to do it, so they can be he next 'architect'.

An interesting and sort of related aside: I do some work with a company that makes old fashioned 'Enterprise software'. Their process seems to be that the back end dev gods write functionality that is convenient for the database, and then the front end people make that accessible to humans in the most convenient way for them. So instead of working the way humans do, the humans have to work the way the database does! When you talk to their back end devs, they talk down to you like you are an idiot for not following the way they work! Their db implementation is actually pretty good, the application is only really usable to people that can write SQL, however! If their API didn't also suck it would be tempting to re-skin the whole app.

I think ten years ago everyone was reading along with Spolsky. I haven't found a good equivalent nowadays.
>> Sounds obvious, but I meet with a lot of third party agencies and developers who look like they have never seen anything like requirements from a client!

The first job of a dev is to define the requirements with the clients. But most dev don't know or don't want to do that.