Why write


There has been a big discussion in the Inline slack group about the 30 day writing challenge. The main theme of the discussion was about how some people are finding it hard to write something every day. It was a good discussion because finding the time to sit down and write something does take commitment and planning.

It did make me think about the reason why people write, why do some people manage to write a blog post without fail, day in day out.

There are a number of reasons why people write regularly on there blog, one to build up a following in order to promote their business. The other is because some people just love writing, they love the creative process that writing provides.

If you are writing for the simple reason that you love writing and love the creative process, then worring about how many people are reading your posts doesn’t matter. Even the quality of your posts shouldn’t matter. Just getting something out there is the more important thing.

The cool thing I find out about the 30 Day Writing Challenge is that taking part has forced me to get into habit of writing. I don’t care about writing top quality blog posts, but instead I care about practicing writing a daily blog post.

30DWC Week 1

First week of the 30 Day Writing Challenge is up, so far doing ok, I managed to get a post out everyday. I haven’t set any plans to write for at least 30 minutes every day, the main goal I had was to get a post out which so far I have.

For this years challenge I decided instead of just writing whatever came to mind, I’ve tried to have a couple of theme subjects to write about. They are learning NodeJS and updates on an ExpressJS app I’m working on, but now into the 2nd week I think these may change.

The reason for the change is one, the project I’m working on at work may switch to using Angular 2.x from Angular 1.x, so I will have to spend a bit of time outside work brushing up on Angular 2.x. This means my plan to focus on Node for the next few weeks will have to wait. Unfortunately this is the way contracting can be at times, you need to have the skillset for the project. As we could be mirgrating to Angular 2.x I’ll need to know about migrating an Angular 1.x app than I will ExpressJS.

The other topic I have been enjoying writing about is productivity and Todoist. I’m a big fan of Todoist and I’m always looking on ways to use it in order to improve how I work and how to use Todoist to work towards the goals I have, both business and personal.

One think I have found this year is that by having themes for your blog it makes it easier to come up with ideas of what to write for a post. I’ve also written a list of blog post titles for the 30 days of the challenge, this has helped when it comes to writing a post. I look at the list of titles pick anyone I think I can write about and get going.

Anyway week 1 is done and I’m enjoying writing for the blog again.



Using Todoist to manage software development

I’m a big fan of Todoist as I’ve already mentioned but one area it does fall down on for me is how to manage software development projects within Todoist.

Normally a software project is managed in a team with tools like Jira or Trello with their column approach. These are both great products (some people aren’t the biggest fan of Jira, but I think it’s ok). It is going to interesting to see what affect Atlassian has on Trello now that they own it, will they move Trello into Jira?

So while I’ve found Todoist a fantastic tool for my day to day tasks, I’ve always struggled with it when it came to managing any personal software projects I had. The column approach that Trello and Jira give really help set out what tasks you’ll need to do, what ones are in progress and which ones are complete.

The answer to this I think is the use of filters and labels, both of these features in Todoist can really help you set up a project with views of how the project is going.

Thinking about it when working on a software project there are a few things you need to see:

  • What tasks/features need to be implemented
  • What features are being developed now
  • What needs to be tested/review
  • What is waiting on someone else
  • What is complete

You can set this up by first creating a Project, then add Labels for the various states of the project and finally create filters to give you the different views you want of the project.

So for example I may want to create a project for building a new mobile app

Then I’ll create some new Labels for each ‘column’.

 

I’ve given them all the same colour to make it easier to see them connected. I’ve also created one for the Project name (My_Mobile_App) this is so I can add that label to each task as well as the state of that task. Finally you can create some custom filters to give you an over view of the project. Filters like

  • @My_Mobile_App & @Feature
  • @My_Mobile_App & @Feature & In_Progress
  • @My_Mobile_App & @Feature & For_Review
  • @My_Mobile_App & @Feature & Signed_Off

With the labels and filters in place you can setup a great overview of the project. Another great feature of Todoist is you can invite others to that project. This can either be others working on the project or the client themselves who can get a view of how the project is going.

 

Todoist and tackling big projects

I’ve been a Todoist user now for over a year, I’m a fully paid up Premium user and I can honestly say I use it everyday. I put everything in there, things I need to do (obviously) links to sites I want to read, list of things I want to buy and places I want to visit. That’s the beauty of Todoist is that it is so flexible, and easy to use.

For the last few months I’ve been trying to implement a GTD approach when using Todoist. The video series by Carl Pullein has really helped me in the way I structured Todoist for GTD.

The setup I have is really quiet simple. I have the inbox where everything goes into, using the quick add feature of Todoist helps with this.

You just open the panel using CMD+Shift+A and enter your task in the panel, it then goes straight into your inbox.

