web developer » alanhollis.com

A lot of the people who contact me through this website are looking for someone to build them a web based application. The majority of potential clients I talk to have either never programmed, or have very little programming experience. As such it makes it very hard to know what to look for, and what to ask, in order to make sure you’re dealing with a reputable company.

I’m more than happy to share my advice with any potential client, even if it means me risking losing the business. As I’ve had a number of these requests I thought I’d blog the three things I would ask a digital agency before parting with my money.

1. Do you use version control software?

Why?

Why do I make this my number one priority? As a developer I deeply understand the importance of version control software. Everything about the process of building a web base application becomes better when using version control software.

  • A more maintainable application, both now and in the future.
  • A way to add features without breaking existing code.
  • Easier roll backs to previous versions of the software.
  • A sustainable backup solution.

What response would I look for?

These days I would expect almost all digital agencies to reply with an instance yes, and then describe that they use Git/Mercurial or some older version control software like SVN/CVS. Any agency that said they weren’t using version control I would instantly walk away from.

 

2. What framework/content management system do you use?

Why?

I personally feel that if I’m to get value for money as a client I would be expecting a digital agency to be using an existing solid framework or content management system. I’d be very wary of any design agency which told me they used their own custom framework or a bespoke content management system.

There’s two reasons for this, one creating your own framework / content management system which can compete on usability, functionality and security of an existing product, would be incredibly time and money consuming. The second reason is the wealth of documentation and community support available when using an established framework / content management system. In an age when four out of five companies fail in their first year this is especially important.

What response would I look for?

This is a trickier question to answer as it depends on the chosen technology stack of the agency. The majority of digital agencies will use PHP as their main programming language. If this were the case I would expect to get responses of Symfony, Zend, Laravel, Yii or Codeigniter for frameworks. For content management systems I’d expect to get responses such as WordPress, Joomla, Drupal or Expression Engine.

3, What do you offer in terms of support / maintenance

Why?

Software projects are never ending. The moment you start creating software you realize that there will always be upgrades, extra functionality and on going maintenance involved with the project. For this reason any digital agency should have clear terms when it comes to support, and be upfront with customers about the nature of software development.

What response would I look for?

At the very minimum I would expect the contract to state what’s covered in terms of support/bug fixing after the completion date. I would then either look to see if there’s a rate for extra work guaranteed, or whether a monthly support retainer could be added to the package.

 

Looking to develop a web application? Worried about what to ask? Get in contact today, I can help!

As a quick Saturday morning project I decided to create my own very simple theme based on the very latest version of the Twitter Bootstrap library.

The theme features a full width and left side bar templates. It’s very minamalist in all ways, there’s no options and as little library dependencies as I could get away with.

Wordpress 2.1.0 WordPress theme

 

The theme is available to download via github https://github.com/Alan01252/WP-Bootstrap-2.

 

 

Here’s my solution for getting dynamic column headings for a DataTables.net table. Useful if your column headings are dates for instance and you want to navigate forward/backwards in time without reloading the page.

 

/**
* Overwrite the table headings with the response from our ajax data.
* 
* @param data
* @param type
* @returns
*/
var sAjaxDataPropCallback = function(data,type) {
//Get the headers from the data and modify table headers.
var tableHead = $($.fn.DataTable.settings[0].nTHead).children('tr')[0]; //tableheader 
var tableHeadings = tableHead.getElementsByTagName('th'); //grab the headings
for(i=0; i < tableHeadings.length; i ++) {
tableHeadings[i].innerHTML = data.headers[i];
}
//Return our rows
return data['rows']; //rows replaces aaData
};

$(document).ready(function() {
        oTable = $('#example').dataTable({
        	 "bProcessing": true,
        	 "bServerSide": true,
                 "sAjaxSource": "path/to/your/json/datasource",
                 "sAjaxDataProp": sAjaxDataPropCallback,
        	 "aoColumnDefs": {your column defintions}
             });    
 });

The server response needs to look something like this

{
    "headers": [
        //heading data
    ],
    "rows": [
     //row data
    ]
}

