Job hunting as a Contractor in todays world

I’ve been contracting now for nearly six years (it’ll be six years in July) and ever since I started I’ve been constantly going from one contract to the next. I’ve been lucky enough to only have one short spell of about 3 weeks where I didn’t have a contractor was waiting for one to start.

Does this mean I’m the best contractor out there or the most gifted Angular developer in the UK with companies just queuing to offer me the next contract? Well no, unfortunately, that’s not true. I’m a good Angular developer but I’m not Todd Motto.

What I have been, is good at job hunting.

I get most of my contracts through recruitment agencies, love them or hate them, you can’t live without them as a contractor. This means I speak to a lot of recruiters on the phone. The conversation usually goes something like this. ‘I have a role, it’s for a company in London, doing Web Development. They also have pizza and snacks. Now tell me everything about your last role’.
So what this translates to is, ‘we have a role, which you could be one of many CV’s I put forward. It’s actually in South West London, so that’s an extra 40 min tube journey for you, but we all know you developers love pizza. So you should be happy there as once or twice they have provided pizza (but you’ll have to work all night to get it). What I really want is the details of your last client so I can contact them and try to sell my recruiting services to them’.

So there are a lot of missing details here, where exactly is the role (if you have a 30 min train journey into London, another 40 min tube journey all adds up, are you prepared for that amount of travelling), what are they looking for, what skills is the client looking for. If the client wants a Java developer, but you’ve only used JavaScript, then it’s not a role for you. What is the day rate? This is extremely important to find out early, but it is a tricky part of the initial conversation with the agency.

The client must have a budget of how much they are will to pay a contractor, the agency takes a percentage of this day rate for their services, which is fine. You as a contractor are also running a business, your own limited company. This limited company comes with all the taxes and costs that any other business has. So you need to bring in enough money to cover those costs.

So there are 3 separate companies trying to make the best of a set budget. As a contractor, you need to think about your business needs first. This is why we have an ideal day rate, but the topic of day rates and setting them is something for another post. Back to the process of finding work as a contractor.

When I started contracting, all you really needed was a good CV and a phone. You’d upload your CV to JobServe, apply for a couple of contracts and the phone would soon start ringing. Then you have to speak to the agents, telling them what you’ve done before, how many years experience you have in a certain technology (which is never a good marker for technical knowledge, but its all they have) and what your availability for interviews is. That’s it, your CV went off to the client and if they wanted to see you, the agent would happily arrange it.

That’s how it was a few years ago, but like everything else related to the web, things have changed, fast. Now it is no longer enough to have a CV listing a few technologies and your recent 5 jobs. Clients want to know more, they want to see more about you as a developer. Thanks to sites like GitHub and BitBucket you can create your own portfolio of code. Your GitHub account is a window into seeing what type of developer you are, the type of projects you’re interested in, how you write your code, the way you structure your code. All this can be learnt through having a good Github account.

But does this mean without a GitHub account or one with a bar of green squares, you’re not a good developer? If you don’t spend all your waking hours committing code, does that mean you don’t know as much as someone who does? Well no, but for a recruitment agency it is all about numbers, the number of years you’ve been using a certain technology, the number of projects you have in GitHub, it’s all the same.

So as I said, in July it’ll be six years since I started contracting and now how I have to find jobs has changed. I know I have a good CV, it’s up to date, not to much waffle, it doesn’t just list technologies I’ve used. I’ve tried to describe the types of the projects I’ve worked on, what I did in these projects, but I know that I need to do more to promote myself as a developer.

I do need to add more to my GitHub account, show more of the code I write, I should get involved in open source, there are many benefits to working with open source for contracting developers. This is another great topic for a blog post.

The things to remember as a contractor when it comes to job hunting are:

– Have an up to date CV that you can send out quickly.
– Be able to talk/communicate well with recruiters, they are extremely helpful.
– Keep promoting yourself, your skill set, experience.
– Keep an eye on the job market, even if you are in a long-term contract. That way you know the current market rates, what people are looking for.
– Try to find out as much as you can from the agency, ask them loads of questions. The more you can learn, the more you’ll be sure the role is for you.