Then I filter any tasks into their appropriate project. I have my projects divided into:

  • Personal
  • CGCSoftware
  • Professional (usually client related tasks/sub-projects)
  • Checklists (things I need to run through and check e.g. things to buy, books to read)
  • Someday|Maybe (an archieve for projects I may get to)

There are two main problems with my GTD implementation is that I’m terrible at doing my weekly review and the daily review isn’t much better. I keep forgetting to do them or when I do remember it’s usually in the evening when I can’t bother.

This means that the tasks in Todoist aren’t always working toward a gran plan. They are usually things that I need to do quickly, but not tasks that need to be completed on the way to achieving some great plan that I have.

This has led me to thinking of implementing a more Zen to Done approach as described by Leo Babauta. This approach means that as well as recording all the things that you think you need to do, you also set 3 most important tasks of the day and defined some ‘big rocks’ for the week. These rocks are the big tasks that you need to get done during the week.

Now ideally all these big rocks and most important tasks should be aligned with your overall aim of what you are trying to achieve. Things like releasing new website, or developing that new app or even getting weight down.

Carl Pullein has written a great article on the topic of getting your goals aligned in order to achieve great success:

Another great article Carl has written is about how to plan these goals, using the ‘what, why and how’ technique. The idea is for each of your goals you set out what is the aim of this goal, why do you want to achieve this goal and how do you plan to achieve the goal. For example if you goal is to build a freelance mobile app develop business (see what I’ve done here). Then you write out what your goal is:

I want to freelance as a mobile app developer using the skills I currently have as a web developer to build cross platform apps for my clients.

Then you set out why you want to achieve this goal, what is the motivation behind this.

I want to be a freelance mobile web developer so I can work on projects that I enjoy building (mobile apps) using the technology stack I enjoy using. In order to have a business that can support the lifestyle I want to achieve, which is freedom to work where I want and how I want. To have more control over my career.

The final part is the most important. The ‘how’ section is where you list the steps you’ll take to achieving this goal, for example:

  1. Build example apps to show skill
  2. Blog about mobile app development
  3. Use social media to reach likeminded people and clients
  4. Attend meetups to make contacts within the business

Now these steps can then go into Todoist as tasks. Each one being a big rock that you work towards each day. Each rock can be broken down into more manageable tasks where at least one of them is one of your most important tasks for the day.

Carl’s post on this goes into more detail about how to set this up, it’s well worth reading.

With the flexibility of Todoist this approach can be achieved, but the weekly and daily reviews need to be carried out, which is up to the individual. No app can help you do this.

 

 

Small update on Contacts Manger app

Progress on my Node app has slowed a bit, maybe it was a bit nuts to think I could blog everyday, build a complete Node app and work full time.
So far I’ve just got the basic shell of the app, nothing more than the app.js starting file. Not much more further on from my last update.

I’m going to change my plan slightly instead of building a complete app through the 30 days of the writing challenge. I’m going to study Node for the 30 days, write about what I learn. Then when near the end of the 30 days I’ll be in a better place to get building my app.

The first thing I need to do is go through all the EggHead IO videos there are on Express. I’ve watched them before while on the commute home, but I have sat down at home, watched them and made notes. This will really help with me understanding routes.

I think I understand the concept of them and how Express uses them, but the syntax for writing them alway alludes me. Re-watching the videos, making notes and practicing writing the routing of my app will help.
Training Materials for Node

For my 30 days of Node I’ve been using a few training resources in order to learn Express. There’s EggHead.io they have great videos, all short and available to download (if you sign up) so you can watch them offline e.g. on the train. Their Getting Started with Express course by Ben Clinkinbeard is fantastic.

I’ve also watched their Introduction to Node: The Fundamentals by Will Button is also a great video series they do.

I’ve also got a few books to read, these are:

There is also a Gitter group which is going to be really helpful. So there’s a few resources, but nothing beats just jumping in and trying to build something and then finding the answers the problems you come across as you go.

Update on ContactsManager app


As part of my 30 days of Node I’m building a ExpressJS app that allows you to create, edit and save contacts. I’ve been working on this app for a couple of days, not really got too far just managed to get the the package.json file and an Readme file setup. In the package file I’ve got the Express framework and Nodemon all setup, along with the very basic app.js file setup.

I know there is the Express Generator tool which would set up the core of an app, but as this is a project for learning Express I think it’s better to start adding the bits of the project, bit by bit. Instead of letting a tool setup a project with all these parts (views, routes and the core app.js file) and then wondering how it all works. I think it’s better to setup parts of the app as I go and learn how to implement them. I think tools like Express Generator are fantastic they can help you get a new Express site setup and running in minutes, they really have their place.