Hope this helps someone. Feedback on the code is always welcomed!

 

What I’ve learnt

  • There is plenty of work out there, for someone who knows what they’re doing.
  • There are a lot of web development companies looking for full time developer roles.
  • It’s hard to say no to full time employment when you’re starting out.
  • Most companies will try to bid you down on price, don’t accept straight away. Reach a compromise that works for you both.
  • There are a lot of companies making money producing bad code, there’s money to be made fixing bad code.
  • There are a lot of failed companies with legacy code which now needs to be maintained.
  • Debugging and finding a solution to a customers problem despite having to wade through bad code is fun.
  • It takes time for people to get back to you, to get contracts sorted, to get feedback on work.
  • Waiting is frustrating. Have a side project to work on whilst you wait.
  • Getting payment terms down to 10 days is impossible for some companies, but not for all.
  • If you don’t ask you don’t get.
  • People want to pay you hourly/per project, convince them it’s better for both you and them to pay you daily. I’ll explain why in a future post.
  • Get the specification of work nailed down as thoroughly as you can, it’s mutually beneficial to you and your customers.
  • There’s a lot more to learn.

How I found work

  • Created this blog, hosted it on Rackspace, made it run fast.
  • Emailed web design companies in and around the local area using this Blog as my CV.
  • Posted adverts on Gumtree. ( a free classified ads service in the UK )
  • Posted on web forums for those technologies which I used in their advertisement section.
  • Getting in contact with friends and telling them I’ve started freelancing. ( A big thank you to all my friends who have been incredibly supportive so far).
  • Entered a programming competition, this hasn’t directly lead to work, but I’m hoping might work well for me in the future.
What tools/software am I using

How much money have I made

  • £1,785.25

What’s my plan for next month

  • Continue to satisfy my existing clients producing quality/maintainable code.
  • Branch out and try to find some hosting/long term contracts with monthly recurring revenue.
  • Continue to work on my start up ideas.

Suggestions

Any thoughts or advice you’d like to share for someone starting out would be greatly appreciated.

Today was the final of Wazoku’s coding competition and I achieved second place. Which sounds great until you realise there were only three other entries. Fortunately for me it was a solid second place, and I think with a little bit more luck on the resources I was allocated at the start of the game it might have won. In the end I only lost on PR which is something I’d coded the AI code not to purchase as the reward of two customers wasn’t enough. Unfortunately my competitor got allocated one of the appropriate resources to to produce PR from the start, and my AIs eagerness to trade the other resource he needed (cash, due to me ignoring PR) gave him the win, despite me having more assets at the end of the game. If I had checked what other people were bidding for I could have made much smarter decisions on what to trade.

Looking through the code of the winner I can’t see anything obvious which makes PR a priority so I’m going to put the resource allocation at the start as being luck of the draw. It would have been nice if they’d done a best of five runs instead of just one for the winner. Although I have no doubt I still would have lost, it would have made me feel better. That being said, the winner was the deserved one, and after running through his code it’s obvious his AI made a lot smarter decisions on how it traded compared to how the AI I submitted traded. His AI did offer silly trades which my code didn’t such as offering nothing and requesting nothing, which gives me a certain sense of satisfaction, but this would have been a quick fix and overall the code they produced was of superior quality to the code I produced.

Things I enjoyed about the competition

  • It gave me a fun way of learning/starting to learn a new language. I would recommend entering competitions to anyone who wants to learn something new.
  • Through this blog I got to give direct feedback to the person who ran the competition and I’m pleased to say most of the suggestions I made were implemented.
  • The game was actually fun and it was very disappointing that there weren’t very many entries at the end.

Things I didn’t enjoy

  • Every other entry kept their code under wraps until the very end of the competition. I can understand their reasons for doing so as it means the other entries don’t get chance to test and compete. I was open with my code from the start in the hopes that it might encourage other people to learn and take part, which makes it even more impressive I came second.
  • The lack of competition meant a lack of entries to learn from at the end. Again I’m not sure how best to get a better uptake in competitions, maybe a bigger prize. I know the person who ran the competition is planning to post a blog entry about things he learned which I shall read with interest.

