Categories
Business Life

An Agile Environment And Ergonomics

A good working environment is essential to ensure productivity in any project, even more so in an agile environment where the pace can often be quite steady, without reaching burnout. A couple of tips…

1. A spacious desk. You can’t have too much clutter or you will get distracted.
dscf0347.JPG
2. A gym ball instead of a chair. I’ve used one for many years now and much prefer it. It also helps avoid the programmer’s hunch.

dscf0345.JPG

3. Dual monitors. A luxury, i must confess, i’m still trying to get used to.
dscf0338.JPG

4. Stationery! No desk would be complete without much needed pens, markers and post-it notes but an arm’s stretch away.

dscf0333.JPG

5. Trash can. Not the virtual kind, but the real kind. Those post-it (and outdated technical specs) notes need to go somewhere, eventually.

dscf0343.JPG

6. And last but not least, the PC. Tucked away and out the way.

dscf0342.JPG

And that’s it. Oh, and one word of warning. If you ever have the urge to sneak hand-cream onto the ear piece of any of your colleagues’ phones… embrace the revenge 😀

Guys, you know who you are… outstanding job! Seriously. This is going to be a hard act to follow, but i relish the scheming 😉

Categories
perspective

Winter of Content

This is why living in Cape Town (South Africa, actually) is sooo worth anything. We have these amazing indian-summer-meets-winter days.. oh yes. This is winter, folks. Hardly the Cape of Storms, although, don’t be fooled, we have our fair share and this year has been exceptional. But then there’s this…
paddleout.jpg
and then…
riding.jpg
and … ahhhhh
turn.jpg

Categories
perspective

Rational Thinking

there does seem to be a particular glory bestowed upon the “rational thinker”. we can certainly pride ourselves in it when, either by delusion, reality or way of compliment, we are attributed with the phrase “rational thinker”. and as such, we perpetuate the idea that there is something superior to the art/skill of rational thinking. however…

how many times you had a great idea just hit you “out of the blue”? anything rational about that experience? and i would hazard to assume that a large percentage of revolutionary ideas are from rational. for example, was creating a mode of transport that defied gravity a rational decision? if anything, in it’s time, flying was not certainly not logical, nor a reasonable idea. and as much as “the world is round” was also not a logical conclusion, based on the knowledge at hand at the time. until, with time, it became a rational idea. and therein too, lies the rub. what is not rational today, may be rational tomorrow and vice-versa thereby betraying the fickle nature of reason and logic.

i don’t think rational thought is the be all and end all, and not even close to being one of the more superior thought processes available to man. in fact, sometimes rational thought is precisely what holds us back and curbs our potential. nay, rational thought is but one of many “tools” we can use at the right time to a ‘better’ end. but let’s not neglect, nor relegate it’s cousins, inspired thought and gut feeling, to second class citizenship 😉

now that’s to not say that if you pride yourself on being a rational thinker, you’re somewhat missing the point. in that case, your skill is more advanced than others in the domain of reason. but if you want to explore the untapped potential of what you can achieve, tap a little more creatively into the inspired side of your life… not with reckless abandon, but with a little less inhibition and get ready to be surprised 😉

Timing Trap

It’s subtle, and easily overlooked.

Server side calls in the domain layer are setting all sorts of properties on an object before pushing it over to the database for persistence. The database receives the object, persists and returns. The domain then requests an updated snapshot from the database (which may or may not include the data recently persisted). Nothing tricky, stock standard code.
Domain::Foo::DeactivateContact(DateTime.Now);
Domain::Foo::SelectDeactivatedContacts();

Problem creeps in when the server side code (domain) resides on a different server to the database and both servers are dealing with DateTime as a parameter for filtering on datasets. If their timestamps are not synchronized, down to the millisecond, you’re likely to get an inconsitently reproducible bug. As was the case recently…

A ‘contact’ was deactivated by setting the deactivatedTime field with a value on the domain server.
Deactivated contacts were returned by the data server based on the data server’s getdate() value.

When the two calls are sufficiently close to one another, your newly deactivated record sometimes appears in the second result set, depending on whether the two calls are within the same second according to the various timestamps on the different servers. Huh? 🙂
“Esoteric”, as Eugene used to say.

And you can’t overcome the issue 100% of the time reliably. Not when you start partitioning, synchronizing, servicing and load-balancing logic within a virtual network. You can however, be aware of the problem and plan accordingly. It’s just one of those (depending on the kind of systems you’re writing) you just keep in the back of your head until it surfaces one day… 🙂