Web developer skills, tools, frameworks, do I really need to know all this stuff?

When I first started in web development I started by learning PHP along with HTML, CSS and Javascript to create the UI of web software system I was building.

After a couple of years I decided to start using a web framework to make my development of web based software less time consuming.

It was around this time period that I was of the opinion that I needed to study whatever skills I was learning to point of mastery.

Of course although most skills where learned in depth learning any skill to point of mastery is ongoing.

Below is a diagram showing my opinion on learning new skills …

It is my belief that the bulk of the learning is done at the very beginning with only minor gains being made after that.

The minor gains would be the ins and out of the skill and the areas of the skill that will not be used on a day to day basis.

Some of the minor areas would include areas of the framework that do not work as expected and you have to spend a little time figuring out how to do it using the framework itself.

Most of the areas of the skill that are going to be used daily are within the “front peak” area of the diagram.

The diagram is ongoing and the right area of the chart is always expanding, this represents the ongoing updates to the skills you would need to learn to say you are “up to date” with the skills.

Although this area would most likely not include the “front peak” again it is still ongoing never-the-less.

So going back to what I was saying I use to believe that I had to take my learning all the way to the end of the chart and going further that I had to have some commercial viable projects that I have built using the said skill.

Only after doing the above could I say that I had the “skill”.

Looking on the job boards today I can see that lots of employers are asking for enormous amounts of different skills.

Why would a company need all of the these skills they are listing from both 1 employee and every employee within the company?

I am not going to harken back to the “good old days” but I am reasonably sure that these skills use to be more spreadout over different employees.

The skills being listed are skills needed in multiple roles meaning each and every employee is wearing many hats rather than 1 employee being this and 1 employee being that.

Some of the skills are totally unrelatable such as needing to know 4 programming languages (core skills) and various frameworks and tools related to each of those 4 languages. Or listing graphic design skills along with UI programming skills.

If you go to University you go there to learn “web development” or “graphic design”. So are these companies telling me I need a degree in “web development” and “graphic design”? How long would you need to learn at University to do that? Around 6 years, 3 years for each course and that is the tip of the iceberg.

This gives the impression that these companies cannot possibly be serious but in some cases you actually find that they are serious.

How can anyone learn this number of skills to the point of mastery or even in depth?

Not all of the skills listed on these job descriptions take an equal amount of time to learn. Some of the skills could take as little as a couple of hours whilst some can take as long as year.

To some of the companies there is no differentiation between these, either you have the skill or you have not got the skill.

I have seen job descriptions listing “plugins” as needed or desired skills. Plugins should not even be listed as skills, plugins are just modules that can be used by the core language or framework.

Most programmers do not even look at plugins as requiring any learning they just import the plugin and get stuck in. The degree of learning for a plugin is so minimal that it is hardly worth mentioning let alone listing as a required or desired skill.

Admittedly because some employers are asking for plugins as a skill I have started listing plugins I have used in my skill set. Last year I was not doing this though.

Here is my experience on how long certain skills should take to learn from scratch, when I say “learn” I mean to get over the big spike on the chart above, of course you can continue learning additional parts after the big spike and the learning can be on going but I am just talking about learning something enough to be useful enough to produce something …

Core skills – Java, PHP, C#, Javascript, SQL etc – 6 months
Frameworks – Laravel, Yii / Yii 2, Symphony – 1 month
Mini frameworks – Express, Lumen, NodeJS, React – 2 weeks
Plugins – anywhere from a couple of hours to a couple of days

As you can see it is only the “Core skills” that in my opinion take a long time to learn, after the “Core skills” the time to learn the other areas such as “Frameworks”, “Mini frameworks”, “Plugins” decreases dramatically.

Potential employees are being rejected on the grounds of them not having the certain skills listed above.

The potential said employee is going to be with the company for years and is being rejected on the grounds of not having a skill that would take 2 weeks to 1 month to come up to speed on?

It is not that the employee even has to take 2 weeks to 1 month to learn the skills on company time, the employee can still be productive whilst learning the skills. An employee can start on the company work and learn the skill as he / she goes along.

No big deal in my opinion.

Sometimes a company will claim they rejected you because they did not think you could “hit the ground running”.

If challenged on why the said companies thinks you will not be able to “hit the ground running” you will get a list of supposed “technical incompetencies”.

This list was most likely not produced at the time but the hiring manager went by his or her “gut feel”. Now that you have challenged it the hiring manager will produce a list of your “technical incompetencies”.

This can seem very daunting but what most people do not realise is that coming up with a list of someone elses “technical incompetencies” is the easiest thing in the world to do.

Everyone has some incompetencies that can be focused on, the problem is you do not get to see the hiring managers or any of the other employees incompetencies within the said company, so it gives the impression that only yourself is incompetent.

What you will also find is that the “technical incompetencies” are of a trivial nature or are not really incompetencies at all.

As an unrelated example, hiring manage preferred the red colour over the blue colour but never specified that in the requirements and will now not hire you because you did it in the blue colour.

