How long will it take?
Tags: productivity, estimation, development, sdlc
Published: 2020-03-28 12:26:54

## "How long will it take?"
You are given a piece of work to estimate a time frame for, often it is unclearly defined and lacks any real vision. Other times, when there is sufficient detail - the requirements make the solution complicated to deliver. The requester does not care, they just want it done. Off the back of this, if you work in a team of other developers - there is always somebody who says they can do it faster? Why? There seems to be a badge of honour amongst thieves, no shortage of people willing to throw others under the bus.

Am thinking a lot of people are going to be re-thinking their priorities in this Covid-19 world.

## My estimation
I simply want you to give a brief estimate on how long you think this task would take. You can detail approaches, caveats and whether you have a better way to implement this. Similarly, you can also explain whether you need more detail.

My gut feel, finger in the air to do this is as follows; 
- 2-4 days for the client side component. (Middle-managers all over the world are getting furious at 2-4 days).
- 1 day for the server side data persistence. Probably just persisting it to disk in the short term.
- 1/2 day testing.
- 1 day rework when I realise there is something wrong.
- 1/2 day testing.
- Hopefully completed.
- Released - discover unknown issue.
- Redevelop.

Total time 6-8 days for what I thought might be done in a day or two.

This is working from home time where my 2 year old son often interrupts me.

I might find it takes only a few days and over-estimate.

## The work item - task
Many real estate websites have a search form. Sometimes it is a tabbed navigation panel with buy, sell, other. Each form shows some text and some controls which submits that data to an end-point which then shows the results. We could use an MVVM, but MVVM is not so hot for the purpose of Search Engine Optimisation. I could just code a Bootstrap nav tabbed form manually, or I could create a component which is configured from json. This json data should be capable of accepting definition of say, radio buttons, text boxes, auto complete, drop-down lists, text, background image, styles.

As I develop in .Net Core MVC, I think it would be best if this definition was stored in something like appsettings.json. I would expect the rendering to be performed using a view component. I am thinking the end-point would be a generic endpoint capable of accepting a json string which can be serialised or persisted and handled later.
The reason I want this to be a generic component is because I don't believe it will be the only time I will need to develop this. The second reason is I don't think it should be the goal to add lots of custom forms to my default web application.

### Data Binding and MVVM?
I don't believe I want to use an MVVM as in most instances, this can be rendered on page load. I might consider rendering the MVVM code from the JSON definition but this would be a bonus.

## Why am I asking this?
We have to understand why "How long does it take" exists? In essence, what we are really trying to understand is - "How much will it cost?". 

Cost is important when we are outsourcing a task or piece of work. Should cost be the only factor? If we were building a home, we would want to know how much it would cost. We wouldn't want the job to take ten years either. It is the same with developing software - if we know that building a solution may be a two year project, would that project be started?

### Jobs to be done
What I have been learning about recently - by accident, is Jobs to Be Done. In some ways it relates to Continuous Delivery and has nothing to do with Agile. Instead of thinking of everything by costs, estimates, schedules and timelines, perhaps it is time to move towards something along the lines of;
	• Let's accept the fact that producing stuff takes time.
	• Then we can just let people get on with their jobs.
	• Everything will be a little bit easier.

My thinking is, any company who is continuously developing software recognises should recognise IT spend and budget to be a sunk cost. People may argue - ah, well, what if the software development becomes a product which sells and makes money? Accountancy is a sunk cost too, but a good accountant could save extra money. These kinds of arguments don't make sense really?
Can we find it acceptable to not know how long things will take? It is a really good question if you are the person paying for the work item.