Leaving Footprints

Writing software for businesses usually has some balance of perfectionism versus writing enough to get the job done. Other people refer to the latter as pragmatism. I think most good developers tend to sway from one extreme to another, as being extreme on either end is likely to either not deliver a system, or leave a very unmaintainable one.

I tend to come more from the pragmatist camp, but would love to be an idealist in the real world (but then economic constraints of time and money come into play). Leaving footprints is something that I have been thinking of lately. It’s a term I think of when we make choices that are less than ideal, by leaving behind something (an impression in the sand) of what made me make that choice I did at the time. If I remove that condition (or series of them), then perhaps someone can make a better choice.

I currently tend to use two different techniques for “leaving footprints”, the first with being comments, and the second being automated tests. Focusing on the fact that I am leaving behind an impression of some sort has helped me in the past to really distinguish between the choices that I have to make and to really explain the forces behind them all.

Delightful Dubai Day 1

DubaiAfter a grueling eleven hour flight disjointed journey from Brisbane through Singapore, I finally arrived in Dubai at the local time of 6:30am. If the heat that blasts you leave the plane to join a transit bus was any indication, today was going to be a hot one. Summer temperatures in Dubai range from 29°C to 40+°C on any given day. Today was certainly no exception and although we were walking around in the 41°C day maximum, we were lucky enough that today was not such a humid one.

I met up with my sister at the airport (who flew Air Italia), and we quickly made our way to our hotel. Australians, like many other foreign nationals, are given free entry upon arrival to Dubai. It is something that the United Arab Emirates intentionally does as it tries t move away from oil as its number one source of income to incorporate a wider portfolio including tourism. I was thankful that my sister had done a lot of planning as I had enough to take care of, tying off loose ends before moving countries. After checking in at the Le Meridian Fairway on Internet rates (it’s definitely worthwhile getting these), we caught the complimentary bus into town.

We ended up in the city rather late, and ended up in a Vegetarian Southern Indian restaurant to grab something for a lunch (it was well past breakfast time by now). Dubai is heavily populated with many foreign nationals, with a percentage of something like 60% being Indians, Pakistanis and Filipinos. Budget eating is not very well advertised, with most of the advertisements you see catered for restaurants in your Marriott, Hyatts, and Burj Al Arab (the only 7-star hotel in the world), although I believe there is a good lonely planet guide that might have helped in our journey. We stumbled across a decent looking place called “Vege World” where we feasted on three different bread and curry dishes including Aloo Paratha, Puri Bhaji, and a Cookie (an southern Indian chilli-bread like dish) for a measly AED15 (AU$6) between the two of us. Dubian (is that a word?) people are lovely and the person who served us also helped tell us what it was we were exactly eating. It’s always pretty exciting ordering things you have no idea about and then being pleasantly surprised.

Dubai City of GoldWe walked all throughout the souks (think marketplace) in the Deira area, with the gold and spice souks being the most visually stunning. The gold souk is, of course, the most obviously eye-popping with such intricately detailed necklaces, bracelets and rings lavishly draped all over a number of hanging bars in the store windows. Although we did not enter any of the stores (my budget certainly wasn’t extending to buying any jewelry), we have read that it is apparently a bargain.

We also managed to hit the Sheikh Saeed Al Maktoum’s house, the Dubai museum, Bastakiya, Creekside Park, and the mega shopping complex that is Wafi City. Taxis are relatively cheap with fares starting at AED3 (about AU$1.20) and is slow to actual tick over. An even more bargain way of traveling around Dubai across the water is the Abra. A short small boat driven by a single person only costs a person 50 filas (a half Dirham) and gets you from one side of the creek to the other.

Afternoon Tea @ The Basta Art CafeFood here is pretty amazing. We stopped for afternoon tea at the Basta Art Café, a hidden treat nestled in the buildings of the Bastakiya area where we indulged in some delicious mint Moroccan tea, some Arabic tea and some baklava. Although we ate inside an air-conditioned tent because the heat is pretty ridiculous, it does have a court yard that would be lovely to sit in during the cooler months. We also ended up having dinner at The Spice Club, a restaurant in the hotel where we indulged Indian banquet of 11 dishes for about 80AED (AU$30). Completely stuffed we went to bed, ready to hit the city for the second day.

I’ll continue to post some more pictures, but for now you can check them out here.

Moving On

