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).

PS
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!

Wednesday, February 17, 2010

Facebook login

I bet most of you have seen the story on "Facebook login". Apparently some people type that very phrase directly into their web browser's google search (my guess is that they don't actually go to the google homepage, nor do they use the google search field in their browser, but rather the page set as home page on their browser *is* google.com). There has also been numerous opinions and ideas on how to fix this swimming around the interwebs.

Here is mine:

There is nothing freaking wrong with google or facebook or any of that. Using peoples stupidity and lack of will to learn as the source of improvement is inherently flawed. Build a system for morons and only morons can use it.

What did hit me when reading some of these opinions and ideas on the very same interwebs you all are using was that finding my way back to somewhere I had been before already has a solution. The bookmarks. The problem, for me, is that I never liked bookmarks. Not because they don't give me the functionality I want, i.e. find my way back from a small subset of the interwebs, but because it is a pain in the arse to use.

Adding is fairly simple, but it ends up being a huge list or I fill up the poor bar at the top of my browser. I.e. organizing them, well, is something I don't do well with. I also end up with broken links, don't care for any longer links, links I don't know I have, and a mess that means that it is hard to find things. Don't even start with searching, because if I remember where I wanna go, I most often know the URI, and I type that in. Then add in n number of different browsers on x number of computers and the mess is complete.

This is what is broken. Bookmarks are broken. I have a need, but I do not have a solution ready for my consumption. And I think this is where the true failure is. Not that someone isn't bright enough to type facebook.com in the right place, but that it is inherently a pain in the arse to get back where you have been before.

Not that I want to get back to facebook :)

Tuesday, February 16, 2010

Appstores

A very common comment on the flavor-of-the-month appstore killer seems to be that size doesn't matter. Which is to be read that the number of apps your store has isn't important. Many a writer suggest that a 100 well written high quality applications are to be preferred to 140,000+. I find that to be a classic 20/80 argument and a blatantly ignorant view on the realities of, well, reality.


Is quality better than quantity? Yes. Is variation for the sake of variation useful? No, not really. If an app doesn't do something differently, or do more or less, what point is there to it? But the argument isn't 100 high quality applications versus 140k+ "the way it is"-apps. The argument is 100 vs 140k. The quality won't be better for another platform than the iPhone, at the very least not significantly higher.


I would argue that the quality of most non-iPhone apps will actually be lower. Why you ask? Because I am an evil elitist that always takes the side of Apple? No. There are some real reasons behind this.


First of all the iPhone has gained a huge momentum in developer circles. This means that you have competition (140k...) and you have tons of developer talk on the web. It's easy to find help, easy to scoop out the competition and it is easy to find people who do develop for the iPhone. This all gives the opportunity for a wide verity of apps, and a need to produce high quality apps to get ahead of the competition.


Second we have the SDK. It's good. The APIs are good, the views are good, the frameworks are good. Good times all around. 'nuff said.


Third we have the standard Apple applications on the devices. They are good. Very good. They might not suit everyone. The notes app is typical of this, some people really do want more than that. But for what it does, it does well. So there is a good starting point which is consistent. Not a mish mash mess so prominent on other platforms.


Fourth is the quality mindedness of developers on the mac platform. Some really awesome high quality apps have been released for the mac. The developers take pride in following Apple's guidelines or exceeding them (Apple do need some updates in this area for sure! They are lagging their 3rd party developers. How common is that?). You develop iPhone apps on macs. See the connection? Someone willing to pay the premium to develop on a mac sure is going to have a reason for it. I know I do.


These among other reasons make me believe that the general quality of iPhone/iPod touch/iPad apps will continue to be high and continue to improve even further. I have many arguments against the other choices of mobile platforms, but I will leave that for another day.


The biggest reason why I strongly feel that competing app stores are going to fail is because they are trying to jump to the goal without doing the ground work. Apple has spent a long time building up to the iPhone (and now the iPad). Building a solid OS. Building solid apps. Building solid SDKs. Building the ecosystem. Building iTunes. Building the iTunes music store. Building the iPhone. And finally, after all that, building the App Store.


If companies like Google, Nokia, RIM, Palm, SEMC, Motorola, etc are going to stand a chance, they can not skip all those initial steps, slap some lipstick on what is a solid server kernel, and declare to the world that their shiny doesn't-actually-exist app store is going to ruin Apple forever. They did that to the iTunes music store. How did that turn out? How did the Zune turn out?


To be honest, all those other companies reminds me of rabid "get rich quick"-scheme type of desperate people. Sounds like a bad bet to me.