Matthew Lang avatar

Go to them

Cultural Offering takes it a step further with his advice about connecting:

Go to them. When you are not happy with a business experience, don't tweet your disdain, go to them and explain the problem. Then ask for a resolution. Not happy with your grade on that paper? Skip the snarky Facebook status and go to them.

Go to them by Cultural Offering

There's more to programming than writing code

Another thought from episode 95 of the Ruby Rogues podcast had me thinking about just exactly what I do as a programmer. Yes, most of my time is probably spent writing code, but there’s one big aspect of being a programmer that is often over looked. Problem solving.

Most programmers write code that will end up solving a problem. Whether it’s a small web product or a large ERP platform, the code that we write as programmers usually has a single aim. To solve a problem. Solving problems doesn’t start with code though.

First you must understand the problem you are facing. You must be familiar with the domain language of the problem and understand why the problem is occuring. I like to visualise the problem I am facing. Sketching out the problem in a mind map or even as a flow chart for is always a first step to understanding the problem. With a visual aid of the problem you might recognise solutions that you have previously implemented or even gaps in the problem that require further knowledge.

With the problem now understood, you then set about providing possible solutions to the problem. One solution isn’t enough though. It’s highly unlikely that the first solution you think of will always be the best fit for the problem. I always like to try and come up with at least three solutions to a problem if I can. If I am stuck for solutions then it I like to implement the easiest solution to the problem that will work. Okay it might not be the best solution, but it is a solution. In time, a better solution will present itself, but I think it’s best to at least start with some kind of solution.

Problem solving is just one part of a programmer’s day, but it is an important one.

Being a team player

Episode 95 of the Ruby Rogues podcast got me thinking about my previous roles as a developer and how I interacted with my team.

It’s interesting that of all the roles I have had in the last 10 years, I can only count one of them as being a true eye opener in terms of team interaction. My role in an recent team, although short, was the most positive experience I have had.

At the start of each day the team would gather for a daily stand-up where we would go over yesterday’s progress and do a quick overview of what’s in store for today. There was some chat at the start about the latest designs on Qwertree and football results from the previous night. Just enough of an ice breaker for everyone to get comfortable and then commence the stand-up meeting.

At the end of it, everyone knew what they were doing for the day and what everyone else in the team was doing. There was no negative comments on anyone’s part, and if anyone one member of the team had a problem, the rest of the team tried to provide quick suggestions as solutions.

Positive team interaction didn’t stop there.

During the day, we would frequently pair up with another developer to work on a task until it was complete. During this time a high amount of interaction took place between the different pairs on the team for that day. Sharing ideas for problems, learning from one another's coding styles and of course the odd jibe at your preferred text editor.

Team interaction was always high during this time. It was great to see developers sit down together, regardless of level of experience, and move the development team’s project forward by quickly completely the task they were assigned at the start of the day.

I only worked with this team for a short period of time, but it was the most positive example I have seen of a team enforcing positive team interaction. Those readers who are aware of agile practices will immediately see that the team I am praising is in fact a team that uses agile practices.

The amazing thing is that they aren’t doing anything that isn’t achievable by many other teams who have poor interaction and communication amongst their members. All it takes is a change of attitude.

Wishlist Wednesday - Less choice

I'm in the market for a new iPhone case. There are hundreds to choose from. I mean hundreds. There's too many to decide from. Competition is nice in business but as a consumer, sometimes I want less of a choice. Less choice means I can make a decision faster.

Comfortable tools

Software developers love their text editors. Those developers that invest a significant amount of time in one particular text editor are able to wield it with the proficiency a level 20 warrior. They’ll slice and dice the code with the mininal number of gestures needed. They have all the commands they need memorised right down to the last keystroke combination. Text editors are the primary weapon of software developers and so they need to know how to this tool with great effect if they want to make their day a productive one.

I chose Sublime Text 2 as my main text editor a couple of years ago. I just find it easy to work with. I know the commands that I need, I spent a fair amount of time getting the right plugins and setting them up so that they work well for me and of course I’ve tried hundreds of themes before getting the one that just feels right. So if I’m so happy with my chosen text editor, why the hell do I keep wanting to try another tool?The other tool I am referring to is Vim. It’s a text editor that is used by thousands of people and is over 20 years old. Every year, I ask myself, “Did I give Vim enough of a chance?”