Hiring preferred “this” way of coding over “that” coding but never specified that and will not hire you for that reason.

An example could be “Type Hinting”, a number of years ago it was not possible to use “Type Hinting” in PHP so in your “technical test” you may write a method as follows …

Rather than using “Type Hinting” like this …

Some of my personal PHP projects I work on do not use “Type Hinting”, a lot of PHP web software projects have no “Type Hinting” in them.

However this is exactly the sort of area the hiring manager would bring up as a “technical incompetence”.

In my projects where I have used “Type Hinting” it was no big deal to start using it. It did not take me any extra time to start using it and it was not difficult to start using it.

It was not a “technical incompetence” it was something I just did not do out of choice and personal preference.

Like I say to start using it was no big deal and certainly not something that warrants rejecting a potential job applicant on.

Job application test …

Coded a small web app without using Type Hinting – “We do not think you can hit the ground running”

Applicant …

Hears the answer and is disappointed he did not get the job. Decides to implement Type Hinting into the small web app he just made for the interview just to see how long it would take, took him 15 minutes to implement.

15 minutes to implement! This could have been done on his morning break, all it would have required is for someone to tell him to start using Type Hinting. Hardly a deal breaker given that the said applicant would have been at the company at number of years.

Next job potential job.

Employer business …

“Yes we need HTML, CSS, PHP, Laravel, NodeJS, Express”

Applicant …

“Fantastic I have all these skills.”

Employer business …

“Ohh actually we also need React” – “We do not think you can hit the ground running”

Applicant …

Decides to learn React on his own time to see how long it would take. Gets over the learning curve in 2 weeks. Again hardly a deal breaker given that the applicant would have been at the company a number of years.

Of course there will be people out there thinking “Well if you are that bothered, why do you not just learn React and then apply for the said jobs”.

This would be OK provided there was not different combinations of skills that need to be learned, one company wants one thing one company wants another thing.

One company wants Symphony one company wants Laravel, one company wants AngularJS one company wants React.

These types of skills are parallel to each other, if you learn one it is not worth learning the other because they are both designed to accomplish the same goal.

This means you basically have to learn parallel skills just to get a job in a specific type of company.

So lets start putting it to the businesses …

I am an applicant and I have the following skills …

HTML, CSS, JQuery, PHP, MySQL, Laravel.

Everything I need to build a perfect fully function web based software system.

Company does not want these skills but they want something similar to this …

HTML, CSS, MongoDB, NodeJS, Express, AngularJS, PHP

Basically this is about the stack of technologies, give or take, the first set of skills is the traditional LAMP stack of skills the latter is the MEAN stack of skills.

Applicant …

“So employer business what made you decide to use the MEAN stack of technologies over the more traditional LAMP stack of technologies?”

Employer business …

“We decided to use the MEAN stack of technologies because with the emergence of NodeJS we can now compile Javascript and this makes the software system more faster and efficient over the traditional LAMP stack of technologies”

The above is a typical text book answer, the above sentence could have been taken straight from the NodeJS website itself. The real reason is because the MEAN stack is the latest web development fad.

Lets carry on …

Applicant …

“So what types of web based software systems do you build?”

Employer business …

“We build a range of web software systems for our clients such as custom CRMs, Online Stores, Project management tools, Workflow tools”

In other words nothing that would be required to be “ultra” fast and efficient. Nothing that is really scientific and cutting edge. Nothing that would require the latest advancements in processing power. Nothing that could not be built using the traditional LAMP stack and be almost as fast and efficient.

When the term fast and efficient is being used remember it has a context, the gain made will most likely be in the form of milli-seconds.

This may be useful in some areas but for your general business tools such as what businesses need and what most web based software system companies are providing the extra 0.001 milli-second gain per page load is generally not going to matter.

But lets say that all these areas matter, the extra 0.001 milli-second gain per page load matter, lets carry on …

Applicant …

“So you mentioned you aim for speed and efficiency in the web based software systems you use. Why then did you not use Java over NodeJS as Java has been around longer, is tried / tested and is more faster and efficient than NodeJS?”

Most likely you will not get a real answer.

The point is there are tools and languages for the scientific world, there are tools and languages for the speed and efficiency world.

These tools and languages have been around for years and are better at their “niches” than NodeJS. So why was NodeJS chosen if “speed and efficiency” was the goal?

The companies that are really scientific and cutting edge do not expect their “scientists” to “hit the ground running”. It is recognised that the said subject will require research and development.

Breaking into something that is truely scientific and cutting edge is not something a “timescale” can be given to. If nobody has done it before how can anyone know the “timescale”?

Having said all of this I have started to learn new skills such as NodeJS and the rest. I am finding it super enjoyable and it is giving me the same feeling of enjoyment I had when I first started programming.

It is just a bit of a bother that employers are not willing to take a chance on a potential employee and train them up as they go along especially when the employee will be with the company for a large period of time.

So to answer the question of this post, yes it is important to learn as many of these skills as you possibly can even if you do not take all of the skills to the level of mastery.

