Chasing your own tail

Working on the internet is great, it gives people around the world a level playing field in which to achieve their goals. A single developer can start a simple project with only a laptop and a internet connection and within a few years they can be in charge of a massive global company. But the internet is also a crazy place with it’s rush to get the latest technology out there, the newest framework, the ideal way to build an app or the latest social network.

As someone who works with the web I find that somedays I am spinning around like a dog chasing it’s tail (which is always funny) trying to keep up with what’s new or to find out how a new technology works. For example here’s a list of technologies I currently have an interest in:

  • Angular 1
  • Angular 2
  • Ionic 1
  • Ionic 2
  • NodeJS
  • ExpressJS
  • Sass
  • Less
  • Firebase
  • Bootstrap
  • Responsive Web Design
  • Mobile app development

Some list, it looks like one of those job ads that list everything but really tell you nothing about the role. This is another list of technologies a modern web developer could look at:

  • React
  • React Native
  • NodeJS
  • Express
  • HapiJS
  • Angular 1 & 2
  • Ionic 1 & 2
  • AppCelerator
  • NativeScript
  • Sass/Less
  • RWD
  • Native iOS
  • Native Android
  • jQuery
  • Ember
  • .Net framework, all of it
  • Git
  • PHP
  • Rails

This is a long list, it’s taken me a whole day coming up with the list let alone spending time learning these technologies.

The problem that the web has is that it’s become a massive marketing playground. Large technology companies are telling developers that there technology is best, that it does everything a developer will want or that the latest version of their technology is coming out with these amazing features.

Then there is social media telling developers about what they should be looking into, what is going to be the next big thing over the coming year. Or which technology/framework all new projects will be built it so you ‘must’ be using this or you’ll miss out. Then there is the recruitment industry that likes to tell developers that their clients are looking for developers who can do this (see list above).

It’s crazy.

I remember when I started working on the web all you needed was HTML, CSS and JavaScript, that’s it. These three technologies are still around, see central to working on the web.

In order to stop feeling like a dog chasing it’s tail (see it’s mad) I need to focus on a few things, Angular, Ionic, JavaScript, Sass, HTML and GTD. By narrowing down what I’m looking, by specialising what I do it’ll make me a better developer.

So now I need to go into my RSS reader and Twitter and remove the feeds and accounts of things I think I should be interested in and just have a few feeds on these technologies and a follow a few Twitter accounts.

The web is great, but it is also crazy being able to specialise is better than trying to learn everything, that’s impossible.

A great book about this is Philip Morgans – The Positioning Manual

Stay on target, stay on target

The other day I was watching the Developer Insights videos on the Apple Developer website. The video that I really enjoyed was the one with Brian Mueller who developers the Carrot suite of apps.

While watching those videos I did start to think ‘ah native development looks fun, building apps for iOS, Mac and Apple Watch. Maybe I should start learning Swift’. So then I started downloading the free books on Swift from iBooks and following Swift accounts on Twitter.

Then another thought popped into my head (my second thought of the day, it was a good day). Do I really need to start learning something new? Don’t I want to specialise in Ionic development? And this reminded me that I should keep reminding myself of my main aim and sometimes remind myself to ‘stay on target’ working towards my main goal of becoming an independent Ionic developer.

Of course I will take on jobs/contracts that may not involve working day to day with Ionic, but as long as the technology I’m using is related then I can’t see this being a problem, if for example I working with Angular 1 or 2 for a few weeks then that still helps. Learning a totally new platform e.g. Swift is not going to help me working towards my main goal.

So I need to set a regular reminder in my calendar to review where I’m at and what I’m doing to work to this goal.

Ionic 2 links

I’m starting to look into learning Ionic2 (and Angular2) so here are some links to articles and resources I’ve been reading about Ionic 2:

Here are some great videos:

These are just a few of links I’ll add to them as I find more. I’d also recommend the Building Mobile Apps With Ionic 2 book from Josh Morony

