Books, Employment, Software Developement »

[12 Oct 2012 | 307 Comments]

 

Why I’m writing this post

Over the last few years I have taken on a mentor / coaching type role from time to time for some up and coming software developers and I have found myself repeating my thoughts on what they should focus their energies on to progress their careers each time. People who know me know that I believe in DRY (Don’t Repeat Yourself) so I have decided to write this advice down for future reference, and perhaps some people I haven’t met yet will find it useful!

Do not rely on other people to look after you, you need to look after number 1

I think my most important bit of advice is for software developers to look after themselves. It can be very easy for enthusiastic developers to be worn down and loose any love for software development by the daily grind of work and especially when the effort (and often the extra-ordinary effort) they go to is not recognised or fully appreciated. We primarily owe a duty of care to ourselves and our career. The harsh reality is you cannot expect anyone else to do this for you. How do you do this?

Get a balanced approach to work and life, it’s ok to say ‘No’

The thing that I found that wears down enthusiastic developers more than anything is when they are too accommodating and put themselves under pressure by always saying yes (or ‘I’ll try’ which is always understood to be a ‘Yes’). I used to do this and one of the pivotal moments in my life was when I discovered the power of the word ‘No’.

As unbelievable as it might sound to some developers it is ok to say ‘No’ to development request on a project. You need to be reasonable and allow people to turn their request into a ‘Yes’. I like to have an easy to understand process in place for people to give me a requests. My personal choice is usually something based on a Scrum type approach. A simple backlog of items which people can add tasks to with a priority. I take a couple of weeks worth of  top priority tasks at a time and work on, delivery those new features then rinse and repeat.

Except for the obvious P1 issues, if people understand the process they seem happy to follow it, allowing you to say ‘No I can’t do that today but add it to the backlog and make the case it is more important than the other items and you can have it in ‘x weeks’. Its amazing how many ‘urgent’ issues dissolve into nothing after a few days.

For a good read about Balance and software development by Nathan Gloyn

Invest in your skills and set yearly goals

I like the saying ‘You cannot score without a goal’. The idea here is to spend time objectively and strategically thinking what would be good for your career and define some tasks to complete that will help you get there. Without doing this it is easy to end up in a Skills Drift, suddenly realising 5 years have passed and wondering ‘How did I end up here?’.

Setting yearly goals was the bane of my life when I had to do it in a formal structure at a consultancy but as a freelance with no corporation to hide behind all I’ve got are my skills to offer people to get work. I have to be and show I am at the top of the game in my field. I do this by taking some control of my own destiny and improve or gain relevant skills buy setting goals. DOING THIS IS REALLY IMPORTANT.

The practical application of this is to do this pick fun things to do, ‘I’ll learn a new programming language this year’, ‘I’ll complete a reading list of these <insert list here /> titles’, ‘I’ll attend x number of user group sessions’ (even better, give some presentations), ‘I’ll answer 10 stack overflow questions’, ‘I’ll write 6 blog posts’, ‘I’ll write a phone app with a Cloud backend’. These are the sorts of things I task myself with, they are cheap, interesting and packed full of learning value. These tasks should also help keep you interested in software development in general.

If you can get a budget to take a course and get a bit of paper with the word ‘Certified’ on it then go ahead but be aware that often they are sometimes not seen as a good indicator of your skills. See this post from Martin Fowler about the Certification Competence Correlation. 

Update your CV every year

This follows on from the previous point but make sure you update you CV every year. I found when I had nothing to add to it after a year it was obvious if my skills were stagnating and I was entering a Skills Drift. When this happens try to change this by talking to your manager for more training or something new to do. This might not work so. The saying i read in Jeff Atwood’s book Effective Programming: More Than Writing Code  ‘Try to change your company otherwise change your company’ applies here.

Write Clean Code

Any code you write will be read many, many, many times in its lifetime. So please try and make you code easy to read and understand. This does not mean just adding comments as this is generally a sign that the code is bad and not readable on its own (Martin Fowler calls comments ‘deodorant for bad (smelly) code’) .