Interesting issue with Angular Material

I was recently starting a new Angular/Angular Material app, using the latest version of the CLI. Following along with the getting started guide I created my basic app, but as soon as I added a Material component I was getting errors that were stopping my app from running.

The error I was getting was:

node_modules/@angular/material/slide-toggle/typings/slide-toggle.d.ts(55,18): error TS2315: Type ‘ElementRef’ is not generic.

This is a strange and slightly misleading error. After a bit of digging around, I found a GitHub post where someone mentioned that if in your package.json file the version you have of Material is 6, but your version of Angular is 5 then this error is thrown.

Now, this is a simple issue to fix, thanks to the new ng update feature, all you need to do is run ng update and all the angular versions are up to 6. Rebuild your app and run ng serve and the app runs perfectly again.

This was a strange issue that I spent a little time looking into, but it does show how useful ng update is.

 

Material Starter Components, the hidden gem of Angular 6

Angular 6 was released just a few days ago and with it came a whole set of features, including Angular Elements, being able to update your app to use all the latest packages using the new ng update feature. There is also ng add which allows you to add new packages to your app using your chosen package manager, either npm or yarn (or whatever new one comes out in the next 6 months).

After reading through the new release blog post, one set of features that haven’t been getting as much exposure as say Angular Elements, was the new Material Starter Components, which are part of this release.

I like Angular Material, I think it gives a great polish to the UI. When I’m creating Angular apps having the UI handled by a library like Material or ng-bootstrap, really helped to get the development of the app moving quickly. So I was happy to see that in Angular 6 there are these Starter Components.

But what are these components, well they are just standard Material components that generate layouts for your app. If you’re building an app that requires a collapsible side nav, there is a new component that will generate that for you. Not just the Nav but the main container and the side navigation with a couple of demo links so you can quickly get started building upon the basic structure the component generates for you.

There is also a dashboard component, which generates a layout of a dashboard application with a section for various panels that the dashboard would use to display information in.  Again this can be generated using the standard ng generate command of the Angular Cli.

What I find really exciting about these Starter Components is that they can be built by teams who want to have their own layouts and share them with the Angular community. If you’re building an HR app in Angular and you need a layout for showing staff details, check to see if one has been built by someone in the community. If it’s there then all you need is one simple command in the CLI and you have the basic layout of your app generated for you ready to go.

The more of these Starter Components there are, the easier it will be for teams to get started building responsive, attractive looking UIs with Angular Material.

For further information of Material Starter Components, there is the official docs on Schematics, the functionality in the CLI that allows you to add Starter Components. There is also a video by Tina Gao who works on the Angular Material team, where she discusses the Material Tree component

Why Angular Developers Love NgRx

If you saw any of the recent talks from ngConf, you will probably have seen one on NgRx, it was a huge topic at the conference this year, but why are  Angular developers all talking about NgRx?

If you run a team of Angular developers they probably have already mentioned that they are looking to use NgRx in a project sometime soon, why? Well because NgRx solves one large problem, state management. What is state management, well it is a way of managing the state of an application between screens For example if you have a six-step process that needs to add to the application your team is building. In order to pass the information enter in step 1 to step 6, state management gives the developer a way of storing all the information added throughout each step, so it is accessible throughout the entire processes.

Before state management libraries like NgRx, developers use to have different approaches to store the state of the application, from storing all the information in local storage in the browser to cookies and even writing back to a temporary table in a database. With each project, there was probably another way of managing the state of the application.

This means when your developers are working on a project there wasn’t a common approach to the state management problem, but now thankfully due to libraries like NgRx, there is.

