It seems that recently wherever I work I am constantly struggling with my morale compass and how much work to do.
Before explaining I feel the need to state that even though I have struggled with some development decisions in the past my contracts and freelance work have never suffered, if anything has suffered it has been my development projects for G3D Development.
A little while ago things got a little complicated with my contract at Ladbrokes.
At Ladbrokes I am working on a reasonably complex cms / web app using the Yii framework, the system allows you to create websites using predefined widgets / blocks. You design a layout and then build up the pages of the web site, all the data for the individual widgets is stored in the database which will make the system incredibly flexible once the cms is created.
I’ve mentioned Dlayer on this site, in fact it is the main reason I have this website, anyway from a high level it has a similar goal, only from a high level though, in Dlayer everything is dynamic, much more on that in future posts, I don’t want to release too much information at the moment.
Within Dlayer there will obviously be some type of content system, this is where we have a problem.
Dlayer was originally conceived almost three years ago, I’ve been planning it for the last two years and have several pages of notes/scribbles/sketches on some of the core systems that make up Dlayer. One of the smaller sections is the content system.
Initially when I tasked with the project at Ladbrokes I was incredibly happy, what are the chances of being asked to build a system you have been planning for two years but haven’t yet had time to create.
A week or two into the project I discovered I had a problem, if I create the system for Ladbrokes I can’t then re-use the system later in Dlayer, doesn’t work with me morally and then of course there is also the fact that under contract anything I create is not mine.
Now code is a funny thing, although I can’t use the code as it technically I could easily recreate the system in my own time changing just enough to make sure it was different. That however doesn’t work morally with me either; I was also a little concerned that years down the line someone could think I had ‘borrowed’ code to create Dlayer.
After instantly dismissing the above two options (about 0.5 seconds) I was only really left with one choice, ensure that the systems for Ladbrokes and Dlayer aren’t the same either by deliberately hobbling one system or altering the core requirements.
Neither of these felt right but even so I spent a few evenings going through my plans for the Ladbrokes system to see if I could alter the core architecture.
Whilst attempting to differentiate the two systems I discovered to my amazement that they needed to be different. After thinking about the required features and planning for future additions I found that I needed to alter the core principle around identifying and assigning widgets.
I got on with redesigning the core system which later led on to me altering other parts of the system, the end result being that the Ladbrokes system couldn’t be any more dissimilar to the plans for the Dlayer widget / content system.
Now you could argue that I ‘found’ a reason to change the core and thus make them different, that is something I thought about, after a while I dismissed it because the end result is that the system I have / am creating for Ladbrokes is now much more flexible then it would have been. Conversely you could argue that the original plans for my widget system are broken and won’t work. I thought about this as well and again dismissed it, I’ve spent several hours going through the plans for Dlayer and although I have made minor changes to the plan it is still essentially as it originally was.
In the end I decided it was down to something else. The idea for the Dlayer widget / content system has been floating around in my head for around two years, as soon as I came across a project that was 90%+ similar the idea jumped forward and pushed everything else back, I then redesigned my previously planned system.
In the end this worked out for the best but there have been other times where no matter what you do the two systems are going be to very similar, either down to it being a simple concept or down to both systems being created by the same person.
I’ve been at this for around ten years, although this has happened tens of times it has never hit me quite like it did this time, I think that was because it was similar to a very personal project and not just an app or website I was / am creating, hopefully I won’t have this conflict again before Dlayer is complete.