It really hit hard this week that everything was really happening. I felt a mixed bag of emotions leaving my current client yesterday, both excitement yet sadness. I had been there for almost 18 months, and had formed some great relationships with the people there. It had become a fun environment to work in, and the work itself was interesting.

In about four hours, I depart to work for the London office of my current company. It will be such a stark contrast from the small and disjoint Brisbane office that I have enjoyed working in since I joined. There will be over 25 times the number of employees in the office than what I am used to and will be thrilled to meet them all, especially those whose blogs I find myself reading.

From what I have read and heard from various people, the city of London offers so much more in a week than what you would get in a good month in Brisvegas and the travel opportunities to not so distant foreign cultures is just a few hours flight away. I’ve heard the food can be amazing, but I have prepared myself for the difficulty in getting some types of really fresh food. I’m looking forward to the music scene, and in one night being able to quickly compose a list for the rest of the year of such big name acts I’d be keen to see.

For the time being though, I’m looking forward to having a small break with a five day stop over in Dubai. I’ll try to post some pictures in my photo gallery, and some more stories depending on how easy it is to get access the Internet.

Rearchitecting the Architect

I’ve had this entry in draft mode for a while, and seeing as I am likely to have limited access to the Internet next week, it’s probably best that I get it out there. After all, I believe that all constructive feedback (both positive or negative) is useful.

The traditional software architect role is an interesting one. Developers, who choose not to go down the management line for one reason or another, typically take up this role. Defining what an “architect” does in a traditional software environment seems to be pretty well known. Trawling some job advertisements you see role descriptions like, “translate business requirements into a framework”, “high level analysis and design”, and “technological evangelization”. My observations of a real ‘architect’ at work is that they generally do spike-like work, develop a little (but usually not so little) framework here or there, or suggest implementation patterns in the form of a tutorial or cookbook.

As a mad keen developer, who is into Test Driven Development (TDD), constant refactoring, and evasion of Big Design Up Front (BDUF), I question where does this role fit into newer software development processes? I respect these people, because they have been around for much longer than I have. They probably have a wider repository of patterns to drawn upon and the wisdom of learning from many different projects. I question this, because I think the typical responsibilities fail in an environment that I like to work it.

Architects in their traditional sense, typically fail because they work leagues ahead of the development team. Sometimes they run with BDUF, but other times, they do spike work that sets a pattern for a simple use case, but fails to address the needs of many other ones. Since they rarely look back at the things they have done, architects rarely get any feedback, and one of the most useful of eating your own dog food. It sometimes gets to the point where the architect starts dictating architecture with diagrams instead of actual code, failing to see the difficulties of how untestable or how inflexible it might be when actually implemented!

Here is my revised list of descriptions on the software architect role in a modern software development team:

  • The architect should be an embedded member of the development team – Like it is important to have a customer representative and a tester during an iteration, the architect must be someone a team member can go to for direction relating to a technical feature when unsure. Although it is okay for architects to work on technical spikes in advance, they should also be looking at the implemented result under all real circumstances.
  • Identifying, extracting and naming patterns out of the system – Refactoring code is excellent at a microscopic developer level as you can draw out a better, more maintainable piece of code. Refactoring during an iteration by developers working on stories tend to have too much of a narrow focus to influence a large entrenched system. Excellent test coverage and well-written tests also give the architect an ability to execute on this, without having to leave the code in the state that it is.
  • System-wide Odor Purification – Bad smells reside in code all over the place for one reason or another. Identifying bad smells throughout a system, highlighting them, developing a strategy for getting rid of them, or better yet, actually removing them is important. Once again, developers do this on a microscopic level but similar smells may co-exist in several parts of the system.
  • Mediating technical discussion – Although BDUF is never useful, it is sometimes to useful for a team to talk about different problem solving strategies (a general approach) to take. Reality will always step in and cause something to deviate from a ‘plan’, and the architect should support brainstorming activities and should be able to step in and prevent discussions that become ineffective, and do turn into BDUF.

Gripes with JSP Inconsitencies

It’s frustrating that the

<jsp setProperty="*" name="webJavaBean"/>

does not set nested object properties, yet you call still mix it up with something like

<c:out value="${webJavaBean.complexClass.anotherNestedProperty}"/>.

There’s so much more that can be done with it, instead of having to use the apache BeanUtils class which has its own set of issues.

Superb Spanish Tapas