Another great feature of libraries like NgRx is the dev tools that come with the library. These ‘dev tools’ are features written into the library that take advantage of the wonderful features of a modern browser, by tapping into the tools the browser gives. Tools that allow the developer to really look into what is happening in the application as it runs. NgRx comes with a feature called store devtools this gives the developers the ability to add or amend the state of the application to see how the app handles different states. This is something that was usually done in the QA stage because it was easier to set up in QA. Now a developer can change the state through their browser to see how the app behaves. The better a developer can test how the app behaves at development time, the fewer bugs, the less time an app spend going through the QA process.

So to recap, Angular developers are loving NgRx at the moment, for two main reasons. One it gives them a standardised way to solve the problem of state management within an application, and two it helps provide fantastic tooling for developers to really look into how the application is working.

But NgRx isn’t the only state management library available, there is also NGXS which is another state management library for Angular. This one takes the approach to be more class-based, thanks to classes in TypeScript, than NgRx, which is more function based. Both tackle the same problem of state management, but NGXS has taken what people have learnt from using NgRx and implemented an approach that uses the great features of TypeScript.

If your team are looking at NgRx it is worth adding to your project, it will help your team with providing a common approach to one of the trickiest parts of building a modern web application.

The rise of hybrid and a question by a Mac developer

Recently the great Mac app developer Brent Simmons posted on Twitter “Sometimes it looks like there are people *rooting* for the demise of native Mac apps. Why?”   This started a long thread from various other Mac/iOS developers, all giving their opinion on why this is. Some said it was because of the UIKit which is used to layout Mac apps and how slow it is compared to using web technology others said it was a skills issue. Easier to find JS/Web developers than Mac developers.

What stood out to me about this question, is not the answers, I really don’t know if the APIs used in Mac development is slower than web development or not, what I found interesting is that one of the leading Mac developers was asking why more people are interested in using web technology than native to build Mac/iOS apps.

This is the first time I’ve seen from the other side (hybrid vs native) it’s interesting to see that now native developers are seeing this rise in hybrid apps, or apps built using web technology as a concern. It shows that the growth of developing apps using HTML/CSS/JS is getting more prevalent and Mac app developers are starting to notice this new trend growing.

Does this mean that hybrid app development has won this ‘war’ on native vs hybrid, well no, because there probably isn’t a war between the two sides? It just means now there is another viable option to native development, which a lot of developers are now taking advantage of. Whether it’s because of the latest performance gains in web technology is making building apps with web tech a good option or there are more web developers moving over into app development as well as web development, who knows. One this is that now apps can be developed either the native way or the web way is a good thing. It’ll lead to more opportunities for developers, and better apps for users.

Slack doesn’t replace a forum

Or how Mike Harington from the Ionic team deserves an award.

The more and more that Slack gets popular, the more it is being used as a way of a team who runs a product to communicate with the users of their framework. While initially, a Slack channel is a great way to speak to the team behind the framework, it can soon become unmanageable and just a lot of noise.
The old fashion forum is still the best way for users to get the help they need.

For example, I’ve been on the Ionic Worldwide slack channel for a few years now. Originally it was just a UK based slack channel, but soon it was opened up to the rest of the world. More and more channels within the group started to open. Channels to ask technical questions, ionic questions, channels for different countries. It soon became a massive community.

I was in the slack group today and I was going through the ‘Technical Questions’ channel. In here people can ask questions about apps or the deploying of apps using the new features of Ionic Pro. In here you’ll usually find Mike Harington from the Ionic team. He’s so helpful, always trying to give help and advice to people who post questions.

But going through the questions being asked and how people are using the channel I do feel sorry for Mike. He’s trying to help and he keeps getting people mentioning him directly with their questions, or screenshots of errors posted by people who expect an immediate answer from Mike (I’m sure that helping on the slack is his full-time job).

It’s this demand for an immediate answer is what is wrong with Slack as a way of support. Some developers hit issues, then take a screenshot of the error message and throw it on Slack and then demand an answer almost straight away. They need to spend a bit of time understanding the problem, what is the error message actually saying? Could stepping away from the computer screen for a few minutes help you see the cause of the problem?

A forum allows the developer to write a clear description of the problem (well hopefully) which sometimes by writing out a description of the problem actually helps clear up what the problem is. It also allows others to get involved, Slack is more of a conversational thing than a forum.

