“Agile Architecture”: Is Your Product’s Architecture Simply a Reflection of its Release Schedule?

After recently reading George Fairbanks’ Just Enough Software Architecture and obtaining 90% in my TOGAF 9.1 Foundation Certification exam in Enterprise Architecture, I’ve naturally been thinking about Software Architecture a lot. The other day a friend and I were talking about a typical scenario, involving large scale products with multiple sprint teams on a tight delivery schedule. I will over-simplify and over-generalize it here:

The Scenario

Let’s say you’re building a product which requires a feature that a snapshot can be exported to a PNG file. This is typically what would happen:

  • Product Owner: “As a user, I want to export snapshot to PNG, so that I can email it as an attachment to the Finance Department”
  • Story is added to Product Backlog, prioritized during the Sprint Grooming and estimated in the Sprint Planning
  • Developer Dinesh starts working on it, he adds the Export to PNG feature, it is demo’d at the end of the Sprint and everyone is happy

The feature and product iteration is shipped, customers start using it, the product team goes back to juggling new features and bugs. Priorities and sprint teams change. Somewhere down the line, another requirement comes up:

  • Product Owner: “As a user, I want to export snapshot to PDF, so that I can archive it in the Document Management system” (Don’t ask why the two systems can’t work with the same format).
  • Story is added, prioritized and estimated. This time though, Dinesh isn’t around (he’s either on vacation, promoted, no longer in the company or simply more focused on another aspect of the product)
  • Developer Gilfoyle starts working on this feature. From this point on, 3 things can happen:
    • Rearchitecture: An experienced developer or architect recognizes the potential of code reuse/refactor/rearchitecture between the two implementations. A common interface emerges, common functionality is moved up and specific functionality is moved to concrete classes. Note that:
      • Code is refactored
      • Some previously existing code is even thrown away
    • Technical Debt is accrued: Gilfoyle has limited time to implement the new feature; on the UI side the “Export to…” menu selections show up users would expect, but the internal implementation is disjoint. The code is not clean (but does the job), the Export functionality is not unified into a single interface and there is code duplication.
      •  In some of the stakeholders’ minds, code has been “reused” from the previous implementation, but in reality it has been copy-pasted (imitation being the best form of flattery towards Dinesh)
      • The team and PO might even recognize the Technical Debt and add it to the backlog, to be dealt with in the future at a lower priority (although that tends to lead towards a Bottomless Backlog)

In both cases, layers emerge in software over time as features are added and the product evolves. However, the first case has architectural layers and the second exhibits feature layers: In extreme cases, you might even be able to infer the Product Backlog by looking at the order in which features were added.

The Analysis

Some thoughts:

  • The Technical Debt Trap“: Doc Norton explained it very well at CraftConf 2016 (video link): (a) Most of what we have come to call “Technical Debt” is actually code cruft, and (b) “clean, testable code is a pre-requisite to being able to pay back Technical Debt”.
  • Show me the $: While a Product Owner may have limited influence over where budget is spent, a Product Manager may be in a better position to limit the long term negative effects of decisions made within the scope of individual sprints
  • One size does not fit all: Complex products or long development cycles, must be overseen by an experienced Architect or Development Lead, who advises the PO, PM and other decision makers
  • Stakeholders pay for the product, not the code: For stakeholders coming from a more traditional software engineering background, it may seem like throwing away (or refactoring) code is a questionable decision, because money was spent on producing it. This thinking must be erased by clarifying the benefits of a more robust and maintainable design.

The Solution (Maybe)

In summary: Features, as seen by the business, are not always the same as features, as seen by the developers. I’m tending to think the solution might be to maintain two backlogs: a business-oriented Product Backlog, and an architecture-oriented Technical Backlog. The latter would go into the details of how the business needs will be met at a technical level, driven by the objectives of overall cohesiveness, maintainability and constant reduction of Technical Debt. Here’s how I imagine it:2xBacklogs