I’ve tried Vim a few times as a replacement for Sublime but every time I try it, I find something that I don’t like and go back to Sublime. Fast forward a few months and I do the same thing again. For the last three years, I think I’ve tried Vim about five times. I’m not talking about a couple of days, I’m talking about a full on month of use. However, at the end of each month I simply switch back to Sublime. Is it a comfort thing? It might be.

Vim is a great text editor but I just don’t feel that comfortable using it.​

To categorise or not?

I’ve been blogging on and off for the last few years, but more recently I’ve been publishing something just about every day. Whether it’s a little bit of writing or a nicely built fixie, I’m publishing something every day. When I started blogging, I was fanatical about categories. I categorised everything. Everything had it’ place. Now though, not so much.

My tumblelog has a number of categories in it, but these are because the posts I make here are themed. On certain days of the week, I’ll post something in a particular context, Fixie Fridays for example. Categories work for this example because it’s part of an ongoing series of posts.

Since the start of the year I have published a little bit of writing every week day. All of these posts have been filed under the same category, Personal. As the writing varies from day to day I find it hard to file it under a specific category. From tomorrow I am just going to stop categorising my writing. Why pigeon hole something when it won’t fit? It’s one of those small decisions that I can do without.

Are you automating?

Automation. The programmer’s best friend. Programmers automate as much as they can. Setting up a new computer, building servers and testing software are just some of the areas where we like to automate things. We hate typing in four commands where one will do. Automation saves so much time.

Not everyone is a programmer though. So how can you automate your interactions with your computer so that you’re not doing as many manual tasks?

Check your application settings

Lots of applications and services now integrate with other applications and settings. Instapaper for example allows me to save the articles that I like to my Pinboard account. After I set this up in the Instapaper settings page, I can then like an article and it will be saved to Pinboard for me. This is just a small example of the automation you can achieve. Baked in settings to applications is great but what if you want more automation?

Checkout IFTTT

IFTTT is a service that allows you to create recipes for the different services that you use. It will then run these recipes when they are triggered. Each recipe contains a trigger and an action. When the trigger is fired the respective action is carried out.

An example of this in action is the
monthly redux blog post that I put out at the start of each month. It is a list of the previous month’s blog posts on my blog. Rather than writing this by hand though, I can let IFTTT do the work for me.

When my recipe detects a new item on my blog’s RSS feed, it then writes the title of the blog post and a link to it to a text file in my Dropbox account.

At the end of the month I cut the contents of this file and paste it into my blog’s content editor and use it as the content for my new monthly redux blog post.

In order for IFTTT to work effectively, it needs to have access to the services that you use. You may not be comfortable doing this, but I find that it’s a great way to automate tasks that I would normally do by hand in the past.

Being able to defer manual tasks to services that automate them for you saves you time. Not only that, it lets you get on with more important tasks. This week watch out for manual tasks that you could be automating. Even if you can save a few minutes off your day, it’s going to add up over the year. And that’s time not wasted.

Talk to your client

One of the greatest challenges I’ve had in my career as a software developer is that of expectations. Twenty years ago when the waterfall methodology ruled, you developed in isolation for months on end, passed it to a test team and then onto the client. After months of work, it was common to get the final product passed back to you. The reason was that the client’s expectations were not the same as yours. Months of work wasted.Now though, we have agile methodologies that allow us to work closely with the client and work in much smaller chunks, delivering code weekly or even daily for the client. At this fast pace it’s easy to meet the client’s expectations as we are only working in smaller periods and only delivering smaller sections of the final product for the client.

I’ve been working this way for a couple of clients over January and February and it’s been really successful but the reason isn’t just the continual delivery of features and fixes for the client, the main reason is that I am always in communication with my client. I chat to my clients daily, often more than once a day when working with them.Foggy details are a sure fire way to miss the clients expectations, which leads to wasted time for both you and your client. You can’t assume to know what your client will want, but you can make an educated guess. However, what you should be doing is talking to your client and clarifying any details you are not sure about.

If I have a question or I’m not sure, I ask the client to clarify their expectations on what I am hoping to deliver for them. I hate to be wrong and I hate to be wasting my clients time by not meeting their expectations.​