Overall this was a fun learning experience, and I hope the lack of entries doesn’t put the company off running similar competitions in future, I for one look forwards to competing in the next one.

In dealing with a number of projects recently I’ve seen lots of examples of work by other coders who have decided the best thing to extend the functionality of their website is to hack the core library of the project. For every web developer who is thinking of doing this please stop right there and read my advice. Unless you are a maintainer and the chance of the code entering the library is 100%, DO NOT HACK THE LIBRARY.

There’s a number of reasons for this but the biggest one, should be obvious to even non coders. Libraries change, be it for increased functionality,security or for just general improvements, libraries change and you will eventually want to use one of those changes. A lot of people justify hacking the library in their own minds by thinking that it will never need changing, but it will, it always does, every project which doesn’t get binned will get changed and if you hack at the library you’re using you will get an angry developer cursing your name in future. You don’t want that.

In most cases a little bit of thought will give you the solution to the problem without having to delve into the depths of a library. Most modern frameworks, systems such as wordpress, magento, Yii and even older ones all have hooks or functionality in place which makes it EASY to add your own features. Even simple jquery plug-ins, in fact I’ll go as far as to say especially simple j-query plug-ins, should not be modified. With javascript there is NO excuse, Javascript is insanely flexible and modifying the object from outside of the core code is incredibly simple.

So don’t, please, I’m asking nicely, edit that WordPress install, modify that Magento class, or change that if statement in a j-query plugin under any circumstance.

 

I was late to the programming world compared to others. My parents aren’t technical in the slightest and although we had computers in our house at a young age, a lack of Internet and peers who had an interest in computers meant learning was difficult. My earliest memories of trying to code was on my Dads BBC computer in basic, but I don’t recall getting any further than a 20 goto 10 program, but this was enough to get me hooked and wanting to know more.

We got our first Internet connection when I was around 11 and I can remember quickly becoming obsessed. I built a number of geocities sites and taught myself HTML, not a programming language, but at the time I felt like I was almost on my way to being a proper programmer. But even with this new found ability to find knowledge I struggled to ‘get’ programming.  I convinced my parents to purchase a Linux installation CD in the hopes this would make it easier to get into programming, or at least gain me access to a community of programmers. Getting started with Linux went well, but programming didn’t and rather than receiving support from the community (mainly IRC chat rooms and forums) I was met with a “if you don’t know what you’re doing you shouldn’t try” and so I didn’t. By this time my interest in computers was still growing and I was quickly becoming the go to man for basic computer support for my family, friends and even at my school but I wasn’t a coder by any stretch of the imagination.

It wasn’t until I started university that I really had to get into programming again. In my first year I had one module teaching introductory C. I was completely baffled, and due to my own fears of being seen as thick by those around me and my lecturers I muddled through as best I could mainly by copying code from web sites and not really learning anything. We had one module where we had to write some assembly for a microcontroller and eleven weeks later I still didn’t have a clue, neither I think did the rest of the class as in the penultimate lab we were all given the necessary code to pass the module. By this point I was starting to grasp basic concepts such as if and else, and I could build very simple programs, but even at this stage piecing everything together to produce a working program, even a simple one felt impossible. It wasn’t until the second year that suddenly out of the blue it all just clicked, and finally I was able to build more complex programs. I wish there had been a more gradual learning curve, but for me it was literally yesterday I couldn’t, today I can.

After graduating University I got my first job working for a Telecoms company as a junior programmer and quickly realised that being able to program enough to pass my University course wasn’t anywhere near enough to pass as a plausible programmer. I spent a lot of time in the first few months making sure I was just doing enough to keep my job and that I was coding correctly. To me at the time correctly meant writing the most simple code I could, and producing code that the other developers could easily understand. I’m not entirely sure how they put up with me for the first few months, and I had to accept a lot criticism, but every project I did got better and better.