Clean Code should be S.O.L.I.D so it is highly cohesive, loosely coupled, well named, easy to test (with tests please) making it easier and and safe to change sometime in the future.

My favourite resource and inspiration for explaining clean code is ‘Uncle Bob’. His style is quite zany but the message is very important and based in decades of experience in writing code. http://www.cleancoders.com/ 

Software development show be seen as a craft and there is a growing movement to make this a more mainstream idea and improve the quality of software development. http://manifesto.softwarecraftsmanship.org/ has lot of interesting information on the subject.

Admit when you don’t know

One thing that screams ‘inexperienced programmer’ is when they never say ‘I don’t know’ or even worse is when they do things and make statements which are based on obviously flawed assumptions of how things work and they see it as failure if they need to concede they were wrong. I recognise a good experienced developer or someone who is open to new or better ways of doing things as someone who is quick to identify the gaps in their knowledge and question what they think they know. When they are not sure (having evidence / experience to backup their argument) and are challenged will say ‘I’m not sure but I’ll find out’.

If I know you only have a few years experience I have a rough idea on how much stuff you probably know and expect to hear ‘How do you do that’ or ‘Is there a better way to do this’, ‘I don’t know how to do that’. While I expect this please don’t make me repeat the same advice or explanations over and over, it makes me feel you know value what I say. Make sure you learn from the things that people tell you.

Software development is like anything you learn, it takes many many years of practice and learning to become an expert in it. Research puts a time of about 10 years to become an expert in anything I’ve been doing this for over 10 years and am still learning and improving my skills every year, so perhaps I’m a slow learner! There are no short cuts, put in the hours, get experience be open to learning and you will get better.

Work smarter not harder

This follows on from the ‘Admit things when you don’t know’. If you find a task repetitive, long winded, error prone then it is probably worth the time to investigate if there is a more effective way to solve the problem. You might find that the answer is a revision to how you are currently solving the problem or perhaps there is a whole other technology or process that you might be able to use to make life easier.

Code generators, web frameworks, off the shelf products, open source projects, different languages, new software tools are examples of things that with some time invested in them can pay back multiples times over..

It is hard to do investigate and evaluate all these things on your own. To get an introduction to these things it is often better to hear from others who can summarize their field of expertise and if you find it interesting / relevant you can spend more time learning it it detail. See if you can go to some industry conferences, go to user groups, follow expert in you field on twitter, ask how other people are doing things on Stack Overflow, this is all part of you continuing self development. If you are lucky you might be working with someone who has done the research but see if you should still seek out new and improved ways of doing things. Once you get new knowledge see if you can share it with your peers in the industry.

Reading List

One of my favourite sources of quality information is books. Blogs and forums are useful for acute problems you need solved immediately but I find usually only treats the symptom of my lack of knowledge. Online media is great but there is a lot of shit on the Internet and sometimes it is hard to know when you stepped in it.

To treat the cause of you lack of knowledge you need to invest time in learning this missing bits of the jigsaw from a quality source that has been designed to tell the whole story. For me this is where books come in. The are significant bits of work contributed to by many experts in the field, with and army of people editing, reviewing and proof reading it to make sure it of a high standard. Books can describe the history and reasoning behind the designs and approaches of what you want to learn about. Below are some books which I would recommend to anyone wanting to do software development (there are more but this is what is on my Kindle at time of writing!).

Extra curricular activities

There is one thing that makes someone stand out as a developer who enjoys what they do an want to learn and that is what they do outside of the 9 to 5 job. So I encourage every developer to do something and it ties back to the early section of investing in your skills.

Create something

To really learn you need to do, so create something in your spare time to try out new ideas or technologies you’ve heard of. It’s the best way to get proper understanding of what things can do. Good types of projects are websites or mobile phone apps as they are easy to show people.

Sometimes I have found that my own projects are what keep me interested in programming when the work that pays the bills is dull and un-inspiring.

Get involved in an Open Source Project or two

If you want to get a springboard into learning a technology then get involved in an appropriate open source project. This is easier than ever with services like GitHub and CodePlex. The other great thing with doing this is that a lot of tool vendors, like JetBrains, will allow you to use their top of the range products for free on these projects.