I mentioned earlier that I’m using Nodemon with this project, the reason for this is because the main drawback I see using Express is that you have to keep restarting the server after each change in order to be able to see the change. It can be annoying and I know that there is probably a NPM package I can install that gives me live reload (which is awesome and something that I wish I had back when I started building websites in the late 90s). So for now I’ll use Nodemon to monitor my app for changes and then I can manually refresh the site to see the changes. This isn’t perfect, but better than having to restart the server after each change.

Anyway my project is on GitHub, as this is what all the cool kids do nowadays. My next task is to start looking into how to create views and routes. How routes work and how they can load a view.

How Node compares to other web tech I’ve used

I’ve been looking into Node and Express, getting ready for my learning Node month, and I’ve started to compare Node/Express with the other web technologies I’ve used in the past.

Over my career I’ve used a few other web technologies including ColdFusion, .Net even classic ASP a wide variety of approaches to how to build a web app. All of them are server side technologies unlike Express which is client side. Now I have done a lot of Angular and JavaScript work over the years but I see Express as filing a different niche than Angular. For me Angular 1 is really client side, while Express is more of a full-stack approach to building a web app.

If you look at something like the MEAN stack Angular is used for the client side JavaScrip, Express is used for the middle ware part of the stack, being used to connect to the data layer (Mongo) and providing APIs for the client side (Angular). This reminds me of the old sites I use to build with ColdFusion where I’d write ColdFusion Components and ColdFusion tags to connect to the data source and serve this data to the client.

The reason I like the approach Express takes is:

  1. Its lightweight, doesn’t insist that you do everything one way
  2. Its JavaScript across the stack, both client and middleware
  3. The use of one language across all parts of building the web app

For me Express is building full stack web app as I use to, but using modern technologies. I’m sure I’ll find a lot of similarities between my old way of building web apps and using ExpressJS.



Plan for learning NodeJS

How do I plan to learn NodeJS over the next 30 days? Well obviously you can’t learn all of Node in just 30 days, but you can learn how to use Node in build a decent web app.

So my plan is simple I’m gong to build a web app using Node, I mean as Chris Coyer says in order to learn to about the web then ‘just build websites’. I’m going to use ExpressJS as the framework I’ll use to build my new web app.

The app itself is going to be a ‘contacts manager’ where you can add, edit and delete contacts. An app like this will, I think, give go overview on the Express framework. How to create views, how to manage actions, how to write Middlewares, how Express handles routes and finally I can also look into how to connect to a datasource (Mongo).

Building this app gives a great overview of how to use Express.

I also have an EggHead account and they have a few Node views and these complete courses:

I also have some a few Node books to read:

Plenty to read, watch and do over the next 30 days.

Finding Your Passion

I recently watched a video by Sean McCabe about finding your passion (seanwes tv: How to Find Your Passion). In the video Sean says ‘we shouldn’t think of trying to find what you passion is as going off in another direction from what you are currently doing, but instead think of it as a starting line where exploring each idea is like moving forward from that starting line’.

He continues to say by moving forward off this starting line and exploring an idea that you feel might be what you are passionate about, you are discovering what really is your ‘passion’. You may find that after a while this new thing isn’t what you are passionate about, you may not like it, but at least you’ve explored the idea.

This idea really resonated with me because for the last few months I’ve been trying to decide whether to stick with the ‘technology stack’ I’ve been using for the last few years (Angular, Ionic and general front-end development) or explore the world of NodeJS, but the thing that has been holding me back is if I starting getting into a new stack, it might mean that the work opportunities open to me suffer.

As a contractor the amount of experience you have in a technology helps. When clients are looking for someone with x amount of experience and you don’t have that many years it does mean that you can’t be put forward for the role, the recruitment agency won’t put you forward for the role as they see you don’t have the require amount of experience. Even though you maybe the most knowledgeable developer on a new stack that you have only been using for the last year. CVs get scanned through every quickly and if you only have a few months experience you could find your application doesn’t go any further.

But I am really fascinated with NodeJS, I think the types of projects you can do with Node is amazing, (web, mobile, desktop, server side, even robots). The NodeJS community looks amazing, so helpful and welcoming to new Node developers.

Anyway after watching Sean’s video it made me think that by learning Node I’m not going off in another direction from what I’ve normally been doing, what I’ve been making my living off. Instead I learning, I’m moving forward.

I may find I don’t like building sites/apps with Node, I may also find that it makes me a better developer, it gives me more opportunities and more experience. Experience I can bring back into the mainstay of my career.

So if you have something you want to try, but you feel it is moving away in another direction from what you normally do, remember it really is just moving forward.