Over time I started to realise a lot of programmers aren’t bothered about producing quality code. I have had to stare at some really horrible code, and try to work out not only how it worked, but also what was causing the bugs. Looking at this code increased my confidence in my own ability and to understand what writing good code entailed. Some times even a single comment would have made such a massive difference to my understanding of the code I was looking at, that I now comment whenever I’ve written something which might not be immediately obvious to the next person reading it. I’m a true believer in writing code to a standard where you don’t have to worry about a maniac axe murderer programming being the next person to read it and coming after you.

Every project I do now improves on the last, and I try to push myself to be better every time I start a new project. Object orientated coding was a big leap in my understanding, learning the model view controller and other design patterns helped to increase my skills further. Next was test driven development and proper usage of version control software and web sites like Hacker New, Reddit and helped me learn more about the industry, and the latest technologies. I’m also a massive fan of StackOverflow and GithHub and other social coding sites which make learning from other peoples mistakes and success even easier.

For me programming is fun and I constantly try to learn as much as I can about the latest technologies and best practices. The internet hugely fascinates me which is why I now concentrate on web development but I’m not averse to writing the occasional desktop/mobile applications. I feel my programming journey is still in its infancy, but after all the years of trying to become a programmer I’m proud to of got myself on a path on which I’ll keep improving and learning my trade.

My confirmation email came through today allowing me to attend the Silicon Milk Roundabout,Brick Lane London. Silicon Milk Roundabout is an event designed for start ups to promote their products and to recruit developers without recruitment agencies. Everyone who wishes to attend has to register for the event, registrations are then reviewed for acceptability. I’ll be honest I’m not sure how strict the review policy is but the fact that there’s a second event with lots of returning companies must mean the process was good enough. The event features not only a free bar, but more importantly a chance to listen to what other companies in the start up scene are doing. It also provides me with a great opportunity to network and get my name out to a few companies who might be looking for a web developer in the area.

I attended last year and was very apprehensive about how the event would work out, and although the presentations did feel rushed there was a genuine feeling of excitement in the room. One of the most interesting people/start-ups I talked to last year was https://smarkets.com/ ( a social betting site ). I got the chance to speak to one of the founders whose technical knowledge and enthusiasm for his product were inspiring. The wide range of software being used by these sites was impressive, with NoSQL software being used by the majority of companies represented. I’m keen to hear if these companies are still using the latest and greatest technologies one year later, or whether more traditional software is now running their sites.

I’m also hoping to find a few more stand out companies at this years gathering, the names on the sponsorship list alone are slightly intimidating, with the bigger boys such as Twitter, StackOverflow and Mozilla all in attendance. It’s one of those times when I wish I’d spent more time on my on-line portfolio to show off my talent as it was self evident last year that some recruiters already new exactly who they wanted to speak for before they walk in the door. I’ll be armed with a bag for the freebies, and will report back on how the event goes the second time around.

Silicon Milk Roundabout is held on Sunday 27th May 2012 12pm – 5pm. Hope to see you there.

 

 

 

Today is my great pleasure to launch a site I’ve launched for my sister. CuteIckle Nails.co.uk. Built on WordPress, using the twitter bootstrap theme this site contains everything you could ask for from a portfolio site.

I’ve recently started creating a booking module for YII. I’ve decided to open source the module and it’s available on github. This current version really is alpha software, although all the functionality is there to start taking bookings on-line (other than some might argue the most important part taking payment) it still needs some tweaks to get it to a stage where some one could import the module into their application and start taking bookings through their YII based site. You can find my the beginnings of the module here. https://github.com/Alan01252/Yii-reservation-booking-module.

The projects been fun to build so far, I’ve used the YII bootstrap extension which I have to say is awesome, I’ve currently merged the date picker branch into the main branch on my local machine to use that. A very big thank you to the coders for providing this extension to the masses. I’ve also been using PHPUnit to perform automated tests on the most complex parts of the system so I can be confident that over allocations won’t happen regardless of the scenario.

The TODO list is quite extensive but this is what should be happening in the next few weeks.

  • A tidy up of the admin pages.
  • Documentation on how to install and use the module.
  • Payment integration (I’m looking at integrating with other payment modules already available on YII).
  • Work with TidyDesign in Portsmouth to upgrade and sell the new system to businesses in the area.
Screenshot.