This allows you to see how other people write code, structure their ideas and solve technical problems as well as getting feedback on how you write code, Don’t forget that there is no ‘correct’ approach and these projects with take an opinionated approached on how to tackle a problem. You might agree or disagree with the different approaches but make sure you keep your mind open to learn about the strengths and weaknesses of the different solutions.

Blog about things you have learnt

Get a blog going as somewhere to record things you learnt, did or think. You might not think that you have anything of interest to say on a blog, if that is true then nobody will read it but more than likely someone out there will appreciate your nuggets of information you throw out there. I’ve even found the answer to my own problem via Google on my own blog years after I  had originally solved the problem..

The thing I find about writing posts is that it forces you to really think about the subject, which really helps me understand the subject more. It also shows that you know stuff and is a good indication you are someone that likes to share and help others.

Attend community events

There are a lot of user groups / hack days going on all round the country. It is easy and cheap to attend these and you get to meet lots of like minded people. You never know who you might meet and learn from. The developers I’ve met at these events are of all abilities and backgrounds, from corporate IT workers, to start ups to people working on some of the biggest brand name websites in the UK.

In Summary

Being a developer can be one of the most rewarding and fun professions to be in. The industry is evolving so quickly it can sometimes feel a bit overwhelming but exciting at the same time.

There is a significant risk that you miss out on this excitement because the daily grid of un-inspiring projects using out dated technologies wears you down. You can easily become a battery hen 9 to 5 developer who looses the love they once had for the work. I have met a lot of these guys and it is a crying shame for our industry. As the country's economy evolves i can only see the demand for quality software developers will increase.

So my parting words are these:

Invest in yourself and give a little back to the industry and you will have a good chance of riding this growing technology wave to having a fulfilling career in software development.

Employment, Software Developement, Contracting »

[5 Oct 2012 | 31 Comments]

Why I think I can give some advice

Four years ago I created own start-up which did the very opposite of making me a millionaire, my plan B at that point was to become an I.T. contractor, which I did 3 years ago. I’m not the most experienced contractor but I have learnt a lot of lessons along the way. A couple of years ago a friend asked for some advice about becoming a contractor and another friend just asked me again this morning. So I’ve dug out the email I sent a couple of years ago and have put it here..

The Pros

  • The money is good
  • You can pick and choose contracts which includes locations (I compare this to when I worked at a consultancy who could send you anywhere round the country for months on end)
  • Every contract you meet new people, learn new things (business stuff as well as technical) and has the possibility to take you career in a different direction
  • You can stay out of corporate politics
  • As a temporary member of staff you generally don’t get given long term responsibility (although some people like having this responsibility so it might be a Con)

The Cons

  • The work is not guaranteed and the future is unknown
  • You generally only have 1 weeks notice (I was given that once when the client suddenly realised they had no money left, so it does happen)
  • You can be treated as a bit of an outsider sometimes.
  • No structured career path.
  • No perks and you never have that sense of ‘belonging’ which you can get as an employee in a company.

My Advice

In a nutshell, if you know a particular product / technology very well, you can convince people of this and my Pro list sounds good and the Con list doesn’t sounds too bad then you probably have a good chance of enjoying being a contractor, so here is the rest of my advice:

Setting your self up

  1. You have to believe enough in your abilities to quit a safe job for an unknown future.
  2. Set-up a Limited company
  3. Get an accountant to do the books / returns. This probably costs in the region of £800 - £1000 a year but it money well spent
  4. Get VAT registered on the Flat rate scheme. You charge you clients 20% and pay the HMRC 15% but you cannot claim VAT back on any of your purchases, so if you buy loads of stuff you might loose out here, ask you accountant you got in step 3!
  5. Get a good number of on going clients. There is a tax rule (IR35) that you cannot work solely for one company otherwise the tax situation is different. If you build a customer base of a dozen or so companies you regularly do business for this can help the situation. Speak to you accountant for professional advice on the situation (make them earn their £800 - £1000).
  6. Get an online accounts package. There are a good number out there, they can make it easy to raise and track invoices plus integrate with HMRC’s returns system, plus it’s online so it is available wherever you are. (£15 - £20 / pm ish) http://www.kashflow.com/ or http://www.freeagent.com are good examples.
  7. Build up a war chest. You need to save enough money to see you through any lean times. If you can save enough to keep you going for a year that is good. It also enables you to bargain harder for rates if you know you are not desperate for a new contract to pay the bills.
  8. Stay functional. When times get lean projects still need people who do the work and will cut out the management and make the doers manage the project as well, don’t get dragged solely into management and loose those functional skills.
  9. Be wary of recruitment agents. Take anything they say with a pinch of salt because they don’t work for you. ‘If you don’t pay for the product, YOU ARE THE PRODUCT’. At the end of the day the client companies hiring pay the the agent’s mortgage. This means the agent will do what it takes to keep the client company happy, not you. There are some excellent agents out there, just finding them and building a good relationship with them is the key.