While Slack is great for teams working on the same project to communicate, I don’t think it should be used as a way for a community to get support for their own projects.

So do Mike Harington a favour, when you have an issue with your Ionic app, go to the forums, search to see if others have had the same problem and then write a clear explanation of the issue. Then sit back and wait for the fantastic Ionic community to help.

Contracting – Keeping your skills sharp

Being a contracting web developer, you need to keep on top of your skillset, they are what you use to keep employed. So ‘practising’ your skillset is part of the job, which you need to do regularly in order to keep these skills sharp.

But what does this mean to have your skills up to speed? Well, the web industry is so fast, it changes so quickly. New frameworks keep being released, new build tools are appearing all the time. GitHub has revolutionised the way people develop for the web, how they work together and how companies now work.

So if you want to make a decent career as a web developer it is important that one, you know about what is happening in the industry, what new technologies are being used, which ones are sticking around (remember Flex?) and two, you are proficient in your chosen skill set. What you say you know about you know about. The number of times I’ve seen highly paid contractors on a project who don’t really know what it takes to be a solid web application is frightening.

But how do you go about keeping your skills sharp? Well, there are a number of ways, first, if you’re a front-end developer, you can use your own website as a testbed for new ways of building sites. There is nothing wrong with rebuilding your own site over and over. Making it a case study for how you used this new tech. You can also make ‘fake’ example site, make a site for a fictional shop or business. Use sites like CodePen to create examples of how you would use a new technology or way of creating something in HTML/CSS.

If your thing is application development, things are a little trickier. You can’t build a full web application for yourself (unless you want to make a business form it) and host it somewhere as an example app. But thanks to the wonderful Github web app developers now have a place where we can send potential clients or recruiters to somewhere where they can view the quality of the code you write as a web app developer. This has made such a big difference to the web industry.

Of course, there is the whole Open Source movement that has sprung up over the last few years. This is a fantastic thing for new web developers. When I started there was nothing like GitHub, all we did was build small websites and send a list of URLs to recruiters as examples of work. Now developers are finding work through more direct routes, by people finding their open source work.

As a contracting web developer GitHub and open source give you a place where you can put your example web apps for others to look at when they want to check that you have the level of skills they require.

But along with all these new opportunities to show they work you can do and ways that you can practice your skills, there is still a need for focus.

With all the new technologies coming out there is fear of missing out that contracting web developers can get. When your livelihood is so closely tied to the skillset you have when a new technology is release or starts to get popular. There is a fear that this new tech will become more popular than the one you currently specialise in. For example, I work with Angular, which has been around now for a few years (if you include AngularJS). But now React is looking a very popular choice for front-end development. Does this mean as a contractor I should stop using Angular and move to using React? Well not necessarily, while React looks great, Angular for me is still a valid choice. Maybe not all the modern startups are using Angular, but more enterprise companies are. As long as there are support and development of the framework from Google I think it is still worth specialising in the one approach to web app development.

So as a contractor how can we both keep our skills up to date and at the same time make sure we know a technology well enough to be a good level contractor, who is going to build good software for their clients? Well, I think that by taking this focussed approach is the answer. There has been a lot of talk about having a niche as a freelancer. It’s spoken about in many freelancing books and podcasts. As contractors, I think we can also benefit from niching down into a certain skillset. If you can demonstrate that you know your chosen skillset well (though example works on GitHub or contributing to open source projects). You can keep your skill set sharp and relevant, but don’t forget to keep an eye on the industry because it can change fast. All it takes is a letter from a famous leader of a tech company and your chosen technology is killed off (remember Flex? I loved Flex)

Why Types? For JavaScript developers

I’ve been rewatching the Ultimate Angular TypeScript fundamentals course over the last few days. And it’s made me think about types, what benefit they bring.  Before I was a JavaScript developer I did a few years as a .Net developer, using C#. So the concept of types wasn’t completely new to me when I started working with Angular and TypeScript. I was used to the idea of interfaces, and classes. I’d actually spent many years learning OOP, first with ColdFusion and then with C#.

