Thursday, 28 April 2016

Thinking about Software Development: What is my next step?

I have been reviewing the last quarter as part of the review process we have at work. I am not against reviewing as often its good to revisit things and see where things can be improved and reflect on what went well.

I have found during the last quarter that, maybe I am not as good a software developer as I thought I was.

Let me try to explain, I know, I can code. If someone gives me a coding problem I can code a working solution in next to no time at all, in my most successful projects in my career I always worked as the most junior (in terms of experience) team member. My job was to get in, code up the issue, test it and then check in.

After that, I was done. I was a "grunt", get these tasks done and then my work is complete and I enjoyed this. It was a simple life and I knew exactly where I stood.

Recently, I have taken more of a "lead" role on the project I am working on. At first, I just did what I always have done. Identified the problem coded it and then left it, but hang on, what about deployment, operations, setting up relevant accounts and permissions etc. I was like, "Oh, what's this?". I knew this stuff existed, but to me it just worked or rather, someone else did it. 

This stuff in the past quarter has caused me to question many things about the job that I do. I have been learning lots of stuff but it got me thinking what should a good developer know especially those in more "senior" roles?

I became a senior (mainly) due to my "technical" skill, I fixed a lot of bugs and implemented lots of features many of which are still in use today, but am I really a "proper" senior? I mean, before I started this current project I knew very little about how the systems, I had developed in the past were deployed and operationally maintained.

This has lead me to ask the following questions:

What should a good senior developer do and/or know? 


Is it just about the code? Where does my role and responsibility start and end? Does my responsibility end once I have tested the code, checked it in and built it? This somehow doesn't feel right but then I have found I am spending more time setting up all the infrastructure around my software rather than developing it and that somehow doesn't feel right either. 

I am sure there is a balance here but I don't have too much idea what it is? I know good development is a team game, and I want to be a team player but the best teams work when people know what their job actually is.

I used to think I knew but now I am not so sure. The lines and expectations I had before are becoming more and more blurred.

How does "DevOps" fit in?


I have not answered this yet: how can I make the DevOps culture/idea/concept work for me? Or rather, how I can use it to make the projects I work on more successful.

I feel that I have not used the experience those guys have to the full in the last quarter. I am not entirely sure why, I don't know what questions to ask. I know those guys are very busy, so don't want to waste their time with "daft" questions. Actually, I am a scared I might look "daft" for not knowing this stuff.

As we will talk about next, how do I know, what I don't know?

How do I know, what I don't know?


Ok, lets say I am responsible for everything that goes around the code. Deployment, operational monitoring etc. How do I know what is best? I know nothing about any of this stuff, when you ask different people, they give you different answers.

I have found that problems that occurred when trying to deploy at certain points were caused because of issues that were not foreseen, or even problems caused by the different infrastructure setups on the different environments. That again, I wasn't aware of.

With this in mind, part of my job is to provide an accurate estimate, how can I estimate something I don't know I even needed to do? Never mind how to do it?

Summary


The issue here is that I maybe should have been more "interested" in these things but I was spending my time been technically as sound as I could be, learning a wide range of technologies, frameworks and so on.

It's not that I don't care about how to deploy and monitor the software I write. It is useless if no-one can use it but it just hasn't been my focus.

It does sort of feel I have taken my "eye off the ball" but I really enjoy coding and don't fancy spending 85-90% of my time chasing up infrastructure, writing operational guides, documentation etc. I have found recently that this is what has been happening, some of this maybe down to my lack of knowledge and experience, or it could be normal. I just don't know!

It seems that to make that step from "grunt" to "lead" [suggestions for better descriptions welcome] I need to figure out these questions otherwise I might just remain confused about what my job actually is.

That is why I wrote this post, does anyone out there have any advice to offer? You can't give me the answer as I need to figure that out for myself but a little help goes a long way!

Saturday, 2 April 2016

The road to 1000 trophies!

I haven't blogged for such a long time but I suddenly have the urge to start again. To be honest, recently I have neglected many important things to me such as my fitness as those who know me will testify. This blog was focused on aspects relating to my career, to be honest things are going well at the moment and moving forward well there is nothing to really "rant" about or comment on. 

I feel the direction of travel is overwhelmingly positive and long may that continue!


Spring Time is here...