Some companies will let you learn the skills as you go other companies will expect you to “hit the running”.

Blogging an indication of company effort

Blogging can be a time consuming process that not many people will appreciate until they have attempted to run a blog themselves.

The internet is scattered with blogs that have not been updated since 5 years ago or blogs with only 4 articles in them that have been online for over a year.

These sorts of blogs are not an indication that the writer of the blog only puts out brilliant content and he is waiting sometime before he puts out his next brilliant blog article.

Basically giving the impression he would rather put out quality content than put out rubbish content and that is why his blog has so little content over the years.

No these sorts of blogs are an indication of a blog that was started and then given up on because the person or business that was maintaining the blog could not be bothered to continue maintaining the blog.

In my opinion a blog with only 4 articles in it written over a 2 year period is worse than no blog at all. It is much better to visit the website without a blog then to visit a website with a blog with so few articles in it over a rather large time period.

Blogging is a persistent activity that requires commitment, whether that commitment is 1 blog article a week or 1 article a month does not matter. It is the persistence that is nessacary.

Before starting a blog you need to ask yourself is this something I can dedicate a number of hours per week or month to. A lot of people believe they can to begin with but as can be seen from a lot of blogs on the internet this is not the case.

Their blog quickly becomes something that gets put on the back burner never to be touched by themselves again.

So how is a blog an indication of company effort?

Well let us start by mentioning that a blog has a value in its own right, it is an indication that a person or company is willing to invest a level of effort each week or month over a large period of time. Thinking up content and writing the content every single week takes time.

Much more effort and time than most people are willing to give it credit for.

Some people or companies will say “Yea we tried blogging once but it did not return the level of effort we put into it so we stopped doing it”.

Most likely this company only wrote less than 10 blog posts and then gave up. Basically it is just an excuse because they did not have the persistance to keep blogging.

Now a person or company might say something to the effect of …

“We invest our time and energy into other areas of our business rather than our personal / company blog”

Ok standard customer work does not count and if that is the case then let me see some evidence of that and show me how it is a persistant effort because I normally find that people / companies stating this use it as an excuse.

The reality is normally the person / company invests no effort in a blog or in any other area of their business. It is not that they are doing something great other than a blog but more like they are just doing nothing at all.

Rubbish vs not rubbish blog content …

People have different opinions about what constituents rubbish content or not rubbish content. Many people out there probably think I post rubbish content.

I mean I am just 1 guy at the end of the day I am not the CEO of a huge company so how can I talk about these topics? Whatever I write is bound to be wrong and rubbish right?

Well in my opinion, no not exactly. I will explain my opinion on what is rubbish content vs not rubbish content …

Rubbish or playing it safe content …

Generic blog articles or tutorials that have already been discussed a thousand times on the internet and the article written in question is pretty much just a duplicate of what is already out there.

This I call playing it safe content. It could be a “HTML tutorial” or “SEO best practices” with no opinions or discussion added other than what is generally considered “generic”.

Not rubbish content …

Blog articles or tutorials that have the persons opinions and personal experience added to them.

This could also be a “HTML tutorial” or “SEO best practices” article but the difference is the person has included personal opinions and experience.

Alternatively it could be a post related to what is happening in your business personally.

For example the “SEO best practices” article …

“To implement SEO best practices do this and do that etc. Mark Zuckerberg achieved a 5% growth in his online traffic due to implementing these practices.”

Nothing further said. Now a none rubbish “SEO best practices” article would go as follows …

“To implement SEO best practices do this and do that etc. However I will warn you to do A like this because I tried doing A the generic way and it did not return good results so by doing A like this it doubled the traffic I gained from that point. I achieved overall a 10% growth over this period of time by implementing these practices. Here are some charts and statistics showing what I did and the results I got personally”

This in my opinion is much better. I want to hear about the methods you used personally in your business, the results you got personally in your business and your personal opinions.

It does not have to be anything shocking or controversial, just some personal information that seperates you from the next blog article.

Who cares if the “big boys” got a 5% growth rate by implementing some practices, most businesses out there will not be on the level of Mark Zuckerburg etc.

Do not be afraid to post about any not so good results you got as well. If you implemented a so called “SEO best practise” method in your business and got no growth despite the implementation then say so.

Maybe you put in “title tags” and nothing happend in terms of your website traffic. Then tell people, tell them what practise you implemented and show the people the non existent results you got from it.

This is useful because it tells people what not to do, maybe the “SEO best practise” advice was a load of rubbish or the people writing the “SEO best practise” article leave out important parts or do not really tell you how to implement the advice properly.

Either way you can say you tried the advice, what you did and the “realistic” / “personal” results you got from it. I could probably right now implement some of this so called “best practise” advice on my own website and achieve nothing from it.

I think a lot of this so called advice out there is non-sense or only works in certain situations.

So that is what I count as non rubbish content …

Personal, realistic content based on personal experience, possibly with statistics to show the evidence. Content with personal opinions. Content based around your business personally.

Rubbish content …

