experienced web app developers

Main menu

Drupal Skills

After over 7 years experience of Drupal, I’ve got a passion for developing great websites. I like to create sites the 'Drupal way'. I develop the bulk of most projects using existing Drupal modules and create Custom Modules for more specific client requirements. As a Drupal Freelance Developer, I try to make Custom Modules interface back into the UI as quickly as possible using Blocks, Rules and Views. This allows for speedy development, easy adjustments and great team development processes.

When developing Custom Modules I use Drupal Hooks and API's. I use my 12 years experience of PHP which includes Object Orientated Development. With regards to MySQL, I again have 12 years experience including optimising both SQL queries and the actual MySQL databases.

I started off working with Drupal 6 and migrated to Drupal 7 after it was officially released in 2011.

Experienced with 250+ modules

I have worked with over 250 different modules. This experience includes many complex modules such as Organic Groups etc.. etc.. etc... For example with Organic GroupsI have created responsive sites that have maxed out all the standard OG functionality. Then created Custom Modules to take its functionality beyond its normal range of usage.

Custom Module Development

Using my 8 years of PHP / MySQL to develop a Custom Modules can often vastly simplify a web solution and sometimes make the seemingly impossible easy. Custom Module development is a great way of me giving other Drupal Developers who only ever use the UI, the ability to easily complete something that would either be very hard or impossible to complete otherwise.

I like to make Custom Modules interface back into the UI as quickly as possible using Blocks, Rules and Views.

Many projects I have developed have required vast amounts of Custom Module Development. Please have a look at my Custom Module Development section.

Apache Solr

Created numerious project that have involved me setting up Apache Solr and the Search API to create faceted searches using Drupal. I've created a demo site so you can see what Faceted searches look like using Drupal, Apache Solr and the Search API.