Building a app part-time needs planning

Recently I’ve tried several times to start working on a side project, building an app. I’ve had several ideas, an app for tracking your Warfarin intake (after getting blood clots I found out how important regular Warfarin is), an app for managing you post (letters not email) and an app for tracking visits to the gym and what you do while there.

All ok ideas, I won’t know until I have a early version out whether other people like them, but I think they are ok and I’d use them.

So far I’ve got no where with them. Yes I’ve started them several times, I’ve create many Ionic template apps ready to start building the app, but this is as far as they get.

I’ve also been working with another developer on a app they want to build. It’s a great idea and will be a fantastic app once built, but what I’ve found is as I can only spend a few hours a day on the app. If the planning of how the app will work is not in place then development will slow to a virtual standstill. I’ve found this with both my apps and this other third party app.

If before development starts things like data structure, screen flows, how the app will handle offline support, how the app will inform the user what’s happening as they use the app. If these things are not planned or at least considered. Then during development the developer is building an app partially blind. Decisions that the need to be made will be decided by the developer as they go. For a side project this maybe ok, but it will slow down progress on the app. You’ll find that you will be rewriting functionality in the app over and over as you change your mind. This will slow progress.

Though you think as you are coding you are making progress, if you are rewriting the same part over and over the app is not progressing. When you see the apps isn’t getting any closer to being ready to launch, your initial enthusiasm for building the app will disappear.

So for my personal side project apps I need to go back to the drawing board (well notepad really) and plan these following aspects of the app:

  • Screen flow
  • Data structure
  • Offline support
  • User messages
  • Features for first version – in order to get the app out there to see if people will use it
  • How the app will be promoted
  • Who’s the target audience
  • Pricing structure – will I charge for it? If so how will that effect the structure of the app

A lot to think about. Some of these can be fleshed out as the app is being built, but having a good idea/plan before starting development will help.

Side projects or part-time freelance work

I’ve been thinking about part-time freelance projects vs side project, and the pros and cons for each.

If you have a full-time job or contract you’ll only have a few ‘spare’ (if that’s actually a thing) hours. So is it better to get a freelance project or spend the time working on your own projects.

If you have a freelance project you are getting paid, which is a plus. It also may building a project using a new technology that you want to get into, for example building a native iOS app or a WordPress theme, which is a great way to get into a new arena. But you are building a project for a client who has their own deadlines and plans for the project. So there is extra pressure to get work done. Those days when you get back from a long day at work, and you know you have to star your second job. You’ll have emails from clients asking how projects are going or asking for amends to the project.

With side projects you do get the freedom to use a new technology you want to get into. You are the client, so you guide the project any amends are your ideas, you decide how the project will go. Once your side project is live you can show others and use it as a way to show your skills in a new technology. The main drawback for side projects is when building them you are not being paid, you may find that progress on the project slowly gets slower and slower until the project comes to a halt. While with a paying project you’ll keep working on the project so you can get paid once it is complete.

Looking into this I’ve found some interesting articles, including this one on the Todoist blog about keeping your side project moving forward. In this article it lists some amazing projects that started as side projects including Gmail, Github and Buffer all very successful projects.

So where do I stand on this? Well I’m currently leaning to the side projects. Because I’d prefer to work with a technology that I want to get further into. I’m sometime a bit lazy so those days I get back from work I may not want to work on a project. It’s a tricky one…..


Directives in Angular

As part of my reading up on Angular, I’ve spent a bit of time looking at directives. These are my notes from what I’ve found out, mainly this post is for my own benefit.

– Four ways to clarify a directive

– Element =

– Attribute =

– Class =

– Comment = <!—directive:person —>

The restrict attribute in a directive will set what the directive can be loaded as

– E = Element

– A = Attribute

– C = Class

– M = Comment – These were setup as a way to get around the problem in early versions of Angular where the browser restricted how many directives could be created