Generic content repeated thousands of times on the internet, duplicate articles, articles out of context for example showing the results what the “big boy” businesses got when most businesses out there are not the “big boys”, results not personal but what some other company got by doing it, experience not personal just copying someone elses experience.

Let me say that if you are a freelancer or business that has a blog with content being published on a reasonable schedule then hats off to you and keep up the effort.

Freelancing buy / sell websites my thoughts

The other day I was thinking about freelancing sites in general. These are websites that allow people to post projects and freelancers to bid on the projects.

The usual thoughts came into my head like these are rubbish, full of cheap projects and people providing services on the cheap etc.

I have often thought why do these sites allow such cheap projects and cheap providers of services to be placed on them.

This has always been my line of thought, if I built a website like this how could I attract the people with proper budgets and decent enough freelancers to complete the project.

I would not want the website filling with such low-tier projects / service providers and I would create filters to prevent this from happening.

Yes any decent person would think like this so it can be quite jarring to the senses to see what is happening on these sorts of freelancing websites.

A lot of people think this, it is only natural. A lot of people may think “Yes it was good at one time but now it is just full of junk projects”. A lot of people see it as a fundamental problem.

So I was thinking why do the owners of these types of websites not recognise this and then it occured to me that I never considered the owners of such sites perspective.

Then I realized something beyound the obvious which is that these sites are here to make money and they do not care if their website is full of junk projects so long as it brings in the money.

What I realized is that these websites have been deliberatly created this way. These websites have not from “good to junk” overtime, but the whole purpose of these websites was to provide cheap services to people wanting cheap services.

You see what is the number one item that clients want in the “web software” industry.

Clients want “web based software to the best quality it can be, produced as cheaply as possible”.

Well these types of websites claim to provide exactly this. Post what would have been a £20,000 project here in the UK by a UK provider and you can get the project done on one of these websites for £3,000.

In my opinion what these websites are actually doing is a bait and switch, a typical scenario will go like this …

The bait

Post your project here and get quality software done at a fraction of the price it would have cost you going to your local provider.

Person posts his / her project and gets quote of £3,000 to £5,000 for what would have been a £20,000 project by the local provider.

Person selects one of the low-end quotes costing him £3,500 for the project.

The switch

Project comes back from provider, parts not done properly and in some cases not done at all, under the hood the code looks messy, ultimately the whole project looks below the quality the local provider was offering.

So what happens now? Well any person who you complain to including the website companies themselves will most likely give you an answer similar to this …

Person: “How much did you pay for this?”.

You: “£3,500”.

Person: “Well no wonder you did not get a quality product, you where not expecting all this functionality you described for £3,500 where you? I mean you only get what you pay for right? I think for the £3,500 you got a reasonable enough product if you wanted a quality product you should have paid more!”.

These website companies have sold you the “dream” and now the website companies have your money you are “sold” the reality.

Now the website companies change their tune, the website companies change their tune to the same tune as what anyone with any common sense would have told you before you spent the money.

Now you feel guilty because you feel you should have listened to the people with common sense. The website companies themselves have conveniently changed their tune to the same tune as people with common sense to add to your guilt.

This model conveniently ignores the “dream” you where sold in the first place and focuses on the low quality result and the low budget.

Of course you could now challenge the “dream” you where sold in the first place but most likely all the details of the project where not specified up front or the requirements where of a “fluid” nature which makes it difficult to challenge.

With the added plus you feel guilty because you expected a quality product for your low budget when people where telling you it would be impossible to get a quality product for the low budget specified.

This all adds up to you feeling you must accept the shoddy product because it was your own fault and not the fault of the website companies for selling you a “dream”.

Freelance Sites Dream

“Now no one cares you where sold a low quality product, no sympathy for you, no pity for you.” – this is exactly the sort of statement these websites want you to except.

The statement negates the fact that they “sold” you a different product to the one delivered.

Dream = I can get quality software for 20% of the cost what other people normally charge.
Reality = The finished software product is low quality as it would be for the price you paid for it.
Anyone listening to complaint = no sympathy or pity for you, that is what happens when you try to cheat the system.

Like I say it is not in these website companies interests to filter out the low quality projects / low quality providers, that is why these websites are the way they are.

It is not a case of these websites owners fixing anything, these websites are exactly the way the owners want them to be.

My Google home minis

So I have recently brought 3 of the new Google home mini’s for my home. 1 is in the kithen, 1 is in the living room and 1 is in my bedroom.

I bought the Google home mini’s because I have no other “home talk” system as of yet and these where priced cheap in a 3 for the price of 2 deal. The deal cost around £100 for the 3 Google home mini’s.

I will say now that I am more of a Apple guy and I did look around the internet to see whether Apple had released a “home talk” system as of yet.

It turns out they have one in the pipeline but it has not been released yet also Apple’s version of the “home talk” system is quite expensive, I think I read figures of around £350 for 1 device.

So with that said I went out and bought the 3 Google home mini’s if I want to buy Apple’s version that option is still open to me but these Google home mini’s will do for now.

