Friday, March 19, 2010

Continuos test, rapid deployment, etc

There has been some progress when it comes to testing at work. It's a pretty huge step from "no tests" to a full fledge testing everything big huge system. There are a huge number of types of tests that can be made. Everything from unit testing (testing individual methods and mocking the world around them) to ad hoc testing to integration testing, to smoking testing, to system tests. Test of frameworks, of UIs, of applications, of databases, of networks, of performance, of usability, of anything and everything.

So how could you expect to go from zero to full fledge software state of the art goodness? With an existing code base never the less! Well, you can't :) Won't happen! But what I am seeing is something positive never the less, because if one set of tests are created, that does something, it can inevitably show that tests are *good*. That they have some form of payback. Which can prove that investing in the right kind of test is a great improvement and a gain.

So what is the right kind of test you might ask? One that finds something wrong with your software so that you can fix it, have more confidence in your code, and costs less than the gains. No point in expensive tests that doesn't find anything wrong!

One thing among many that tests can lead to is something I personally think is a good thing™ Always having shipping quality. I think that by always having a branch (or as they are sometimes called, stream) that is fully tested and ready to ship gives rapid development a new meaning. Any new development will have to reside on a different branch until ready (and thus having tests) and then integrated.

So what is so good about it? Think of how things usually go when it is time to ship to the customer. Tests are inevitably done at the end, and fails, or deployment fails, or the customer finds something hideously wrong. If you automatically test your software all the time, and only have finished features in it, you can any day ship it off to a customer with confidence. That's pretty cool to me. It also means that you have to have a state of the art deployment system. But that is a topic for another day:)

If anything in this little post seems a bit distracted it's because I am not feeling to well. I am in fact sick, which has affected my poor head. Trying to keep a thought up there among the cotton balls has proven almost futile. I might return to the subject some day, as I have more to say about it. And if there are things that seems to sound like it was agile don't fret, good ideas are good ideas, no matter the label or who thought of them:) And sharing ideas are good™

Friday, March 12, 2010

How I got my coding groove back

I'm starting to like to code again. Starting to like being in Software Engineering. But what has brought this on? What has changed? Let's get to it and see what has changed.

The people I work with? The majority of the people I used to work with (at the company I was with) was great. Some were troublesome but there was a large group of people I got along with. A bunch of us played boardgames and cooked food (awesome and super tasty food as well!). So it is not the people. I am sure that if any of my colleagues reads this they are going to give me a hard time about it the next day:) They are a good bunch of loonies too, and I sure wouldn't be able to work (in any sense of the word) if I disliked the people I work with.

How about the people running the companies then? In the past it was a pain, they didn't understand the business nor software engineering. It was a big failure to say the least! Where I am now I might not agree with everything the top says or does, but the company do make money and there are no facepalms or epic failures waiting in the middle of a lit room. It doesn't effect me in a negative way really.

How about customers? I don't notice them these days, while they were a constant source of pain in the past, so a noticeable improvement here. Makes my life better :)

How about coolness factor? From 1999 to the beginning of 2009 with a break of a few years in between I worked with smart phones. It's something I am sure many people dream of, just as I dream of working with some really cool product that I hold in high regard (cue inevitable Apple joke from Stan||Phil||Jared!). Time to burst the bubble, not always what it is cracked up to be. SymbianOS was and is some of the worst software I have ever touched (and I saw more of it than most ever will). It is just plain awful in so many ways that it makes me physically ill.

So what cool stuff do I work on these days? Enterprise software. Taste that word for a minute. Tastes kind of like cardboard doesn't it? But that doesn't matter really. I have for the first time professionally worked with the web (handcoding webpages and writing cgi in C back in 1996 to run on b/w SunStations doesn't count:)). I have again touched upon Java and haven't changed my opinion there. Javascript rocks and the browsers suck. HTML5 excites me even though I wish it was XHTML2 instead (XML plain sucks). Doing some iPhone development too which rocks.

So the underlaying tech is actually more fun these days. The system has its warts (especially for a code-maintainability/readability-OCD person like me) but it works quite well on a whole. ObjC/CocoaTouch is always a hoot as well:) I don't have as many high level discussions on software as I used to, but there are a few glimpses of hope out there. But I feel like I make at least a little difference and it is fun to code.

So that's it. It's a combination of new and more interesting tech and hope. Hope that I can make a difference, that I can leave the product noticeably better than when I got there. Seeing that things can become better is a huge motivation factor (for me).

As a side note on Java. Yes I dislike that language, and I think that a lot of harm has befallen the Software Engineering profession (especially from the posers) because of it. That is for another post. But that doesn't make it impossible to write good code in it, nor does a language guarantee great software. Just like natural languages makes a difference to how we as humans think and are able to express ourselves do computer languages change how we think and express ourselves. What is spoken on the other hand is down to the speaker and I strongly believe that the coder makes a much greater impact than any language can, and the more ways we can express ourselves as Software Engineers when we put our thoughts into code. Never stop improving!