Friday, February 17, 2012

Reflection: I'm a versatile person

We can be so hard on ourselves, so it's nice to take a step back and think about what we do well.

I'm going to take advantage of my own blog and do a little bragging today. In relation to my job, I am actually a very versatile person. 
  • I code nice front-ends.
  • I code advanced back-ends.
  • I'm good at Debugging weird issues.

But I'm more than just a code monkey. I also do the following things pretty well:
  • I'm organized - I get things done.
  • I write well - proposals and blog posts.
  • I do presentations.
  • I design.
  • I'm professional and friendly when I deal with clients.
  • I even do network admin stuff.
That's a lot to be proud of I think.

There are some things that I'm not so good at though, but practice makes perfect:
  • Coordinating a project
  • Dealing with project politics
  • Fighting with managers and clients (i.e. pushing back against unrealistic expectations)
  • Handling too much pressure

Posted via email from The Coder's Perspective

Wednesday, February 15, 2012

Different kinds of viruses/virii

A colleague, Justus, described the different kinds of viruses/virii to me. Interesting stuff...

  • A Trojan - opens a "back door" into your system. Just like the story about the Trojan Horse.
  • A Worm - propagates aggressively across your system and the network.
  • A Rootkit - the most advanced. Attaches itself onto the operating system kernel and hides itself. Very difficult to detect and very dangerous.
Nasty little fuckers.

Posted via email from The Coder's Perspective

Wednesday, February 1, 2012

An interesting difference between the ASP.NET Dev Server and IIS

By default IIS will not return static content like CSS and JS files through the ASP.NET pipeline. So Global.asax won't be invoked.

But on the ASP.NET Dev server all files, including CSS and JS files, will go through the ASP.NET pipeline. So Global.asax will be invoked.

Remember this when you're profiling your application! It can lead to skewed results.

Posted via email from The Coder's Perspective

Friday, January 27, 2012

Skyrim first impressions

So I started playing Skyrim last night and I have to say: What a Treat!

I spent a lot of time looting and enjoying the scenery. I only played for two hours, but in those two hours I felt like I was in a different world entirely. The game really sucks you in. I love the frigid landscape, the mountains and the waterfalls; it feels like you're in Beowulf.

But what I really appreciate is the slick menu system. You can see that Bethesda put a lot of effort into the menu. I find it interesting how they use typography (mostly font size actually) and subtle icons to indicate what's active on the menu and what's important. Most other games seem to go the garish-background and border-overload route to compartementalize the user interface. So I really like how Bethesda did Skyrim's menu. Very well done.

I will probably spend this weekend in my underwear playing more. Looking forward to it :)

Posted via email from The Coder's Perspective

Thursday, January 26, 2012

How to cure hiccups?

This "swallow method" from wikiHow did the trick for me. No more hiccups, thank goodness...

  1. Breathe in as far as you can.
  2. Swallow without letting any air out.
  3. Breathe in more, as far as you can. Do not let any air out!
  4. Repeat steps two and three as many times as possible. When you feel you can't swallow anymore, swallow again. You may turn red and make squeaking noises, but keep swallowing and inhaling.
  5. When you absolutely can't swallow anymore, exhale all the way.
  6. Your hiccups will be gone!

Posted via email from The Coder's Perspective

Thursday, January 19, 2012

How using an Agile process combats the common project pitfalls

Software projects are  packed chock-full of Risk. It's important to acknowledge the risks and to mitigate them. How you address the risks depends on which type of "project process" you are following. The two types of project processes that I have experienced are Agile-type and Waterfall-type projects. In this post I list some of the common ways to mitigate well-known risks for both these project types.

 

When given a choice we prefer to adopt an Agile approach. We believe that following an Agile approach leads to a far superior final product. We also believe that Agile is much less risky. So this post is unashamedly biased in favor of Agile.

 

First, a brief description of the two types of projects:

 

Waterfall-type project: 

Waterfall_600px

A waterfall project typically has a set deadline for set functionality.  Many businesses like this type of project because it seems predictable and makes it easy to get a budget approved for the project.

Process: Plan, Build, Test, Done.

Problems:

  • Trying to predict accurately while software development is very unpredictable.
  • User Requirements Specifications are usually insufficient and open to interpretation, which leads to errors.
  • Scope Creep is time-consuming to manage and often "sneaks" in due to unclear specifications. This puts pressure on the development team to deliver more functionality in the same amount of time.

 

Agile-type project:

Agile_600px

An agile project is typically seen as a recurring monthly expense instead of a big capital expense. Features are delivered frequently  (typically every two weeks) and the project carries on for as long as it is delivering useful functionality.

Process: Plan, Build, Test, *Repeat Repeat Repeat

Problems:

  • Unable to promise specific features at a specific deadline far in the future.
  • Difficult to work with businesses with a "waterfall" mindset (most big old businesses).
  • Difficult to get project approval when hard-and-fast promises can't be made.

Advantages:

  • Deliver what's useful, not "what the spec said".
  • Deliver useful features early.
  • Detect problems early.
  • Embraces change.

 

Why Projects Fail

Projects can be considered failures for many reasons. The most common reasons that I have observed are:

  1. Budget Overruns and Late Delivery - these two usually go hand-in-hand.
  1. Incorrect Functionality delivered - the client expected one thing and the programmers built something else.
  1. Technical Problems - for example: the system is too slow to use, or it doesn't integrate with another critical system in the software ecosystem.

 

Below is a list of ways to combat these three problems in either a Waterfall or Agile project.

 

Problem 1: Budget Overrun/ Late Delivery

Waterfall:

  • Add extra time to mitigate risk. For example: estimate 13 hours for a 10 hour task. Not optimal. Expensive.
  • Track progress against milestones to ensure the project is progressing on schedule. (The problem with milestones is that they can give a false sense of security. When you think something is "Done" it might not really be. "It's done! (except for the styling, or integration with external system X)")
  • Work overtime if needed to catch-up.

 

Agile:

  • Frequent delivery means most important features get delivered early.
  • If less important features are late it is not such a big deal. The system is constantly improving and maturing.

 

Problem 2: Technical Problems

Waterfall:

  • Do lots of prototyping in the first stage of the project to try and spot technical challenges.
  • If caught late it may be too late to do anything about it. Major losses.

 

Agile:

  • Will be picked up early due to continuous early delivery. Project can then go a different direction, or cancel project if absolutely necessary (at least it will be early).

 

Problem 3: Wrong Functionality (incorrect assumptions)

Waterfall:

  • Write very detailed user requirements specification. (The problem with User Requirements is that they give a false sense of security. Now matter how explicitly they are written, they are still open to individual interpretation and interpretation may not be what the author intended.)
  • If caught late it may be too late to do anything about it. Major losses.

 

Agile:

  • Agile embraces change. Frequent delivery ensures that the correct functionality is delivered and any "mistakes" are detected early. The client is continually evaluating the system and can change direction as required.

 

Posted via email from The Coder's Perspective

Tuesday, January 10, 2012

Why I love my job reason nr 49...

I don't have to work with ASP.NET WebForms anymore!

That deserves lots of exclamation marks!!!!! !!!! !!!!

ASP.NET MVC3 is such a pleasure.

Posted via email from The Coder's Perspective

Share/Save/Bookmark