Note that the technical effort to achieve a given amount of business features, is more than what it would be if the team worked off of a single backlog. This is simply because the Technical Backlog takes into account the additional effort of refactoring/rewriting, which is normally not covered in the typical Product Backlog.

I’m curious about what you think, please leave a comment below or get in touch on Twitter: @survivalcrziest.

(PS: Here’s a tip: VCS-based Software Analysis by Adam Tornhill)

Update: Prioritization of Items in the Technical Backlog

Based on some of the readers’ feedback, I would like to clarify how I intend the system to be used:

  1. The top of the Technical Backlog is prioritized / groomed based on (a) “Technical Value” and (b) budget and schedule constraints (“effort”).
    •  Technical Value here is defined as the value delivered by the technical solution towards meeting the needs of the [prioritized] Product Backlog.
  2. Items may be to the Technical Backlog not just based on the insertion of new features in the Product Backlog, but also based on technical reviews / retrospectives where it is identified that an architectural change is required (e.g. for purposes of maintainability or compliance).
  3. The items pushed to the bottom of the Technical Backlog thus represent Technical Debt.

 

Prezi’s 7 Year Itch?

This has been a really hard post for me to write, because some of the brilliant engineers and designers at Prezi are my professional acquaintances and/or good friends. And that’s the very reason I’m writing it – real friends tell it like it is. I’ve been putting this off since I first started using Prezi almost a year ago. But now that I have experienced it in free, Edu and Pro flavors, and created some pretty complex ones, the initial tiny niggles now seemed to have, let’s say, zoomed in (pun intended). So Prezi people: please consider this well-intended motivation.

Prezi was founded in 2009, and I imagine at that time it must have felt something like Wolfenstein 3D: technologically ground-breaking and in some circles, controversial (you may recall Microsoft tried to acquire id Software). Powerpoint needed to be killed, because it enforced linear thinking – and Prezi was the answer. Yet, 6 years later, linear thinking is still popular:

With 60 mn users (and 160 mn -/+ 18% Prezis created, depending on which part of their website you refer to), obviously they’ve got something right. Right enough that they are able to sustain an international presence on a single product. That rarely happens at this scale, and I suppose it is something to be admired.

The Platform

The in-browser experience is brilliant. Works well and virtually eliminates the entry barrier.  I tried using the desktop variant, Prezi for Mac, once. Just once. I found that it in terms of usability, it didn’t offer any major advantages over the website. But the real problem was that it kept false-flagging sync conflicts between the “local” and “cloud” versions. Eventually I decided the fake stress wasn’t worth it and switched back to the browser.

You may not have this dilemma if you would like to use the free power of Linux to share your ideas – Prezi doesn’t support it. (To be fair, they more than make up for this by actively promoting the tech and open source community in Budapest, by regularly organizing/hosting events, meetups and conferences).

There is an iPad version that “enables users to pan, and pinch to zoom in or out of their media” (That’s perfect, because that’s pretty much what an iPad is good for, anyway).

What I really wish for is the ability to resize the slide view pane on the left, so I can identify and jump to specific slides. And multi-select, especially for reordering (use the Force of the Shift Key). I would also like to mark some sections so I can focus on certain areas for preparation. Or even skip straight to one depending on how the conversation is flowing.

I mentioned stress earlier. You can quite easily recreate it by using 2-finger zoom gesture on a Mac. It’s not very precise and often ends up being a lot more than you’d expect. I once had to spend hours fixing my slides when a select-move-zoom operation didn’t go as planned. I learnt the hard way to stick to the zoom buttons and not use gestures.

And finally, it all runs on Flash. Yes, even now.

Features

The undo/redo feature also has a bit of a mind of its own. For simple operations it usually works fine, but when you’re in the flow and make a mistake, it often does the thing you’d least expect. Infinite undo/redo shouldn’t be that hard to implement either, considering everything is an object with attributes, anyway. What would be really nice, though, is some kind of checkpoints — major versions that you can roll back to, branch out of, or share with someone (e.g. numbered drafts). Because, 2015.

The guides when moving stuff around are hard to see. Too often they blend into the background, especially e.g. if the background has a grid. Get those ants marching again!