Your are the product so sell and market yourself

Now that you realise you are a product you need to package and market yourself properly:

  1. Get a good CV. I used this book http://www.careerconsultants.co.uk/career/books-perfectcv.asp and spent 2 days re-writing my CV and hours doing re-work before I apply for new roles. CV writing is time very well spent.
  2. Be excellent developer but make sure you are a specialist in a popular product. This increases the chances of getting a contract plus increases the rate you can get. As a Microsoft developer I’ve chosen to be a Dynamics Crm specialist. Sharepoint and BizTalk are in demand at the moment as well.
  3. Blog / write articles, attend user groups, answer Stack Overflow questions, give back to the technical community you live in. This builds reputation and sets you apart from the other candidates who are going for the same contract. When you need a new contract these people you have helped by sharing your knowledge could help you back.
  4. Make a good name for yourself, be excellent at what you do and make sure the right people know this. If you are a contractor and you speak at events, make sure the audience know this as they might want to have you on their project for a few weeks / months. It is all about personal brand and inbound marketing.
  5. Networking and Inbound marketing is important. LinkedIn is excellent, make sure you keep your skills and availability updated. Updating your status to looking for work is sometimes all it takes to get a new contract.

 

In Summary, You need to get a hard nose

It might sound obvious but you are now on your own.

There is no sick leave, holiday pay or pension. If you are not working you are not earning. You have to pay the employees and employers tax / NI on what you do earn, you have to pay for accountants and your own training, your own hardware and software licenses the list goes on and on. This is why contractors rates look good to people who don’t understand the cost of being a contractor. Everything you do needs to be earning money. If you are asked to work a bit later on a project then make sure you get paid for it somehow. If your contract hasn’t been extended with a month to go, find a new contract as ‘if you are not working you are not earning’. Been asked to be ‘exclusive’ by an agent? Tell them to get stuffed unless they are willing to pay you if you are out of contract and they haven’t found anything for you. Been told that the contract is yours but haven’t signed anything? Keep looking until the ink is dry on the bottom of the paper.

I found my hard nose by loosing lots of money on my start-up and feel that is a big reason why I have done ok so far as a contractor. I ignored my own advice on one contract and put in a lot of effort over and above what I was contracted to do, the thanks I got was my 1 weeks notice just before Christmas when the project ran out of money. It was a sharp reminder to me why I should stick to my own rules!

Employment, entrepreneur, internship »

[6 Aug 2010 | 0 Comments]

I recently read this article on the BBC website: http://www.bbc.co.uk/news/business-10822784 it outlined how un-paid interns are probably illegal and they can claim back pay for the last 6 years at the minimum wage. This made me feel as if someone had poured some cold water on my entrepreneurial spirit as I had been seriously considering looking for some interns to help get my websites off the ground. In this article I will outline why I think that there is a lot of value in having un-paid internships for both the employer, the un-paid employee and UK plc as a whole.

So what is the problem

image The problem is there is a risk that an employer could be sued and then be liable to pay backdated pay for 6 years. This could be a lot of cash all of a sudden when there was an open and well know agreement in place between consenting adults.

If the cost of hiring an Intern was known up-front then it could well have been that the employer would have decided it was not worth having them in the first place. There are such things as cost benefit analysis and if the numbers don’t stack up the it is not worth doing it. In my view business deciding not to take risks makes everyone a looser and having cheap labour to try some things out is a good thing.