Google is up there for me though, I use Google for a lot of different areas including Gmail, Apps and Calendar. It is just I use Apple as my laptop and mobile phone.

So what do I think of the Google home mini?

On a personal level it does exactly what I want it to do and for the price I cannot fault it. The Google home mini does not contain a portable battery as standard but that does not bother me, I just have mine plugged in all the time and it is not my intent to use it as a portable device.

Good points

It is wonderful to be able to say to the Google home mini just before I go to sleep at night “Wake me up at 8:30” and it will set an alarm for 8:30.

The Google home mini can also set various types of alarms such as “Wake me up at 8:30 everyday” etc and it will then set that alarm daily.

I prefer just to tell the Google home mini what time I want waking up each night, then I can set my wake up different each day depending on the time I am going to bed at night.

When I wake up in the morning I can ask Google home mini “What is my day like?” and the Google home mini will give a report of the whether, my agenda and various other areas. The agenda is based on the entries you have in your Google calendar.

Getting the whether and temperature outside is also useful.

I ask Google mini to play some chillout sounds such as the sound of a fireplace or forest. Google mini can hook into music provider services such as Spotify but for those services you need an account on one of those services.

I use the Spotify free account but rarely because the Spotify free accounts sound quality is already reduced and with it running through a mini speaker it is not the best quality of sound available.

You can ask Google home mini to find certain shops in the area for example “nearest pharmacies” and the Google home mini will tell you the nearest pharmacies.

You can then get more specific and ask the Google home mini about the nearest pharmacies opening times or telephone number etc. This is very useful.

I also love being able to set timers on my Google mini, you can set a timer for a particular length of time or you can set a timer for a specific time. I know a timer is not the height of technological advancement but for me it comes in handy when I need it.

Google mini can also act as a clock, you can ask it the time and it will give it you. You can ask it to flip a coin or roll dice and it will tell you the result as well. Just other simple things I find useful.

Google home mini can do lots lots lots more besides this, however these are some of personal favourites.

Bad points

Sound quality, for playing high quality music Google home mini is not the best speaker system out there but then again I did not expect it to be for the price I was paying for it.

I listened to some Spotify music and the sound was not the best quality however I was using a free Spotify account and Spotify reduce the audio quality on the free account.

So I also tried it with bluebooth and played some music from my laptop to the device, again the sound was not the best quality.

Not a problem for me because I would not expect the best quality sound from a £50 (standard price, I paid £33) “home talk” system mini speaker.

Many of the areas of the Google home mini talk system are not quite there yet in terms of the depth of what you can ask it. The Google home mini does not understand every question I ask it and this includes general questions about when I ask it to find something on the internet.

The Google home mini does not accurately report pricing information for example asking “what is the price of the Monopoly board game” will not yield valuable information.

Asking the Google home mini “find the nearest place that stocks the Monopoly board game” and “does that place have any in stock” is out of the question as of yet.

This is to be expected though really as there are different suppliers of the Monopoly board game however I would have thought it may have returned a generic price, or a list of prices from Google shopping or similar.

There are simpler questions than the above you can ask Google home mini and it will still not yield valuable results etc. So all in all not quite there yet in terms of what you ask the Google home mini.

You can ask Google home mini a lot but most of the areas you can ask it are very simple areas.

Another area is the interactivity between different Google home minis. I have not seen anything yet in terms of interactivity between the devices.

I cannot say “Set a kitchen alarm for 9:00” or “buzz kitchen alarm” or “send message to kitchen device” from my bedroom device etc. So again nothing in this area and limited overall as of yet.

These are some of the bad points I have noticed.

Personal business talk system

As a developer it did not take me long to figure out I could create something useful for my business using the Google home mini API.

I got working in learning how to use the API and developed my own personal business talk system.

I can now ask my Google home mini “How is my business doing?” and the Google home mini will provide a report on various statistics related to my business.

The statistics are pulled from my personal project management system.

I did this as a kind of “vanity” project. I can just login using a web browser to check those statistics so having them read out to me by my Google home mini was not really nessacary.

However it is great to be able to wake up in the morning in bed and say “How is my business doing?” and getting a response with real time data statistics read back to me.

For those people wanting to know, this type of system can prove quite costly in terms of value provided.

All the systems you want to get data from will need an API creating if they have not already got one to pull the data out of.

Then a central script will need to be created to pull the data using the APIs and feed the data to the Google home mini API.

Then the Google home mini API settings need configuring to work.

The project can turn out to be more lengthy than what it initially seems.


The Google home mini’s are useful in a variety of situations but are not quite there yet in terms of the complexity.

However most of the “home” systems available from other providers are not there yet in terms of the complexity anyway.

Removal of high quality

For those of you who have followed my website for sometime you may have noticed I have removed something from my website.

Can you guess what it is? Yes it is the word “high quality”.

My websites description use to read …

“Freelance Web Software Developer from Derbyshire, UK. I write high quality code to create and deliver web based software projects.”

And it now reads this …

“Freelance Web Software Developer from Derbyshire, UK. I write code to create and deliver web based software projects.”