Spring is the time of new beginnings new growth and it is one of my favorite times of year. The gloom of winter is past, the evenings are lighter and the crown green season begins! I am really, looking forward to this season having had a full break since Christmas from all bowling.

However, this blog post isn't about getting fitter or winning bowls matches. 

It's actually about a new found hobby of mine, shared with my girlfriend, gaming on my PS4. I didn't really play too many computer games before I met her and I was more of an XBOX guy but she owned a PS4 which I played. Call Of Duty: Black Ops 3 mainly and I was like, I have to get one of these so I did as its nice to have a shared hobby and interest.

I played this game to death and completed it on the hardest setting (after multiple deaths and alike). I then started playing FIFA16, a game which I love as I am a huge football fan but the girlfriend's interest stops when I play that as sadly she isn't a football fan. I then realized that PSN (PlayStation Network) has a trophy system as I was winning many of these trophies by just playing and I was hooked! 

I love collecting trophies when playing the games. Sometimes, I will do things on the games just to win trophies! (I know, its sad. I will seek treatment, later) On a recent week-off I had a goal to win a trophy a day but I ended up winning 30 trophies in that week! Including, a platinum!

Since Christmas (2015) I have won 182 trophies on 6 games (GTA V, FIFA16, Worms Battlegrounds, Call Of Duty: Black Ops 3, DriveClub and Rocket League). Of these 184, there are 115 Bronze, 47 Silver, 18 Gold and 2 Platinum's (Rocket League and DriveClub).

Hunt those trophies (there are some rules)


I thought, lets blog about my gaming aim. Get to 1000 trophies! 

Sad I know, but there is something about it I find really interesting and addictive. Now have bought a 50' television there is something cool about playing games on such a huge screen in my little house!

There are some rules I want to apply:
  1. I will only buy/borrow games I want to play. I will NOT buy/borrow games purely for the trophies. I have read some people do that and to be honest, I think that is going a little too far.
  2. For every 5 kg in weight I lose (until a certain point, which is private) I can buy a game. So, to complete this goal I will need games and to get games I need to lose the excess weight I have put on since Christmas.

Let the games begin....Only 818 trophies to go!

Wednesday, 27 May 2015

Simple Git Glossary for a TFS guy!

The purpose of todays blog post is to provide a glossary of terms (based on my own understanding) that help people (such as myself) who have started using Git but previously used TFS.

I have also thrown in some SourceTree words too as I am using that as my Git UI.

If you are completely new to Git then check it out here. SourceTree can be found here.

SourceTree Terms


UNSTAGED - a working copy of files.
STAGED - files that are ready to be committed.

Git Terms - TFS Terms 


CLONE - Create Workspace/ Get Latest
CHECKOUT - Switch Workspace/ branch
COMMIT - Check-in/ Shelve
(NOTE: In Git, you ALWAYS "COMMIT" to your LOCAL BRANCH)

STATUS - Pending Changes, this will show all modified files that have not been "PUSHED"
PUSH - Check-in, sends local commits to remote repository.
PULL - Get latest, this will get all commits made by other people to the remote repository.
BRANCH - similar to TFS except in Git it is really nothing more than a particular label on a given node. Unlike TFS it is NOT A PHYSICAL COPY OF THE FILES!

Hope these terms help you with understanding Git from a TFS perspective. These were just notes I made whilst I am learning how to use Git.

For more detailed help I did find the following links helpful:

Tuesday, 3 February 2015

"Look after the pennies and the pounds will look after themselves"

I hope this post will act as advice and even a warning to new developers starting a career in development or even experienced developers who might be able to relate to some of the points. 

The main point is that good product development is about taking care of the little things one at a time, they can add up to big things, or to put it another way:
"look after the pennies and the pounds will look after themselves*" 
 * other currencies are available


Now to many this is a statement of the obvious, but to me during my career to date it has not been obvious.

Let me explain why.

During my development career, I have always wanted to showcase my technical abilities. I wanted to show my employers and others that I have a good understanding and grasp of technical basics and I can apply this to almost anything I put my mind to.

