Tag: development

  • Over-Engineering Culture, Hacking, and Complexity

    Bora Ultra Two Dark Cult (6)
    Credit: Flickr / Glory Cycles

    I was talking to a fellow escapee of The Conglomerate and we were talking about over-engineering culture. In the sense of “lol things built because it was time for someone to get promoted” and in the sense of complexity.

    The thing about layers and layers of (debatably necessary) abstractions is that they make things that should be simple, complex. Which makes people feel stupid. The last change I committed there I was adding one field… and I had to change > 15 files. The biggest problem I had? Was thinking I must be doing something wrong because it couldn’t possibly be this hard to add one field, right?

    I think of hacking as fixing one corner case only to make two more for later. So, reflecting on this, this is also true of a culture where things are hacked together. Because when hacks build on each other again and again, the result is that simple things become harder (and slower) than they should be. It makes people feel stupid.

    We often talk about these two cultures like they are completely separate but this is not true. They feed on each other.

    • Hacking can be a result of over-engineering culture, because things that can’t be done “correctly” may as well not be done properly at all.
    • Hacking can be a reaction to an over-engineering culture, because people tired of things being so hard want to move fast and break things.
    • Over-engineering can be a reaction to hacking because someone bitten by too many corner cases decided that it would be better if everything were a perfect circle.
    • Over-engineering can be a reaction to hacking because perfectionism can be a reaction to things constantly breaking.

    Personally, I like to think about the medium term. Essentially this means: don’t hack things because hacks are short-term. But just because there might be a reason why something won’t expand to fulfil some other purpose doesn’t mean that it should be generalised (yet). If that scenario is uncertain, and not in the current timeframe, document and move on.

    Hacking to over-engineering isn’t a scale, it’s a circle. At the darkest part where they meet, simple things are hard, and engineers trying to get to grips with it feel stupid. Thinking about it, I’m not sure whether that codebase that required fifteen files to be changed to add one field was over-engineered or made of hacks, but does it matter? The effects were the same. Move slowly, with things that barely work.

  • Multiple Cellphones: How I Balance my Usage Across Both

    KONICA MINOLTA DIGITAL CAMERA
    Credit: Wikipedia

    I have carried multiple cellphones for about 2 years now. I think as a mobile developer, it’s important to be familiar with both the major platforms (iPhone and Android) and I find the context helpful regardless of which platform I am working on.

    Currently, I carry an iPhone 5 and a Nexus 5. My Nexus 5 is my “primary” phone – it has my UK sim card in it, and as such is the one that I use when I am not on a wifi connection (not that often, since there is wifi at home, at work, and in the gym). My iPhone has a US sim card in it, as it is now my designated travel phone. I use this to listen to music, and (almost) all the pictures I take, I take on my iPhone.

    A couple of things:

    • The apps I use most (chat, Twitter, 4Square, Feedly) are on both.
    • Email and calendars are synced on both – not that I use email on my phone much. Now that I’ve eliminated most junk mail I get notifications for personal email on one phone, only.
    • Necessary apps that aren’t instant are only on my secondary phone – this includes banking apps and personal activity tracking apps. This forces me to switch over periodically.
    • Also, music and pictures.
    • I make an effort to switch to my secondary phone when I get home and ignore my primary. Same in the gym, where there is free wifi – I leave my primary phone in my locker, and take my secondary with me to the x-trainer (with my iPad – I now tweet and watch TV whilst I get my cardio).
    • In fact basically anywhere with wifi, I use my secondary phone.

    My usage is the best it has ever been, a big factor in which is that I actually love my Nexus 5 enough to want to use it (a level of affection I never managed for my old Galaxy Nexus – I think this is mostly the beautiful screen), but after the first thrill of getting it, and a brief period of neglect for the iPhone I’ve found a balance.

    I think, on the whole I slightly prefer my iPhone – the great camera, and all my music being on iTunes is great – I can play music on my Apple TV, and then when I head out the door I plug in my headphones and it continues right where it left off. Also, some apps are better on the iPhone, Twitter being a big one – the Android app is much more likely to lose my place in the stream, which annoys me, and the clicking out to launch chrome rather than the embedded web view is slower. Also on Android, you don’t see the page snippet in the expanded tweet view (sometimes enough that I don’t need to click out). Although I use Buffer on both, and it’s so much easier on Android, because of the share intent. In fact sometimes my workflow is that I go through my favourites (which I use as a mechanism for things to read later) using both devices (web page loading being the bottleneck) but do all my sharing from the Android.

  • Mini-Generation Gaps

    One Laptop Per Child
    Credit: Wikimedia

    When I gave the Holiday Science lecture, one of the things that I touched on briefly was how my childhood was unrecognizable compared to the childhood of children 10 years my junior.

    This article – The Children of Cyberspace – from the New York Times elaborates on that further. From the article:

    “Researchers are exploring this notion too. They theorize that the ever-accelerating pace of technological change may be minting a series of mini-generation gaps, with each group of children uniquely influenced by the tech tools available in their formative stages of development.”

    Lately, I’ve been thinking more about this and how technology education needs to prepare people for the future – both in terms of how we encourage children to take an interest in informatics (Computer Science) and what they’re taught when they get here. I’m starting to work out the details for a presentation, which I’m thinking about calling “Preparing for a Revolution”.

    What do you think? Any suggestions?