I also miss the ability to add notes, although what I would really expect is a more modern way of representing “prompts”, in a way that would be intuitive for presenters.

Warning: Brutal Honesty Ahead

Try this test, Prezi folks: create a new Prezi, single slide only, and export it to PDF.

  • Number of pages expected: 1
  • Number of pages found: 2.  The first page is always duplicated during export, regardless of number of slides.
  • Test result: FAIL.

Really, nobody noticed this in all these years?

Or that the image borders provided by the Aviary plugin are too thick and can’t be adjusted? (I trust you when you say my “private”, potentially proprietary/copyrighted images are truly private, even though there seems to be no obvious ToS or protection mechanism).

I’ve had Aviary and PDF export error out on me on a couple of occasions. I can live with that. But must you call them IO_ERRORs? That sounds more like the server ran out of disk space or something. And to non-programmers like my Dad, it probably looks like “ten errors” misspelt.

Nice to have: compressed PDF, with lowered quality. Try printing a 60 MB PDF some time, or re-uploading it — when just a link would have sufficed.

For that matter, why limit social sharing options to only to Facebook? How about Twitter, LinkedIn and dare I say, SlideShare integration as well? (PS: Do people really share presentations on Facebook? How about a good old “Email this” shortcut?)

There is tremendous potential to use Prezi as a content generation tool if it allowed exporting to video, or directly to YouTube (and/or Vimeo). Think tutorials, troubleshooting guides, walkthroughs and just plain not having to talk over and over again — present it, record it, share it. Other people seem to have the same idea, too.

And if only there was a way to present to the second screen, so in a presenter view (or just Edit mode) I can see what’s coming next and how I’m doing with my timing.

Use Your Imagination

sod2

Animated GIFs are still the quickest way of demonstrating processes in action, for example. Importing Google Spreadsheets and converting them into graphs within the editor. Powerful timelines like TimeGlider. Simple maps like OpenHeatMap. Leveraging the zooming and object hierarchy features to build a MindMap mode (which may even serve as a foundation for the final Prezi). And why limit the zooming and rotating to 2 dimensions only? I would love to make a Prezi with 6 slides, each represented on a face of a cube which can be rotated in 3D space. After all, the future of storytelling is going to be virtual and immersive.

(Here’s an idea: API and plugins).

Prezi is great, but that’s no reason to not be even greater.

(Or just release the Kraken: make it open source, let us fork it and watch how people use the platform to build even more clever ideas for telling their stories).

 

 

 

Amuse UX Conference, Budapest

Last week, I had the privilege of being part of a group attending the first edition of AmuseConf on behalf of our company. Amuse is “an international conference for anyone interested in how to design and develop successful products that users love”. It’s organized by the same good folks that bring us the outstanding CraftConf year after year, sponsored primarily by Prezi and UStream (and SAP in case of Amuse). They did a near-perfect job, with only minor glitches with the seating and catering on the first day. Considering that the Big Data oriented CrunchConf was also literally next door, the event was practically flawless. Fast, uninterrupted WiFi and no food options for vegetarians/vegans remained a hallmark this organizing team (even though Tom Illmensee, event MC is himself vegetarian 😉 ).

(BTW, if you’re wondering why so many tech conferences are being hosted in Budapest, the event’s WiFi password should give you a hint):

20151103_083708867_iOS

510 attendees from 32 countries (as far away as Australia) made Amuse a roaring success, as did its impressive lineup of Speakers27% of the speakers were women, which is great for a tech conference — I hope next year we have even more!

Below is a summary of the talks I found the most relevant to my work. But by no means does that mean you should skip the other talks… depending on where you are and what you’re doing, you might be interested in some of the eclectic topics covered such as:

  • Designing web interfaces for children by Trine Falbe
  • Conducting research outside “sample of convenience” by Bill Selman from Mozilla Foundation
  • Design Thinking by Tobias Haug of SAP (my favorite quote: “Innovation = Execution x Creativity”)
  • How to get your dream UX job by Andrew Doherty of Google (worth checking out just for his mad presentation skills)
  • The Ethical Designer by Cennydd Bowles
  • Storytelling in a multidevice landscape by Anna Dahlstrom