Replace:true means that the template in a directive will replace the HTML element of the directive. So if a directive called contains a element with two input boxes for first name and last name. When the output HTML source is viewed the tag is replaced by the input fields.

Directives that manipulate the DOM usually use the link option to register DOM listeners as well as updating the DOM:

– The link function contains functions that effect the DOM

– Functions that can run against the $scope

– The link function takes in 3 scope, element, attr

– Link functions should have a $destroy event to clear up directives

Isolated scopes are defined in a Directive as scope: ‘=‘. An isolated scope is an object that is specific to that instance of a directive. So for example if you have a directive that has a template containing two input boxes that will show a list of users first names and last names. This directive allows the user to edit the names in a list. So each directive have access to its own scope and they aren’t all using the same scope object. You create an isolated scope so each version of the directive has it’s own scope.

All this information I found on the AngularJS site in the Developer Guide a great resource.

 

 

Continuing my GTD Exploration

Yesterday I wrote about how I was struggling with using GTD and actually getting something done. Like a lot of developers I have tons of projects I want to get done. Personal projects, client work, day to day coding tasks, tasks that you have to complete when running a limited company and all the jobs you need to do at home (family, house, finances etc). So there is a lot.

GTD is aimed at helping you obtain ‘stress free living’ a nice idea, but when you first go through the collection phase of GTD, where you sit down and write out all the things you need to do it looks really overwhelming, this can put you off starting anything.

As part of my getting better at GTD I’ve been watching the Todoist videos by Carl Pullein where he shows how to use the features of Todoist with GTD. His latest video is on dealing with projects that are overwhelming, projects that have a large number of tasks. Through using uncompletable tasks, he sets up stages within a project that tasks for that project can be added. So you can split up your project into more manageable stages. This is a great idea and really helpful.

I’ve also been reading about others who use GTD with Todoist. One article I found was by a JavaScript developer Justin Hill. Who in his article Organising a Life of Learning and Action makes a good point, that people express the desire to be ‘productive’ like we are machine’s just sitting in a factory producing stuff. This is a good point. With the world of start-ups, entrepreneurs, app developers and people who seem to make new products every week. We can easily get caught up in the idea that if we aren’t productive or building something, we’re not moving forward with our lives.

I think the we, as people who work with the internet (developers, designer, freelancers, entrepreneurs) can get caught up in having the best system for managing all the tasks, ideas and content we get exposed to everyday when on the web. For example I think we’ve all used every known task app there is. We all have several social media accounts just sending tons of content our way. All this on top of general day to day living can be very overwhelming.

So I think worrying that the system I have in place for managing the tasks I need to do is just adding to the problem or having so many things to do. GTD’s main aim is to provide you a way of taking all that is floating around in your head and getting it written down. Then you can sort through it when you have time and using the technique shown by Carl creating projects that aren’t overwhelming seems a possibility.

Getting Sh*t Done

For the last few months I’ve been trying to get on with GTD, I’ve read the book, watched videos on it, read hundreds of blog posts about it, but I still can’t seem to get into it to using it everyday.

Like a lot of freelancers/contractors I have tons of ideas like, creating apps, learning new technologies as well as all the day to day tasks you have like getting the car cleaned, finding a gardener etc. 

I also want a way to create tasks for each thing I need to do as I’m coding. I like the idea of braking down a piece of functionality I have to add to an app into small tasks. So I want a lot from a task management system.

I’m currently using Todoist as my task management app and it’s great and very flexible. But getting things done does not seem to be happening. So I’m currently going through a reevaluation of how I use GTD and Todoist. I’m going to create a project that will contain the 3 goals I have for the upcoming week. Also I’m going to create time slots in my calendar for when I’m going to work on something. 

I do think that having due dates is a waste of time because if you miss one then every time you look at your task app it like its nagging you about something you might not have the time to get done that day. 

