Skip to content

Recent Articles

16
Oct

The key idea behind CreativeOS – or why the “there’s an App for that” does not always work

…and a great idea just hit me this morning.

I wanted to create something new, to write about “wind farms” as personal (digital) information hubs in an age where the media really behaves like the weather; jet streams, siroccos, tailwinds and sandstorms…

Several things crossed my mind lightning fast – as usual during a typical creative “moment”.

Let’s take the story from above to illustrate some of the key concepts behind CreativeOS.

When you are fully immersed in your thoughts, you are “in the flow“, you don’t necessarily think about “formats”, what the ultimate creation will “look like”, let alone about the tools you’re going to use to “materialise” the idea.

The creative activity on a computer involves the use of a couple of software tools.

To write and edit texts you need a text processor (1) application.

To search for photos and images you need either a local search engine (2a) or a web browser (2b) if you’re searching online.

To make references you need to find the sources and “link” them to your piece of work – in most cases you’re going to use hyperlinks – so you need an application that supports the editing of HTML (3).

To publish your “article” you need a publishing platform (4) – like WordPress. That’s another software application you need to deal with.

So far so good, but what happens if I want to also

  • send the “article” as an email message to some people, I want to
  • tweet about it on several web portals, want to
  • create a PDF version of it for local archiving, want to
  • print it, and last but not least I want to
  • copy it over to my pen drive…

And I want to do this ALL AT THE SAME TIME!

OK. Let’s go one by one.

Besides the text editor I need an email client (5) and I need to copy the content or attach the article to an email message.

I also need a Twitter client (6) and need to create a TinyURL to link to the online copy of the article.

I need a “converter” application (7) that can save my article as a PDF file.

I need to send the article to the printer. That may require using / opening up another application (8).

Also, I need to copy it to my pendrive. Using a file manager app (9).

It does not matter whether you’re using Windows, Linux or Mac OS.

All three major operating systems force you to use several (8-9) software applications to achieve your goal.

You have to open several windows on the screen, copy and paste your work from and into several applications.

That’s fine, we all used to do that.

But what if there’s a better way?

Enter CreativeOS.

15
Jun

Demystifying the role “Software Architect” – part 2: infrastructure, hardware and software tools

“…if the hardware is the brain and sinew of our products the software in them is their soul…”

(Steve Jobs, June 6, 2011 WWDC keynote, 02:26)

This article is about the brains and the souls, the tools of the trade.

For a medium sized company (100 – 200 employee) it is safe to assume that besides the personal computers and laptops there is some sort of internal virtualized infrastructure as well.

As a software architect you’re probably less interested in the actual hardware parameters (number of CPU cores, amount of RAM, etc.) what’s really important though is the level of virtualization.

Study at least the most popular virtualization tools like Xen or VMware.

Design and build your development environment: DEV > STAGING > QA > INTEGRATION > LIVE

Automate where possible: use continuouos integration (Hudson / Jenkins) to script and automate the most time consuming processes: build, test, report, package, deploy regularly.

Use scripting to test your applications (Selenium).

On your development PC / laptop keep your main OS clean but use local virtualization (VirtualBox) to maintain several versions of the DEV / STAGING environment.

Did I mention to master Unix / Linux on the way?

Check what OS is running on the production servers, clone the configuration and bring it “down” to your STAGING and DEV environments.

Even better if you automate those steps as well, with Puppet for example.

Once you’ve nailed the build – test – report – package – deploy process and you keep those processes alive you can have some rest.

Chose an IDE and try to make it the standard within the company.

If you’re building web apps install several browsers and use the user profile features (e.g. in Firefox) to manage multiple user sessions at once: log in as “admin” in one window and as a normal user in another.

Learn to use at least one diagramming tool well (yEd, Inkscape, ArgoUML), your manager / boss / sales and marketing people will love you for that.

Use a tool to manage your backlog (XPlanner, Redmine).

Set up an internal knowledge base – wiki style.