Design Equilibrium

By Jonathan Lupo

Jonathan opened the conference with a very engaging talk drawing parallels between businesses and ecosystems: a “balanced exchange of value between Actors, Enterprise and Brand”. He gave practical examples citing the application of Lynn Shostack’s work on Service Blueprinting to a transformation in the healthcare industry. I strongly encourage viewing his inspiring talk on YouTube.

His core suggestion is a separation of Product Design from Service Design. The latter “fills in whitespaces between points of [rich] engagement provided by products”, helping to restore balance to the overall experience, and hence the business ecosystem. This is the real intangible value of services, as opposed to products.

He also proposed the concept of an “Engagement Model”: a framework to contextualize all the data a business collects.

UX: Design as a Science

By Joel Marsh, author of the UX Crash Course

Joel’s key message was that “Scientific UX Design is reproducible”: essentially drawing on the principles of the Lean Startup and applying them to the UX domain. His presentation was one of the most popular and engaging ones, and his quotes and examples garnered a lot tons of positive feedback. One thing that struck me was his exposition on the two types of creativity: Creative expression and creative problem solving. He noted that an over-applicability of creative expression can make you feel good as a designer, but result in an over-designed and bloated product:

ArtVsDesign

Another talk I would highly recommend watching when it comes out on UStream.tv.

Making Dog Food a Part of Your Balanced Diet

By Toby Sterrett

Toby used his work at Simple Bank to highlight the pros and cons of “eating your own dogfood”. The initial employees used the app themselves, and one of the downsides was that the missed revelation that users of such a smooth app had to deal with a paper form-based process to close their account, which took up to 20 days.

Another inspiring talk that you should definitely check out, full of quotes of wisdom like:

  • “Delight is design’s superpower”
  • A past discussion on Leadership strategy: “Build a shared vision, get the **** out of the way”
  • “UX is not about throwing technology at a problem, but throwing people at a problem”

On the other hand, Simple A/B tested as many as 16 variations of their login page (for more examples, check out UserOnboard.com).

Live posters being created by @remarker_eu

Live posters being created by @remarker_eu

How We Built Hotjar and Onboarded 50k Users in a Year

By Dr. David Darmanin

David used practical examples from Hotjar to support his model of “Drivers, Barriers and Hooks” when dealing with site visitors. He also put a quirky twist on some timeless wisdom:

The two most amazing insights for me were:

  • Hotjar captures every single customer interaction on a Trello board, and uses that feedback to prioritize their features.
    • They also make their roadmap public, which demonstrates their commitment and at the same time reduces enquiries about feature requests
  • They use the income from their paid customers to fund the creative freedom to build features for their free customers

The Invisible Interface: Designing the Screenless Experience

By Avi Itzkovich

Avi, founder of UXSalon, opened with a discourse on recent editions of Microsoft Productivity Future Vision. From there he led the discussion on towards a future without bigger and wider screens (which wouldn’t require “superhuman arm strength”):

  • “The most profound technologies are the ones that become invisible” 
    • Like automatically opening sliding doors
  • “Voice UI is the future”
  • “Gesture control is here to stay, but not on screens”

The Best Interface is No Interface

By Golden Krishna

Golden surmised that we are all “chipping away at digital chores”, and we don’t have to be “slaves to screens”. He has laid the foundations of the #NoUI movement with his book“The Best Interface is No Interface”. His excellent talk (slides here) was supported by book reading and real examples. Also, don’t forget to check out his accompanying toolkit on “how to create elegant solutions with no screens”.

For further inspiration to join the movement,  take a look at his Producthunt collection of “interfaces that require little or no time with screens”.

Magical UX and the Internet of Things

By Josh Clark