So to recap I want a way of 

  • Keeping track of things I need to do that day
  • Get moving on projects I have for both myself and clients
  • Write tasks I need to do as writing code
  • Remember the things I need to do around the house
  • Odd jobs that need to be done, calls to make, emails to read 
  • Working towards main goals

I do expect that the problem is not so much GTD but how I’m using it. I think more research and trial and error is needed.

Halfway through 30dwc

 For those taking part in the 30 day writing challenge, we are now half way through according to Marc, who started off this challenge.

So far I’ve been enjoying the challenge it’s been good to take a challenge of doing something every day for 30 days. Forcing yourself to write a blog post, to come up with a subject and get a post written each day has been a challenge.

Some people has made writing a post as part of their morning routine. Some people have been writing large essays, I’ve decided to go down the route of having a mix between longer posts and small micro blogging posts. I’ve also tried to have a theme for my posts from being a contractor to indie development.

It’s been good to have a challenge where you have to do something every day. It goes to show that if you want to pick up a new hobby or habit a 30 day challenge is a good way to start something new. 

Job Hunting as a Contractor

I’m currently in the middle of job hunting for a new full-time contract, which is itself a full time job.

When you are between contracts you think ‘ah, I will spend the time doing things you meant to get done around the house’ but in fact you send all your time job hunting and these jobs around the house don’t get done.

The reasons that job hunting is like a full time job are, one you spend a good part of your day on the phone talking to agencies. Some of them want to discuss a role they have with you, to see if you are suitable. Some just want to see what you have done, what type of roles you are looking for incase something comes in and they know that you are able to do this role and they can put you forward for it. Sometimes they are just trying to find out who you use to work for or who you’ve been speaking to in order to see if they can also contact the client and see if they can get someone in there.

Generally agencies are ok to work with, you need them as much as they need you. So having a good relationship with the agencies is important in contracting.

After your CV has been sent to a client, they have reviewed it and you manage to get to the next stage. There are generally two types of next stage, either the ‘technical test’ or the ‘telephone’ interview. These two types of first stages in the interview processes are a lot more popular in the contracting industry now, than they were a few years ago. I think this is due to so many unqualified contractors getting through to a face to face interview. Whether this is due to them lieing on their CV (something I just done understand, if you haven’t got experience in something don’t lie about, either don’t appy for roles that require a certain skill or spend time building something open source to show you know it).

Anyway the technical test, this is usually when you are given a problem to solve and you need to write some code in order to provide a solution to the problem. Now agencies aways send you this test, and they usually say ‘it shouldn’t take longer than (insert small time period here)’. This is fine, but they are not developers and so they are probably not thinking about all the things that you are, how best to structure your code, how to show best practices, what approach will you take, are there issues like cross browser support you need to consider, is the problem to make something responsive? If so what screen sizes should you test against. If you have to access an API, what about checking for access to the API, what if no data comes back. There are a lot of things to consider when writing a solution to a technical test.

While doing this test you are probably still getting telephone calls from other agencies and you have to schedule the time to get the test done. This usually means, getting away from the family, finding some space on your own and focusing. While always remembering the famous last words of the agency ‘it should only take a few hours, can you get it done this evening’.

If you aren’t given a test, but instead get a telephone interview. This is so the client can ask you a few technical questions to make sure you know what you are talking about. And they can see/hear that you know something about a technology they use. Telephone interviews also have their problems. First of all if you have a bad connection (thanks Vodafone) it doesn’t sound to good if you keep going ‘can you repeat that please’. Second if you speak at the same time as the interviewer, you get this awkward pause where you both wait for the other to start talking again. So the flow of the conversation can get broken, but when there is a good flow to the conversation then the interview is (hopefully) going well. If you can clearly explain how a technology works or what work you have done and what problems you’ve solved then it shows you know what you are talking about.

With conversations with agencies, sending off applications to job sites, technical tests and telephone interviews job hunting is indeed a job in itself. You are basically becoming a salesman for your contracting services. So all you web developers out there who never wanted to be in sales, unfortunately you will be when job hunting.