Tonight I caught up with Mike, Marie, Matt, Aaron and Suhail for dinner before I head overseas at the Spanish Tapas Bar. I had never been there before, but thought it would prove to be an entertaining evening. Located in the busy Brunswick Central, the Spanish Tapas Bar does not strike you as a very different restaurant from the outside. It, like many of Brunswick Central’s other tenants, have tables both outside and in, but considering Brisbane nights have proved a little chilly recently, we opted for a table inside.

The restaurant does serve several types of mains, but it was more fun and definitely more social to order a variety of different tapas to share. The menu has a great selection of both hot and cold tapas and several platters that reduce the difficult choices you have to make when selecting which tapas to order. Between the six of us, we had a really large variety of tapas including several different croquettes and empanadillas, calimari, sardines, chicken and lamb kebas, fried spanish cheese (Queso Frito), Spicy Potatoes served with Aioli and a traditional spanish potato and chorizo omolete. Listing them all out seems like we really pigged out, but after splitting each dish between the six of us, typically meant about one mouthful of food from each dish.

The food was excellent and there was not one tapas that I did not enjoy. The best dish for me was probably the fried spanish cheese because it had such a strong flavour and I enjoyed its unique texture, combining the gooey insides and the crisp outer shell of the tasty cheese. You are unlikely to walk away from the Spanish Tapas bar completely stuffed unless you order a main (such as the Paella) or plenty more tapas, but you will definitely walk away marvelling at the wide assortment of flavours that you had just consumed.

Details: Spanish Tapas Bar
Found on: 455 Brunswick Street (Brunswick Central)
Contactable via: 3257 3138
Highlights: Great variety of many different tapas that were all very tasty. It was also quite refreshing to have a tasting of Sangria as you were seated. The tapas comes out quite quickly after ordering.
Room for improvement: The restaurant’s ambiance did not feel strongly spanish, and the wait staff’s attentiveness to the table after you have ordered could be improved.

More Mecca Bah Madness

Last night I had a farewell dinner with the people that I’m currently working with at the Mecca Bah restaurant in The Emporium. It was the first time that many people had eaten there, and the quality of food, as always, did not disappoint. With a party of 18 people attending dinner, I thought it best to have dinner early in the evening, straight after work as this place does not take bookings. Although we were split over two tables, I think everyone had a great night.

Dinner started off with various mezzes including turkish breads and dips, Bastilla (Moroccan chicken pastries), Silverbeet rolls filled with chickpeas, rice & herbs, Kataifi pastry filled with Middle Eastern cheeses, and Spicy Turkish kofte and yogurt sauce. I followed up the entrees with the Roast Zucchini with Middle Eastern cheeses, lemon and mint turkish pizza which had a really strong lemon flavour and was a refreshing and filling main.

Thanks to everyone (Lindsay, Sam, Joe, Anthony, David, Bronwyn, Mandy, Jules, Ivan, Martha, Kate, Hamish, Gary, Jen, Ajit, Julian and Brett) for the lovely evening and especially wonderful company.

Think Distance, Not Speed

Somehow I always seem to end up coding the user stories that have the most demanding time constraints. In a way, I feel flattered that someone trusts my ability to deliver when a critical deadline must be met (and real deadlines are very rare in software, despite what everyone tells you), but it is always interesting to see how people react when a critical deadline must be met.

Over the numerous occasions that I have been working on these “time critical” stories, the common question you are normally asked is, “So when do you think we’re going to be done?” or better yet, “Is it ready yet?” As a developer I find it is better to preempt these sorts of questions by delivering feedback earlier than they expect. Typically this means walking through significant, visible progress with the stakeholder, or bringing visibility to issues that are hindering your ability to deliver (e.g. database environments not available, etc). Customers are typically trained to ask “Is it ready?” because they are given such little feedback. The customer should not be surprised when something will be delivered and it easy to forget this.

Another question that you tend to get asked is, “Can you get it done any faster?” Speed is essential to any business, but it is important to highlight what you sacrifice for speedy delivery. Translated into software terms, this may mean less regression tests to provide automated feedback of features breaking when future changes are made, duplicated code, leading to confusion, additional maintenance and even developer shame, or an undesirable path that meets requirements but leads to an unacceptably sluggish solution as load increases. When time is critical, ideally the business should be prioritising which things are more important, but usually it is left for developers (for better or worse).

Achieving your goals as fast as you possibly can is good, but keep in mind that developers are more like runners than they are computers and do get “tired” (for want of a better term). If you want to run a marathon, you certainly don’t run at the same speed as you would the 100m. Instead of asking how fast you can run, the question that should be first asked is how far do you want to go?