I do not know why I said I produce “high quality” code in the first place, what did I hope to gain from this?

James Barnsley A produces code to power websites.

James Barnsley B produces high quality code to power websites.

Is a potential customer going to read my website and think …

Oh well, I had better go with James Barnsley B then instead of James Barnsley A. It is highly unlikely is it not?

I wrote about this in a previous article which has now been deleted but I will describe what happend again for the benefit of the people who never read the article.

A while ago I rang up a company who I was looking to work with and I explained to one of the people at the company about myself, the customers I have worked with and that I do programming.

I also mentioned that I do programming as a hobby and immediately in a raised voice the person blurted out …

“We do programming as a profession here, we do not do it as some hobby, we are doing this for a living!”

Yes I get that, hence the reason I talked about myself and the customers I had already worked with, some of which are multi-million pound organizations.

Anyways for some reason the person ignored all that and obviously just thought I was a “hobby” programmer.

I actually did programming as a “profession” and then in my spare time did it as a “hobby” also by working on my own personal projects.

There are a lot of these turning a hobby into a job articles online that all follow a similar theme, here is one of those …

The theme generally takes the story of a person who is doing something for a hobby like programming and then after a number of years of doing it as a hobby the person had a moment of “enlightenment” and all of sudden he is no longer doing it as a hobby anymore but as a job.

The person makes all the analogies about he “tightened up his processes”, “defined what he really wanted to do” and how his “programming improved to such an extent that he is no longer doing it as a hobby but as a job”.

The person has left all his / her “hobby” programmers behind because their just not there yet and have not reached the level of “enlightenment” that he / she has. Yes, a person should always wear his “hobby” programmer badge with pride until he has reached the “next level”.

Let me turn my hobby into a job …

“I am James Barnsley and I do web programming as a hobby job”

After thinking about this I can see how that related to myself.

I started out as James Barnsley who writes code to power web software systems. Now James Barnsley has had a number of years experience at doing this James Barnsley is no longer just James Barnsley but is James Barnsley who writes “high quality” code to power web software systems because James Barnsley says so.

Jon Smith starts out as a “hobby” programmer who writes code to power web software systems. After a number of years Jon Smith is no longer Jon Smith the “hobby” programmer who writes code to power web software systems but is Jon Smith the “professional” who writes code to power web software systems because Jon Smith says so.

In reality neither the word “hobby” or “professional” was needed.

So basically once I got “self confident” enough I decided to stick the word “high quality” in the paragraph. I felt I had reached a “new level” and I needed to inform potential customers of this by sticking the “high quality” label on my website.

Why was James Barnsley not “high quality” at the beginning of his programming practice?

Why is James Barnsley “high quality” now?

Why is James Barnsley “high quality” in the future?

Yes “high quality” is a subjective term anyway, but I do not want get into that. The simple point is that “high quality” is just a label. I could have stuck “high quality” on my website at any time I choose to, it means nothing. Even if I was “high quality” it still means nothing.

These labels can become something that haunt you, they can become something that control you, they can become something that irritate you as shown in the reaction of the person at the company I rang.

The person was probably only defending himself and his company but the word “hobby” or “professional” should not matter, should it? What if my code as a “hobby” programmer was greater than his code as a “professional” programmer.

If I take the humble approach it does not matter whether I got a “very bad” or a “very good” label applied to me because I am none of these labels.

These labels are trying to get me to form a conclusion about myself.

An example would be let us say someone said “I look very beautiful” and I accept that label about myself.

What happens if that same person or another person now comes along and says “I look ugly”. I would be devastated right? This is because my value is now being derived from these labels.

Now what happens if I consider myself none of these labels and I truly believe this to be the case.

A person comes up to me and says “I look very beautiful”, well instantly I know this does not apply to me.

Now someone comes along and says “I look ugly”, well instantly I know this does not apply to me.

So you can get what I am getting at. If I accept either label “beautiful” or “ugly” I have really done myself a dis-service have I not?

You could say I only accept positive labels about myself but this is unlikely as someone who accepts positive labels about themselves is bound in way to accept negative labels about themselves.

Accepting the labels means it has opened you up to attack i.e. now that you have accepted you are “beautiful” we can get you to accept that you are “ugly” right?

This is what I mean even if I am “beautiful” and it is true that I am “beautiful” the word “beautiful” has no part of me. It can be true that I am “beautiful” or “ugly” without those labels belonging to me.

There is a difference between these labels and me even if some of these are labels are true.

When someone says you are “beautiful”, “great”, “fantastic”, “ugly”, “a prat”, “worthless”, “substandard” or whatever, do not be so quick to accept the label, even if it is true. The “truth” can belong to another person without having to belong to you in the same way a “lie” can belong to another person without having to belong to you.

I heard somebody suggest once …

“If someone is making comments on you “good” or “bad” then you mean more to them than they mean to you”.

I do not believe this to be the case. You may not mean anything to the people who are applying these labels to you and as stated earlier if you accept these labels then you may be doing yourself a dis-service.