I always wanted to be right and to "win". To show I was the better developer and in fact it made me look a right clown! I always thought, they should put me in charge and I'll show them how proper products are developed! I would come up with some grand plan, "Lets rewrite project X with technology Y" or I would comment on areas that really have very little to do with me, again all in the hope of wanting to make a good impression and demonstrate knowledge. This caused some problems, often I got involved in areas that are really beyond my "Circle of Influence" and my "Circle of Concern" (Google it!). This can come across as meddling, argumentative and maybe even disruptive. Often, I would be trying to swat a fly with a machine gun or a tank! Just to prove to others I could do it, to prove myself.

To any junior developers (or anyone else) this can hurt your career, big time! It can also make you unpopular as no-one likes a "smart arse". I don't think (in my case) it got to the point where I became unpopular with my colleagues, may of whom I consider friends but I would suggest they found it annoying at times. Once you get a reputation for this it is very difficult, if not impossible to shake off. Also, it actually really stupid when you think about it.

You will read many blogs about what Joel called the "Rockstar" developer. I always thought I needed to become one of them. I thought that companies needed such geeky micro-celebrities in order to do anything. I have learnt that these people do exist but there are not many of them! What you find is that when they are working on something they are interested in they are erratically brilliant but frankly hopeless at working at a consistent pace or smoothly within a team.

In fact, I'll go further, their attempt at superiority is aspirational and infectious. Their arrogance bleeds toxically into the rest of the team. It signals that if you are smart enough you choose when you work and what you work on. You'll become a "Developer in Residence" distorting the values of those who work around you.

The purpose of this post, is to hopefully inform fellow developers that you shouldn't try to become a "Rockstar". Trust me, it is not good.

So if been a "Rockstar" is bad, what is good and how does this relate to the lesson at the start.

If "Rockstar" is bad, what is good? Enter the workhorse!


The great developers, I know, are not people who can write bubble sorts etc on demand.

They are the people who when you get them on a project, never stop moving and inspire everyone around them to do the same! I have seen this firsthand on the project I work on. I am lucky to work with 3 great developers who are living examples of this, it is thanks to them I have learnt this valuable lesson, I share with you today.

What they all have in common is that they do the small things well and they keep doing them, constantly. They are the workhorses, they are dependable and reliable. 

So your probably wondering, "workhorse" that's not very exciting or a term of endearment. 

I mean it in a good way! 

If I ran my own business and had to pay people using my own money. I'd hire workhorses that is the best compliment I can give as a Yorkshire man*!

*Yorkshire men are known for not been free spending with their own money, tight in other words!

Wednesday, 21 January 2015

Software Testers are not awesome! Software Development teams are!

Disclaimer: Before we begin I want to make it clear that the purpose of this post is not to "bash" software testers as they have an important role to play as a member of a wider development team! Please ensure you read it all before jumping to conclusions!

I recently read a blog post called "Why Software Testers are Awesome!" posted on a blog called the IT Testing Blog which is written by a software tester who I work with. They were thinking about what people think about testers and testing. They gave the testers view which was basically that testers are awesome. 

Nothing wrong with that, I mean as a developer, I think being a developer is awesome otherwise I wouldn't do it. I develop because I love making products which help others in all sorts of ways. I love the team working aspects of software development.  

I must take issue with what I understood to be a recurring theme of this post. I got the impression that the author felt that Software Testers were the main, if not the sole reason that products/projects were successful and I feel they missed an essential point.

Successful projects/products are made by TEAMS, each with valuable and unique skills. All as important as each other, all contribute, all are important!

I may have misread this post, misunderstood it and so on. If I did then I apologise but if I may highlight some of the reasons I drew my conclusion then it might help people to understand how my viewpoint.

Point 1

"I’m happy that I’m a software tester as I’m the first one who gets to play with the newest and the coolest software!"
Actually this is just untrue, as a developer I get to "play" with the newest and coolest software first. I have a responsibility to test it first. If you are finding that you are the first, then you need to look at how you are working as the developers should be doing some checking before you get your hands on it!

Point 2

"I will always be needed as software will always have bugs to track."
It is true that whenever software is produced that it will have bugs. I would argue as a developer my aim is to ensure that I can automate these processes as far as possible, thus cutting the feedback loop and speeding up delivery. 

I would suggest that as technology improves that this reason you suggest for why testers are awesome might not be around for too much longer. I mean many market leading software firms now don't employ testers, they employ people to deliver projects. Also, with things such as automated testing you guys could just become "overhead", that is a dangerous place to be, if you like your pay cheque!

Point 3