I also have experience of setting up and using the older Apache Solr Search Integration module (it's been retired for Drupal 8).

Commerce

Creating a shop in Drupal Commerce is a relatively simple process when you have a full array of Drupal skills. The joy of using Commerce to create eCommerce sites is that once you’ve done the initial shop set-up, the website is in Drupal. This gives me an opportunity to use my full arsenal of Drupal skills to create an integrated shop / website / marketing / customer management solution. Typically I use Rules and the Database API to create clever Business logic.

Please have a look at a Drupal Commerce shop I quickly created to demonstrate a Commerce shop. Drupal Commerce can be installed one of 2 ways, manually via the Commerce module and also using Commerce Kickstart the quick and easy way. For production sites I install Commerce manually allowing it to be flexible and controlled as the rest of the project grows, especially useful when documenting and updating the project with time.

Migrating Data

I am experienced at migrating data 3 different ways in Drupal. Setting up a process to migrate data quickly is an art. To create a solid and reliable migration process, I always migrate data in repeatable stages which are easy to audit, rerun and test.

Migrate Module: migrating data using the Migrate Module creates a very stable migration process. The migrate module does not have a UI for your migration setup. I rely on my 8 years of PHP to manipulate the PHP Object Orientated classes to create a Custom Module. This is the recommded way of using the Migrate Module. Once the mappings and data imports are setup the process is very stable as the PHP OO Classes have built in memory management. This means that your computer never uses more than 80% of it's resources as data is batched across. Once setup the Migrate module supplies a clean interface to allow everyday website users the ability to migrate additional data.

Feeds Module: using the Feeds module and the Feeds Extra module is a simple way to migrate data. It is most appropriate when the data mappings are simple. It's quick to set-up but very limited in data manipulation possibilities compared to the Migrate Module. It is a great way of getting simple data into Drupal.

Custom Module development: when things really get complicated data often needs to be migrated across by creating a Custom module. Where possible I adapt use the Migrate and Feeds modules, to get data into Drupal. Then when extra manipulation of data is required for business logic etc.. I use PHP and Drupal's API to get data exactly how it is required. As stated early the secret is repeatable stages.

Mobile, Responsive Theming, Sass

I am experience at developing Mobile ready Drupal websites with Responsive themes using Sass and Compass. Sass is brilliant! ..I love the control and speed of development it allows. Then when I combine it with SASS mixins, functions and Compass I create awesome CSS3, Mobile Ready, Responsive websites fast. The same content is styled to look great on the abundance of mobile devices, regardless of all their different shapes and resolutions. Web development does not get much better than this!!

Drush

Wow! ..using Drush has transformed the way I develop Drupal sites. Drush allows me to control my Drupal websites via the Command Line as oppose to doing all configuration through the UI. This means it takes me a few seconds to download, install, backup & update Drupal or see the status of my Drupal configuration. Most of the repetitive time consuming Drupal administration tasks have been developed with Drush functionality. It even allows me to perform multiple operations from one command, again all done in seconds.

Views

Experienced at working with Views both in code and the UI. I have written various Views plug-ins ranging from simple formatting changes to a full blown Views style plug-in for creating interactive real-time charts. These charts are as quick as a table to produce in the Views UI and give users instant real-time control of their charts without even page refresh or AJAX update. Users can play with the figures and data types shown on the charts and watch their charts change in front of their eyes. This cutting edge (bleeding edge) usability functionality was programmed all the way back through Drupal ultimately to a View Style plug-in so users can create interactive Charts themselves in about a minute. I can progam just about any data back into Views even from souces that are not local, such as pulling Twitter posts directly through Views from the Twitter API. This means that Drupal Site Builders can add and adjust a websites content in the UI with a few clicks.

I use Views dynamically with Contextual filters and Relationships to make sites that can scale to be extremely large, despite having very little development time spent on them. This website for example supplies 80% of its content from a single View with only 2 displays.

When using Views I still like to set Drupal to display its MySQL query & information. This allows me to glance over the SQL as well as look at the build, execute and render times for the MySQL query. When developing I will always know approximately how big the Database is and the basics of the hardware the system is running on. With this in mind I can pretty accurately when there is an issue arising within the database. On live websites I check over the MySQL slow query logs to make sure everything is running as expected.

Rules

I use rules to provide an extra level of separation for my business logic. This allows me to fill web applications with logic that I order and run on various scenarios as defined by the client. As these 'tools' can be integrated with Hooks, Features and Modules a sites bespoke functionality can easily be created and adjusted as requirements change with time. Comparing this to the days when I use to write web apps in PHP / MySQL, when using rules I still get a WOW-how-quick-was-that moment.

I have experience of writing Rules through the UI, calling Rules within Custom Modules and also writing custom Rules when doing Custom Module Development.

Structuring Data

When creating solutions I try to keep them as dynamic as possible. Where ever possible I use a soft structured approach and rely on data rather than hard coding things to establish how things are presented. My solutions tend to render most things with Views, but I need very few of them as I use them dynamically to control lots of webpages. My years of working with and optimising MySQL databases allows me to develop these in a way that is fast and dynamic. This approach saves hours on development, maintenance and optimization. It also allows me to use my other Drupal skills such as Features to whiz web applications together.

Panels, the Context Module & Blocks

I have developed different Drupal projects using Panels, the Context module and also Blocks. Panels is great for moving stuff around your webpage to exactly where you want it. I particularly like using the context capabilities within Panels itself to create dynamic websites.

SEO

Drupal is great for SEO but it does not come straight out of the box. Drupal has about a dozen modules which will assist with SEO. These need to be installed setup and configured. Once this is done this is the starting point for your SEO journey. Keywords need to be established and content needs to be created with good URLs and the right density of keywords and links to create good onsite SEO.

Creating meta data (which is increasingly less important for Google) can be done in 1 of 2 main ways depending on how you are presenting your data. Meta data can either be linked to nodes or be independent and constructed based on the web pages URL. There are pros and cons with each approach which I will not go into here as it will take up the whole webpage.

Drupal will automatically create internal links to data if your website is dynamically constructed. These links can often be tweaked and quite dramatically improved.

Off site links use to be the major 'make or break' aspect when it came to good SEO in a crowded search area. But even these have had a major shake up at Google over the last 18 months. Google is now much more fussy at what is it considers to be a good external link. Finally one of the biggest changes affecting a websites page rank status on Google is Social Media activity. Google is increasingly looking at this as a way of gaining an insight into the importance of a website as a 'brand'. It looks at how interested real human beings are in this 'brand' on a day to day basis.

As a final foot note on SEO, Google is not the only search engine. However it is more widly used in Western coutries than that the rest of its competitors put together. If you apply your Google techniques to other Search Engines succes on them will quickly follow.

Test Driven Development & SimpleTest

Experienced at testing Drupal Modules. Experienced at creating Custom Modules with .test files that use SimpleTest to automatically test the functionality of the Custom Modules. The tests automatically install a fresh copy of Drupal, they install the required modules to be tested, then run automated routines that create the required content that shows whether the new Module is working as expected. Drupal Functional Testing and performing the duties associated with a Drupal Tester is a good way to make sure your Website is performing as expected.

The tests create a detailed log of events including HTML screen captures, that show how my Custom Modules are performing when receiving content from imaginary users, over and over again. These tests are great for Drupal Test Driven Development so none technical individuals can easy audit the screen captures, event logs and website functionality as a whole.

AngularJS and Drupal

AngularJS when combined with Drupal gives users the ability to interact with data without screen refreshes, allowing users to still work offline or just very fast online.

I can make AngularJS talk to Drupal in a 2 way dialog using Services. I can also combined Drupal and AngularJS using Views and third party modules to create JSON, or for more complex situations, I’ve created custom Views styles which use custom PHP Object Orientated Classes that I've created to directly output data into AngularJS. This allows AngularJS Drupal functionality to be created with a few clicks by Drupal site builders.

Features

I use the Features Module to package up my existing websites functionality and transfer it across to the new website I am creating. I can simply turn on this functionality on a new website. Features allows me to put the existing functionality I have developed into code in the form of a Drupal Module automatically created by the Features Module. I can then simply turn it on to get the functionality in the new website I am creating.

The secret to effectively deploying Features is to effectively manage them on your source system. That means: even though I am using Features to deploy functionality to a new system, I actually initially focus on having them correctly configured on my existing system. i.e. I create a Features then instead of immediately deploying it on my new system, I actually deploy it on the system I created it from.

I use the Strongarm module to transfer settings into Features and the Devel Module to allow me to inspect areas that have been ‘Overridden’. These occur when there is a difference between my existing system and my system as it is stored in code i.e. the Feature I have created. As I turn on the Features I have created, the UI consumes my system so functionality only ever ends up in one Feature. It can be thought of like a cake with ‘Happy Birthday’ written on it. You can slice it up anyway you choose but the letter ‘B’ is only ever on one slice.

To effectively deploy Features I keep them small and use dependencies, so for example I package up a Content Type separately to a Feature that contains a Drupal View. This way I can have lots of different Features that contain different Drupal Views all looking at the same Content Type and when there are changes I can see within the Features UI where those changes are.

Headless Drupal

Experienced at creating headless drupal functionality. Headless Drupal is the process of allowing users to interact with Drupal as the data source whilst using alternative technology to manipulate and present the data.

This Headless Drupal webpage is being pulled from Drupal via Views to create a JSON file that feeds the information to the page. The page is interactive and changes by presenting the same JSON data in different ways. This is classic Headless Drupal, and the starting point for a Single Page Application (SPA). By avoiding screen refreshes webpages can work offline, avoiding server traffic and can change instantly as required.

Creating user friendly navigation movement is done simply to help users appreciate things are actually changing. This is done as webpage updates can happen so fast on headless pages, feedback has shown, users sometimes do not appreciate things have changed because it literally happen in a blink.

Style and Theming

Styling and creating great looking websites is about both technical skill and also artistic flare. I would like to think I have both. You are currently looking at a website I created. Please tell me what you think here.

Feeds & Email Marketing

I have experience of combining the feeds module, some good drupal content, a bit of clever programming to tidying up content and an e-mail marketing api. Experienced at setting up Drupal to do all email marketing for free. Also experienced at combining Drupal with third party Email Marketing Services such as MailChimp.