So anyways going by this more humble interpretation and because putting “high quality” on my website is not going to make a difference in the clients that I get I have decided to remove “high quality” from my website for these reasons.

Chopping database records

I have been working on a project recently for a client which required the user to insert a record into an existing set of records and to modify those existing records to accomodate the new record.

The above diagrams shows what needed to be accomplished. If you imagine from left to right is time on the diagram, each record has a start date and and end date and the new record is needing to be inserted between those start dates and end dates.

The start and end dates can overlap the start and end dates of the new record and this is where the existing need to be chopped and modified to accomodate the new record.

So how did I go about this?

Firstly I decided to bucket the existing records into categories as follows …

And like …

This gives us four actual categories and a fifth “Ignore” category. The four actual categories are LeftRight, Middle, Left, Right. Some more examples are shown below …

The bucketing of the existing records into categories from a coding perspective is accomplished as follows …

Firstly I selected the existing records, pseudo code shown below …

dateStart = new record start date
dateEnd = new record end date
dbDateStart = existing record start date
dbDateEnd = existing record end date

Other columns could be added to this selection code if needed, in some cases a “user_id” or other foreign key could be potentially needed.

Using the above selection code will select all the existing records that exist within the range of the new record start and end dates. In other words the records that fall into the “Ignore” category will not be selected.

This is why the “Ignore” category is not a real category as the records are never selected and thus do not need to be bucketed.

Now I have selected my records from the database I put the records into a loop. Whilst in this loop I bucket the records into a set of arrays using the following conditions …

LeftRight …

Middle …

Left …

Right …

Now that the records have been bucketed into the arrays I loop through each group and process the groups seperately as follows …

new record = the new record you are wanting to insert into the DB via displacing the current records
original records = the record in the LeftRight bucket that has not been cloned

LeftRight …

I take a clone of the record and I modify the original (none cloned) records date end to be the new record date start -1 day this is then saved. I then take the clone and set the date start to be the newly inserted records date end +1 day this is then saved.

Middle …

Any middle records are deleted.

Left …

I modify the records date end to be the newly inserted records date start -1 day this is then saved.

Right …

I modify the records date start to be the newly inserted records date end +1 day this is then saved.

After all of the bucketed records have been processed there should now be room to insert the new record so I insert / save the new record.

So that concludes how I created a system that would allow a new record to be inserted whilst chopping the existing records to accomodate the new records.

Agency vs freelancer my opinion

So I read a lot of articles online about “Agency vs freelancer” the subject of the article being from a client point of view which is best to go with in terms of completing a project successfully.

Sometimes I read the article on a general web development article website which is fine. However sometimes I read the article on a web agencies very own website.

I have possibly written similar articles in the past on this website which I have now deleted and let me tell you why in my opinion it is not a good idea for multi-employee agencies to post articles like the above in their blog.

So let us be honest the article is intended to big up the agency whilst making the freelancer look like a bad choice. This is the fundamental intent of the article and that is why it was posted to the blog in the first place.

Whilst on the surface the article seems to do this there is another underlying tone to the article in my opinion which communicates a different message.

The message it communicates is that the agency views the freelancer as the competition. Writing “Agency vs freelancer” or similar as the article the agency has automatically created the freelancer as the competition. This massive, cutting-edge, leading agency views this small, tacky freelancer as the competition?

This is similar to say Rolls Royce viewing themselves in competition with Ford. Ford does not lose any sales to Rolls Royce and Rolls Royce does not lose any sales to Ford, they are at completely different ends of the market.

The article can give an impression that is at odds with the articles intended purpose.

Having said all this I will also say that there is one other area I will mention in relation to articles such as the above.

Many of these articles attempt to portrait that an advantage of going to an agency is that you get a “team” of people working on your project vs the 1 person freelancer working on your project.

The way this is generally written in the article tends to try to give the following impression …

Freelancer hourly rate = £50
Agency hourly rate = £100

Wow, I am getting a full team of people working on my project rather than the 1 person freelancer for only double the price.

Errrrmmm, not quite. You see that is £100 per hour. So for an agency of 8 people that will cost you £800 per hour. The result is more like as follows …

Freelancer hourly rate = £50
8 person agency hourly rate = £800

You are still paying by the hour no matter what way you look at it. You just happen to be paying double per hour in the above example to have 1 person work an hour for you from an agency.

Let us face it, freelancers have contacts as well and I am certain that if you where willing to pay the freelancer £100 an hour it would not be very hard for the freelance to get some external resources into the project himself thus forming a mini-agency.

Infact you could have just given the freelancer the break he needed to expand his business himself into an agency.

Internal system – Toolkit

I have been using a web based product called ActiveCollab for sometime now …


I have been using ActiveCollab since version 4. When ActiveCollab 5 was introduced it had a complete redesign, less features and a more slick user interface.

More features have been introduced to ActiveCollab 5 though since it was first released.

ActiveCollab is a project management system that also handles Time Tracking and Invoicing plus more.