Employing people is expensive

image From personal experience I can safety say that employing people is really expensive.

  1. There is the obvious bulk of the cost, salary.
  2. There is national insurance to pay to the government as a thank you for having 1 less person on the dole.
  3. There is getting them a chair, a desk, a computer, coffee, toilet paper, heating, ink for the printer, paper for the printer, phone calls, etc (there is a lot more)
  4. There is then buying insurance to cover them from hurting themselves when at work or being negligent to one of your customers, extra payroll costs to the accountant, mileage, travel expenses etc.
  5. There is the sick leave and holiday you have to pay for.
  6. If someone goes on maternity you have to keep paying them and keep the job open
  7. There is training them and showing them what to do. This takes up my time which means is costs me money.
  8. I’m sure there is more but that is just what comes to mind

Will I employ people again? For another self funded start-up or idea i have, probably not. For an organisation that makes money, yes – in fact I have a knack of putting together great delivery teams in companies I contract for.

Experience can be better than cash

image So an Intern will be taking home a £0 salary. Perhaps some travel expenses but that will not be much so why would people do this work? The answer is getting experience, industry knowledge and making business contacts. This, in my opinion, is better than cash. If you get the right experience the you can convert that to cash later on in life by getting a better job or work on a better project or know how to do your own start-up. In fact this is the exact argument that the government uses about levying student fees on university courses in the UK.

If I was an employer looking to hire someone and I saw that a candidate had worked un-paid in the industry just to get relevant experience it would say a few things to me:

  1. They are keen about the industry
  2. They have a good work ethic to achieve a goal in their life
  3. They understand about long term investment / strategy for reward rather than short term gains.
  4. A good attitude and a will to get on in live, knowing that it isn’t always fair but something will work out and that nothing is truly given out in this world.

It would certainly set them apart from candidates that have not done this. It does not guarantee them a job but it will certainly help.

Helps pre-revenue low revenue start-ups at a time of need

image So I’m pretty sure that I cannot afford to employ anyone at the moment, but I still believe there is value in my websites. The whole project would really benefit from having someone do some basic customer management, research and social media updates. It is not going to be technical stuff but it needs someone to put in the hours. The cost benefit analysis is marginal but if I had the time then I would want to be doing this work.

So my situation is that I think I have a good idea but can’t afford to take the risk of paying to see if it works or not. I looked at getting grants from the likes of SEEDA and Business Link (I won’t miss you when you are gone) but that would be a lot of work with no guarantee of money or benefit at the end of it. I would be better off spending that time doing what I felt needed doing.

So a good solution in my mind would be to able to give an eager motivated person the opportunity to prove (or disprove) my idea. They can get some real work experience of dealing with customers, technologies and business tools and I get to see if my idea works at a low cost (remember I would still have to pay for the interns running costs). If they do a good job, I’ll give then a professional job reference to further their career or perhaps I know of other opportunities they could take advantage of.

What can be done about it?

I have a couple of ideas which would make me think about spending my time and effort to getting an intern.

  1. Formalise an clear path for interns to be un-paid and take away the risk of employers being made to cough up back pay for the last 6 years.
  2. Can I just become a department at the University of Life? I could then charge interns (which then makes them students) to take my Business Course. These students will graduate with excellent and relevant business experience. Perhaps I could even get some government funding for my new department?

Round up

I’m not going to risk trying to find an intern at the moment. I just cannot afford to justify it. In the economic climate where it is hard to find jobs, University funding is being cut, student fees will probably be raised soon, there is talk of a ‘lost generation’ we surely need to encourage people to try things, get new skills. If this means that they have to work for free, then so be it. At least it will allow those who have a healthy outlook on work will be given the opportunity to show what they can do.

If people with industry experience and ideas can be given the opportunity to see if the idea works at a low cost then this is surely the definition of a win-win-win situation for the entrepreneur, the Intern and UK Plc. Allowing un-paid internships is an enabler of the Entrepreneurial Spirit of both Interns and businesses.