When going through the TypeScript course and with the work I’ve been doing with TypeScript, I was thinking of how I would explain to a JavaScript developer, someone who’s mainly been using jQuery why using Types and in particular TypeScript is a good thing.

As I see it there are two great reasons for Types, first by using types within your code, you are in a way ‘describing’ your code. For example, if you are creating a function that takes in two properties. Normally in JS you’d just past them in, all you’d know is their name, you don’t know ‘what’ they represent. Now with typescript, you can create object/types that describe what is being passed in. No more of this duck typing, where you are just throwing properties around not too sure what they actually are. So the first reason I think types are great is they give you this descriptive nature within your code. When you read TypeScript you know what the types of the properties being passed into a function are.

So as well as this descriptive nature that types give you, the other reason I think Types are such a great thing for JS developers is, by describing your code and creating types you can write code that the JavaScript engine can use to make extremely fast and optimised code. Code that can ‘tell’ the JavaScript engine what things (properties etc) are. The more information you can give the JS engine the better it’ll run.

Now, this isn’t just something I believe, it’s based on a talk I watched on how JavaScript engines actually work. There is a talk by Franziska Hinkelmann at JSConf, where she explains how the V8 JavaScript engine works. In this talk, Franziska shows that by using types to tell the JS engine all about your code the JS engine will run faster, be more optimised. But don’t take my word for it watch Franziska fantastic talk

Attention: Angular Cli Stories

 

The Angular CLI is awesome, using it now makes working Angular a real joy. If you go back to version 1, without the CLI, it’s so hard to get back into the grove of not using it.
What I love about a CLI is how it has been designed to help you as a developer gets on doing your job. Unlike some other technologies, like .Net or Java the Angular Cli helps the developer without getting in your way.
We all know that the CLI helps you create components, services, pipes, modules and other classes we use in Angular. But one of the lesser known features of the CLI is the Stories that are in the GitHub repo. The great thing about these Stories is, they are small reminders for common things you may need to do when working with Angular, but you usually forget the specifics. So instead of trailing through Stack Overflow for an hour looking how to set up Angular Flex with CLI, you have the stories to help.
These stories are written by the Angular CLI team (though I think they can be added to by anyone who puts in a PR), showing you how you can do more with the CLI. For example how you add 3rd party libraries to your project or how to set you CSS processor of choice so every component you create is using that CSS processor.
There is also another story on how to add Bootstrap to a Cli built project. In the work, I do I use Bootstrap a lot for the UI of the web applications I’m developing. So this story is a real help. I can set up any new projects, add Bootstrap, and use Sass. All with a few changes to the .angular-cli.json file.
I think these angular stories are great. For me, they have proved to be a real help when I need a quick reminder of how to do something with the CLI.

The Angular 2018 Developer Survey

Recently Stephen Fluin announced a developer survey for Angular. It’s a pretty short survey, but worth taking part in.

The main question that the survey is asking is what order of importance do developers see these things

  • Tooling
  • Documentation
  • Ease of Updates
  • New Features
  • Initial Load Performance
  • Runtime Performance

I personally think that the initial load and runtime performance are the top two most important features of Angular. The reason for this is clients who want someone to develop an app for them, all they are concerned with is that the application starts quickly and runs fast, which Angular does, but I think the Angular team should focus on getting the load performance of Angular as fast as it can be.

Another question that the survey asks is ‘How else should we improve Angular for you?’. For this, I put that I think the Angular team should focus on showing developers best practices. Now we know the basics Angular now we need to know how to build really good quality, fast applications.

One thing that did come out of AngularConnect this year, was that the Angular team are now focusing on this skill gap. With more talks on advanced concepts of Angular, like pre-rendering, PWAs and performance gains. It’s going to be interesting to see what else the team do over the next few months. Hopefully the feedback on this survey will be published along with what the Angular team plan to do based on the results of the survey.