I will continue using ActiveCollab for projects / task management however for other areas of my business I have created my own internal tool which I have named “Toolkit”.

I built my own system because I wanted a system that would do the following …

Estimate earnings
Fixed fee and retainer projects are entered into the Toolkit. The Toolkit can then estimate monthly and yearly earnings based on the projects entered. The projects also includes a way for me to manage all the projects I am working on.

The Toolkit has an area in which all incomings can be entered. The incomings can then be exported in a format appropriate for my accountant.

The Toolkit has an area in which all outgoings can be entered. The outgoings can then be exported in a format appropriate for my accountant.

The Toolkit has an area in which all mileages can be entered. The mileages can then be exported in a format appropriate for my accountant.

The Toolkit has an area in which leads can be managed. I actually pulled this area out of the Neptune – Lead Tracker – http://www.neptuneleadtracker.com software system.

The Toolkit includes an area in which all the companies and people I have worked for can be managed. ActiveCollab does actually include this feature but the Toolkit version allows more advanced search features and has fields on the create / update forms to match my exact needs.

The Toolkit includes an area in which all time entries can be tracked. ActiveCollab does have this feature.

The Toolkit includes an area in which invoices can be created. Invoices can also be generated from time entries. ActiveCollab does include this feature but the Toolkit version matches my exact needs precisely.

The Toolkit includes an area to keep notes. ActiveCollab does include this feature.

The Toolkit includes an area to upload files. ActiveCollab does include this feature.

ActiveCollab has a more slick, beautiful user interface but in terms of functionality built specifically for myself obviously the Toolkit wins.

The Toolkit is primarily made up of CRUD screens, no fancy UI / Ajax heavy screens here. Just datagrids and buttons.

I am in the process of live testing the Toolkit I have built and will be moving various functions of my business over to the Toolkit.

Yii / Yii2 checking controller params at the access control level

One of the areas I notice in a lot of Yii / Yii 2 web applications is the checking of parameter variables in what I consider the wrong areas.

Here is an example of one of my controller methods for saving a Book …

So what stands out about this method? No load Model method? No checking to see whether the Book has a valid ID? How will we know whether the Book has a valid ID, how will we know whether the Book is suppose to be accessed by the particular user that is logged into the system?

The answer is, the access rules and bizrules of the web software application. All controller methods should be assigned to an access rule. If the controller method contains parameters then the controller method should be assigned to an access rule as well as a bizrule.

For smaller / less complex applications you can actually emulate the bizrule by using “matchCallback” which is spoken about in this article I wrote previously …


You can also read my previous article on what I think of the Yii / Yii2 load Model method …


All controller parameters should be checked and validated in the bizrule, by the time the parameter reaches the controller method there should no need to have any checking in the controller method at all for the controller parameters.

If the Book does not exist or the Book is not accessible by the current logged in user then that will be handled before any controller method code gets executed in the first place.

There is no reason to have this level of checking in the controller method itself. Doing it the way I have described also keeps the controller more clean as extra code is not needed to check the controller parameters.

Should you reveal your budget?

Should you reveal your budget to a potential web development company / web development freelancer? I am presuming most web development companies and freelancers would say yes.

In my business I work on a day rate so to me it does not really matter whether the budget is revealed or not. If you spend £12,000 you will get a £12,000 web software product, if you spend £36,000 you will get a £36,000 web software product. It does not matter to me exactly what the total budget is, you pay me by the day, when you stop paying the work stops.

Having said that knowing the budget can be important. If you have an idea of what it is you want to create it is important to make sure the budget is really there. There is no point in expecting a £36,000 web software product for £12,000.

I generally try to make sure that the “must have” requirements can be fufilled within the expected budget. After the “must haves” have been taken care of the remaining budget can be used to provide extra “goodies” that would otherwise not be there. Design improvements, extra features, additional reports, sidebar information giving the product the extra polish it would otherwise not have.

An ideal scenario might go like this …

  1. You have an idea of the features you want in the web software product.
  2. We have discussion on those features to make sure anything has not been missed.
  3. I take a look at the budget and decide whether I think I can get the work done within budget.
  4. I break the first couple of features down into tasks and add them to the project management system.
  5. I complete the first couple of features, we have a review and see whether we are on track and budget.
  6. More features are added to the project management system until all features are complete.
  7. At this point we discover that one third of the budget still remains.
  8. The additional budget is used to provide extra goodies.

Please note that the way this article is written can give a wrong impression almost edging to a fixed fee kind of feel. I always work on a day rate and any agreements about what can be done in the time allocated are estimates only.

Generally a £36,000 budget will be broken up over the course of months or a year and will act like a retaineer agreement. Generally in such an agreement the overall budget is never discussed, the contractor is paid for a number of days per month to complete work. This is how I work. However that does not mean that an overall “background” budget does not exist.

So, should you reveal your budget to a potential web development company / web development freelancer? Well in my business the answer would be yes, if you want my “opinion” / “estimate” on whether the proposed feature set will fit within the budget.

As we work with each other you will get a feel of what can be accomplished, at what cost and in what timeframe.