Josh opened with an announcement of his book release: “Designing for Touch”. His presentation was literally magical, complete with a wand, to the point that he managed to tie in together excerpts from preceding talks and put the whole conference in perspective. I found a similar slidedeck from one of his previous talks here, and I highly recommend taking a look at it while we wait for the official conference videos to come up on Ustream.tv. It was a treasure trove of out-of-the box examples like:

  •  Augmented REality Sandtable (ARES), which literally turns dirt into a high-tech, military-grade user interface… using not much more than a Kinect and projector
  • Grab Magic, which brings superpowers to data transfer
  • Propeller Health, which connects Asthma inhalers to phones for health monitoring

Josh’s key message was “interaction at the point of inspiration”: that we should think of “the whole world is an interface, just like it has always been”. He proposed “thereables” instead of wearables: bits of smart technology in the physical space where we would expect to interact with them, not something we burden ourselves by carrying or wearing all day long. To this end, he suggested that “the smartphone is Magic Wand 1.0 for everyone” and we should start thinking of it as just more than a screen.

IMG_4185

Regarding user interfaces, he had 3 bits of advice that I found remarkable:

  • “Technology should amplify our humanity”
  • “We shouldn’t educate users on how technology works, unless we really *have* to”
  • “Honor intention, don’t assume it”

Josh ended with a call to action:

Like this one.

 

 

 

 

 

Such UI, Much Refactoring

As the entry barrier to developing software gets steadily lower, as agile development practices (release early, release often) gain popularity and as the success stories coming from continuous and/or early feedback become industry legends, we find ourselves in a world where perfection is no longer a differentiator, it is an unspoken expectation and an implicit requirement. This applies even to products and services that are virtually free for the consumer. When was the last time your social network was down? Or your maps app crashed? Or you discovered a bug in your favorite (modern) web browser? For that matter, do you even know (or care) which “version” of software you are using?

Welcome to the new reality of iterative perfection.

But iterative perfection brings with it the cost of iteration: the cognitive load on the user having to continuously re-learn, re-orient and re-familarize. I’m not referring to the the step change introduced by MS Office Ribbon UX, or desktop apps migrating to Web UI interfaces… But smaller, mostly less disruptive tweaks and updates (usually referred to as “minor improvements”). While many of these affect the inner workings or performance, a seemingly high proportion directly affect user experience. In the spirit of the development process they hatch from, these changes are small & frequent, and are sometimes even rolled back if found to be unpopular. A fashionable “iteration” these days seems to be changing the colors or shapes of icons or other UI elements.

Making a product faster, more stable or more secure is one thing, but is tweaking the user interface of a product that is already in production a good thing? Does familiarity breed contempt, or confidence? There was a time when building a great product was given due recognition – success had been achieved, the job was well done, lessons were learned and everyone moved on. These days we change things – partly because we are expected to, but mostly just because we can.

mib_look_good

Think about it. Once an idea has been commoditized by a company, what is the motivation for further innovation? The trend these days in web products is to keep revamping the User Interface every few months (sometimes weeks). To me, that is a reflection of a bigger issue than vying for the often limited attention span of modern consumers (through brighter and shinier objects).

What I think really happens is this: A bunch of smart people are hired, they build something great together, but now neither does the company want to let go of them (they’re smart, committed employees) nor do they have a plan for what ought to be built next. So, they resort to iterations and improvements (often poorly made choices to emulate a successful but unrelated product) to keep the “resources” or “talent” busy. Maybe sometimes the boredom gets so much that the only way of injecting vitality into what was once an awesome startup is to acquire one (which seems to be happening a lot these days, at atrocious values).

Secondly, having a continuous release schedule [perhaps subconsciously] puts pressure on the development team to deliver some tangible change with each release. After there is nothing left to add or take away, well, there is still the user interface.

I think as engineers, UX practitioners, software developers, product managers and builders of things, we all ought to learn how to recognize perfection when we have achieved it. We need to iterate less and progress more.

Update 2015-02-18: What Happened to Apple Design? by Jose Berengueres mirrors some of these thoughts.

User Stories vs “The User’s Story”