"I make users happy. They have been expecting a nice friendly API and they've got it without knowing how many bugs and UI issues have been resolved. Lucky them!"
So only testers make user happy? Ok, I suggest that you haven't yet understood the nature of software/product development, which is a team game as I suggested earlier. I am sure the guys who ensure the API is maintained and kept running might have something to say about that. I mean we could have the best tested API in the world but if you cannot use it, then I would suggest users are going to be very unhappy!

Point 4

 "Everybody in my company has more confidence in the product thanks to my efforts! How awesome is that? Basically there is no good software without a tester, so yes, I’m proud. You should be to!"
This implies if we had no software testers that the company would have less confidence, I suggest this could be untrue. My suggestion in point 2 clearly demonstrates how this confidence could be replaced.

Also you say "Basically there is no good software without a tester...", um, actually, there is. Facebook for example doesn't have a testing team and their apps are used by billions of people every day! And I would suggest their applications are quite good. I agree that they have other measures to facilitate having no testers, which a majority of companies could never do.

Conclusion


The purpose of this post is not to suggest that developers are top of the totem pole and testers are at the bottom, absolutely no way!

A lot of what I have said above is meant tongue in cheek as I know that in order to develop great products, you need great teams. Made up of people with a passion for making great products and a wide range of skills and experience. The post of my colleague clearly shows they have a great passion and fondness for what they do and this is fantastic! In fact, I enjoy reading their blog as it helps me to see and understand a testers viewpoint!

The aim of this post is to remind my colleague that though it is not wrong to love the role you play and be passionate about it. You MUST never forget that it is the job of everyone to ensure quality and make sure that we have happy users.

Great software/product development is a team game and that's why...

Software Development Teams Are Awesome! Not just Software Testers!

Rant over!

Tuesday, 30 December 2014

The Last Post (of 2014): Review of the Year

I would like to begin this post by hoping you the reader had a great Christmas (or holiday) break and wish you and your families all the best for 2015!

As is tradition at this time of year, I thought I would take a look back on what for me has been a tough year (from a personal perspective) but it could have been much worse and I am thankful for the love and support of my family and friends (you know who you are!). 

In this post I am not going to talk about the personal stuff, I want to focus on my techy and professional interests and review how things have gone during the past 12 months.

Review of 2014


In February, I wrote that I was deleting my Facebook account but by September I was back on Facebook as I found it an extremely great way to interact with so many people. I stand by what I said in my blog post about not wanting to live my life “for the sake of capturing it on a tiny screen” but there are many people who I love interacting with that I cannot see on a regular basis either due to lifestyle, geography or whatever so I returned to Facebook as I felt that this interaction was better than no interaction at all.

In July, I spent a lot of time on this blog talking about DevOps. I am still not sure how this affects me in my day to day work but so far I cannot say I have noticed much difference. I wouldn't say I am against the idea as I really like the goals, it is just the implementation that concerns me but we will see.

In addition to talking about DevOps, I also talked about Nerf Guns. This was one of the few things I was actually right about, we had them for a few months and then they were “banned” as people didn't think it created the right image. I cannot say I am happy they were banned as for some people they did help morale and I enjoyed the odd “war” myself but I cannot say I was surprised and I stand by what I wrote in my post.

This past year, I have sampled some new technologies some of which I never thought I would like. From a geeky toy perspective, I think my MacBook Pro Retina is the best laptop I have ever bought and I am becoming a bit of an Apple fan boy but I didn't buy the iPhone 6 plus as I still like my Nexus 5 which is now running Lollipop and I must say I have had no issues with it.

On the development front, I have found I am really enjoying working on Web Development. I have a lot to learn but I am enjoying working with JavaScript and using Angular. As my colleagues will tell you I have become a bit of a JavaScript bore and I am currently reading JavaScript: The Good Parts by Douglas Crockford, he also has lectures\talks available on YouTube which I have found extremely interesting!

Generally, I have had a good year on the professional\techy front, I have learned so many new things and done some things that a year ago, I wouldn't have thought I could do. I am learning all the time and constantly looking to improve on what I did before! I actually find this quite exciting, and I am optimistic about 2015!

Future Plans


Moving forward in 2015, I want to continue with the Web Development stuff. I think at first I will continue focusing on Angular and JavaScript but I also think I am interested in doing some work with Node.js and learning another web development language. 