Maintain a secure password database – ideally use a tool that allows you to build a hierarchical structure or at least use tagging for the entries.
At the moment in my company password database (KeePassX) I have 200+ unique entries.

Back up your PC / laptop regularly.

…and most importantly: version control your code base. Keep a central location (Subversion) – or use a distributed tool (Git). Or use both at the same time. It’s great fun! ;)

Unless you’re working at a startup – or working on a greenfield project you’re most likely to meet your greatest enemy:

TECHNICAL DEBT

Old hardware can be replaced, software tools require extra care and planning if they need an update.

Not to mention your own code and legacy systems that you need to maintain.

There is no silver bullet in this area just hard work and better planning next time…

4
Jun

Demystifying the role “Software Architect” – part 1: recruitment

humane

: marked by compassion, sympathy, or consideration for humans [or animals]

It may surprise you that in the very first article about a serious IT topic I’m not talking about software, hardware, or some super-popular topic like the cloud.

I’m talking about the single most important (and still less understood) component of every company and IT system: humans.

As a software architect you simply cannot work in isolation, the system is already too complex for a single person to fully grasp – I know deep in your soul you’re probably a lonely “hacker”, but – you have to work with others. What’s more: it is your task to find good great people who can help you succeed.

Software architecture is usually a hands-on role but you cannot code everything yourself:

  • it is simply not possible
  • you have to share your ideas, strategy, namespace with others very early on to future-proof the system.

As a software architect you also act as a team leader: you work very closely with the software engineers.

Recruitment is hard. Finding the best candidate who:

  • can do the job
  • is willing to do the job
  • is available, and
  • within budget?

Tough.

How can you find the best candidates?

Well, the very best ones are most likely:

  • never available on the market,
  • do something cool already, so they don’t want to change,
  • way over your budget.

So how do you recruit?

The very first thing you can (and must) do is network. Go and attend local IT workshops, conferences, join local communities. Talk to people.

Second: ask your former colleagues and friends. They may know someone who can be a good fit.

Also, you have to establish and maintain good relationships with recruitment agencies.

You have to review CVs, filter out the top 3-5 and you need to invite them for an interview.

Manage your time: prepare job descriptions, review CVs, arrange interviews, book meeting rooms, allocate time for feedback.

During the interview you have to introduce the company – emphasize the benefits a potential new colleague or contractor can gain, and here I’m not talking about purely financial benefits. You are most likely a “hacker” yourself, so there are more important things beyond money: the knowledge and experience you can gain while searching for the “highs”.

As a team leader you need to focus on scross-functional skills as well: experience in continuouos integration, code reviews, QA, documentation are all very key competencies.

Skills required:

  • empathy
  • patience
  • time management
  • e-communication skills (Skype, Twitter, email, forums, etc.)
  • digital document management skills (prepare, manage,version control, archive job descriptions, CVs, etc.)
  • the ability to:
    • accept and tolerate cultural differences
    • ask good questions
    • delegate tasks (e.g. preparing contracts) to HR
  • good language / speaking skills (note: English is not my mother tongue)
  • learn the recruitment jargon
4
Jun

Demystifying the role “Software Architect”

Introduction

The following series of articles are based on my personal experiences gained in the past year working as a “Senior Software Architect” at a super-cool telecom company.

The scene

Two words: Satellite. Broadband.

…and one more: Combined.

On the one hand you’ve got the space industry with it’s “sky-high” level of entry on it’s own. On the other hand you’ve got the already complex “down-to-earth” reality of the internet service providers.

But it’s real: you can use a communication satellite to offer broadband internet services to areas where other means of connectivity is not feasible. Being the “software architect” in this realm is full of challenges but it’s great fun.

The role

In my job title I’ve got this word “senior” which always makes me smile: I take it means that I’ve reached too high too young. ;)

So what do I do?

In the next couple of articles I’m going to cover all aspects of my day-to-day job simply to give you an idea of what skills and experiences are required by this role.

…you know, just in case you want to end up in a similar role one day…