Last year I bought DiRT3 for Windows DVD on sale. Based on its ratings, It seemed a good candidate to try out my Poor Man’s Xbox: An Xbox WiFi controller connected to a Windows laptop, hooked up to the TV.

Even though I had bought a DVD, it wanted me to register online with a Windows Live ID. Well, if I wanted to play a game online, there are plenty of options. Why would I buy a DVD? So every time I started the game, I would select some fake name, configure all my settings (controller, driving aids and so on). But because I had refused to sell my soul, the game wouldn’t save my settings locally.

After a few times I got fed up and decided to create an ID. How hard could it be, right? Right?

reality

Let the Games Begin

It had read before on that gmail addresses can be used for Live. So I provided mine at the game startup. A few “Next” clicks later, it refused to recognize it. Then:

  1. Exited game
  2. Fired up web browser
  3. Went to Microsoft site
  4. Registered my gmail ID for the Live service. What fun, a verification email was sent.
  5. Opened gmail
  6. Clicked on verification mail. Read through cheesy welcome notice.
  7. How cool! Now I have a free Xbox Live gamertag. Which I can change. For free. Only once.
  8. Decided if my profile was going to be online, might as well use a gamertag that my friends would recognize. Isn’t that the whole point of social gaming?
  9. Changed gamertag. Now my Xbox Live page was in a state where the new gamertag appeared in some places, and the original was still retained in others (e.g. the logout option)
  10. Logged out, logged back in to make sure the change had taken effect (standard Microsoft workflow: If it acts weird, restart it)
  11. Still the same. OK, whatever. But wait… in doing all this experimentation I discovered “Privacy Settings”.
  12. Changed my privacy settings to sane ones. Hopefully they were mine, because they still referred to the original gamertag.
  13. Finished, closed browser
  14. Fired up game

You’d think that 14+ steps to register for playing a game would be enough. But no. Now that I had a valid XBOX Live ID, I could log in. And now that I had logged in, I needed the latest updates to the XBOX Live gaming system installed on my laptop. Someone had decided to reuse code for this: it would be installed as a Windows update! And guess what, after that I had to restart my laptop, too! Because apparently only selling your soul just doesn’t cut it these days.

But finally I was getting close. I had restarted laptop and game, logged in and voila! Since by registering online I had clearly indicated that I’m heavily into social gaming and all that, now I was being asked to supply my YouTube credentials so in-game video could be uploaded to my channel. Which doesn’t exist.

Past that , the game wasted some more seconds checking for Downloadable Content. Which I was least interested in, considering that I had barely even played the game yet. But, it still checks every time I start the game. The exact same check every time, which notifies me about the exact same shiny new packs available, which I’m exactly as disinterested in.

And here is the highlight of the whole experience: After going through the effort of registering online, I still have to re-configure my settings every time I start the game. Because apparently saving a few strings of text to a file requires something more that investing in a laptop, operating system, DVD and Internet connection. In the attempt to play this game, I spanned 2 types of storage media and 4 internet services,  gave up my privacy and recreational time, and it still forces me to use factory settings. On the other hand, the graphics are a generation ahead, the menu has 3D text and the game makes the CPU generate unbelievable amounts of heat. Which is exactly how things were back in 1996.

Conclusion

1. User experience and usability are not just about product features. They are also about the experience of reaching the point where the product can be used. Any software that requires more than 10 steps and an hour of time is unusable.

2. In the year 2014, the only reason I should be forced to restart my computer is to prevent catastrophic meltdown. Not to install updates. What’s next, autonomous cars pulling over on the side of the highway and restarting because the manufacturer decided to push updates?

(EDIT: I wrote this as a joke but a reader pointed out that this is actually happening right now: Where’s my Knight Rider 2000?)

3. This whole experience stank of multiple individually proven and smooth solutions sloppily strung together to deliver working software. I can bet Codemasters and/or Microsoft were thinking they were being agile, leveraging reusable components and delivering in an impossible schedule. All the user stories were delivered, but did anybody step back and think of the user’s story?