I am not sure whether to look at Ruby or Python (suggestions welcome). I think I’ll look at Python as I did it briefly in a Coding Dojo this year and liked the brief introduction. I might look into both at first and see which one appeals after the initial introductions, I read they are very similar but we will see, I am sure I'll blog about it!

Sunday, 30 November 2014

Bootstrap: Some early learnings

For todays blog I am going to take a look at Bootstrap I have heard some people call it Twitter Bootstrap as it was a project two guys (Mark Otto and Jacob Thornton) who worked at Twitter with the aim of making internal tools more consistent.

I wanted to look at this for a couple of reasons. The first is that recently I am working more and more in web development (my background is as a software developer) and we have had some issues on our project with CSS styling, as we try to get the consistent look we want on a range of devices. Secondly I kept hearing about it so just wanted to learn a bit more!

What did I want to cover?

I decided to give my initial learning some direction rather than just aimlessly reading blogs, tutorials and so on.

I wanted to be able to answer:
  1. What is Bootstrap?
  2. When and Why would I want to use it?
  3. How to use it?
I guess the real aim of this post today is just to allow me to document what I think the answers are to these questions and maybe help others. I would recommend the Bootstrap website as it is very detailed and helpful!

What is Bootstrap?

Bootstrap is a free collection of pre-written CSS rules used to build websites faster. It's as simple as that!

When and Why would I want to use it?

From what I read this is all about responsive web design, so if you are writing something and you want it to be readable on a range of devices, such as mobiles, tablets, laptops and desktops then Bootstrap provides the tools needed with minimal effort.

Until very recently, I didn't think this was such a big deal! Like I said, I did most of my work on the back-end processes, however when you are trying to develop applications to be used on a range of devices (and who isn't doing this now!) this framework seems to be extremely useful.

How to use it?

During these learnings I wrote a very simple one page website and I think these parts are the main features (to be honest, check the Bootstrap webpage as I only scrape the surface here!)

"Container"
You must use the container class to enable Bootstraps Grid System (see "Grid"). There are two container classes that Bootstrap provides...

.container
This is a responsive fixed width container. With this one you can fix the width yourself should you want to.

.container-fluid
A full width container that spans the entire width of your viewport. 

"Grid"
Bootstrap comes with a grid that consists of 12 equal sized columns. You then arrange your HTML elements to span differing numbers of these columns to create your layout.

Key classes to note here are...

.row
This creates an horizontal group.

.col-"screenSize"-"numberofCols"
This allows you to create spans cross columns, however these appear to have a hierarchy based on the screen size.

.col-xs-4
This example will span 4 columns on an extra small screen (i.e. a mobile, less than 768px) this is noted by the "xs". The key thing to note that this will also span 4 columns on larger screens as well so if I have understood this correctly, if you were writing something to be used on all devices then I'd use the .col-xs-* classes to setup my column spans.

Other options for screen sizes include:

.col-sm-4
This will span 4 columns on a small screen (i.e. a tablet, greater than or equal to 768px). Again this will scale up for a laptop and large desktop but NOT down to a mobile.

.col-md-4
Again span 4 columns on a medium screen (i.e. a laptop or small monitor, greater than or equal to 992px). And again it will scale up to a large desktop or other screen but NOT down.

.col-lg-4
Again span 4 columns on a large screen (i.e. a large monitor, greater than or equal to 1200px). I would suggest only using this if you know your website is not going to be used on anything smaller than a large monitor.

"Navigation" Tools
In addition to the features above for managing layouts using grids. Bootstrap also has some nice navigation controls such as...

TABS
You can create some navigation tabs by using the class "nav nav-tabs"

PILLS
You can create some navigation pills by using the class "nav nav-pills"

Other Tools
Another tool I liked was the "Jumbotron" class. This provides you with a large showcase area to feature important content.

Using the class "jumbotron" creates one.

Summary

I think this framework is extremely useful and I will use it again. I think I going to do some work writing another simple page and this time include some Angular code to make it interactive and see how that works.

For the topics I have covered above I created a very simple example that I have added comments to. If you would like to review it is available via GitHub here.

Alternatively there are lots of excellent examples on the official Bootstrap site.

UPDATE: On my GitHub repository, I have now added an example of the simple Bootstrap page with Angular ng-view. So when user clicks the links the view changes.