Image from page 400 of “The Palm of Alpha Tau Omega” (1880)

It’s coming up on nine years since I first started slinging code in a professional setting. Professional here meaning with a salary, in an office, with other engineers, decent coffee and unreasonable deadlines.

Back then I was barely newly minted from school, and what I lacked in understanding I certainly carried in hubris. I remember being vaguely offended not to be on the list of Sweden’s top coders that year. No idea how they would’ve found me, but I still remember being annoyed by it.

What I’ve lost in hubris in the last nine years, I’ve gained in experience. I thought it’d be useful to punch down a few things that it would have been nice to know nine years ago — maybe it can help you, if you’re just about to take your first steps out of school.

In no particular order, here are nine things I wish I’d known when I started out:

  1. Experience counts for something. This is obvious, and maybe a bit condescending. But I remember the first time I saw a colleague in a live, heated situation pull up YourKit and hone in on the fact that we’d have two ServerInstanceFactories, not one, and that caused the entire app to go belly up. Or when I got literally smacked on the fingers for not using two-phased locking correctly. And a thousand other things. My first two years of working, what I mainly learned was that I basically didn’t know shit.
  2. People are messy. I’d love to know how many hours humanity as a total spends every day mediating between two or more angry 40-year old men. Most of the time, you’ll find reasonable people that don’t share your point of view on things, and you are not obviously right. There are tradeoffs. And sometimes people hold on to stupid ideas longer than they should, simply because they’re people. It’s a great irony that software development demands literal, logical, unambiguous reasoning while being complicated enough that you need to collaborate with ornate, arbitrary, ambiguous humans.
  3. You’re not logical, you’re biased. If there was one thing I was certain of was that I reasoned with logic and soundness and that I thought things because they were true. Things such as — we hire people only because of merit. Obviously. What I’ve learned is that any point can be argued from many angles, and who I am, where I was raised, what I studied and who my friends are all influence what I think is obviously true. I’ve also learned that I’ll likely never be Spock, and that the only reasonable defense is to invite different points of view, and accept that reasoning from different premises can lead to different conclusions, and still be logical and sound.
  4. You can use engineering for other stuff. As a flipside to above, I’ve also learned that the method of engineering that you learn in school and hone over the years is useful for a ton of other stuff than just programming. What engineering is to me is a way to define, decompose and reduce a problem space, and from that reason a solution under balanced constraints. Really, figuring out what you’re asking, and then answering that. And turns out that anything from sales, marketing, finance, design to analytics are super-susceptible to this. Don’t be afraid to dive in. It’s usually pretty simple to get stuck in.
  5. Users are not stupid. This one is a big one. When users complain about your product, it’s usually not because they’re stupid. Your dad, uncle or whatever that don’t really understand Facebook are not stupid. They just know other shit, and they haven’t learned this stuff yet. And that’s Facebook. They have literally hundreds of user researchers making Facebook simple. When your uncle doesn’t understand your app, it’s probably because it’s pretty unusable. Don’t blame users for that.
  6. Engineers have professional responsibilities. If you work with software in a company that makes money, chances are you have users. Even if you’re building Spotify, not a pacemaker, you still have a responsibility to your users. They’ve chosen your product, and if it sucks, they’re suffering and it’s your fault. This means that if you’re out chugging beer, the systems you maintain go down, and no one else can pick them up, you get a cab home and fix it. Obviously, don’t let a company take advantage of this responsibility. You should get reasonably compensated. But it’s still a responsibility. You can’t laugh off service disruption.
  7. Inverting a tree is useful, but not in the way you think it is. I’ve always been a strong believer in academic knowledge, and I loved taking the hardest courses. Particle filtering, non-linear signal processing, abstract algebra, advanced algorithms, etc. If it looked hard I wanted to know it. However, the point of Red-Black trees is not Red-Black trees. The point of graph traversal is not graph traversal. The point is, the tools you have shape how you solve problems. And the deeper the understanding of graphs you have, the easier it will be for you to see that a problem is a graph problem. Just like if you know enough economics, you can see business problems as market problems. And so on.
  8. Integrating early is always better. This is really mundane compared to all the other grand advice, but if you’re a bunch of people working on a piece of code, avoid branches and avoid submodules as much as possible. It’s really not better to work on your own branch until all is nice and then merge back. Merge early. Merge often. Otherwise you’ll spend a month merging. I promise. Like, I really, really promise … and actually, I guess there is grand life advice here as well. If you and someone you depend on disagree on something fundamental, don’t hold a grudge. Hash it out, as early as possible. Make sure you see eye to eye. The process and the product will be all the better for it.
  9. Simpler is literally always better. I saw someone write something like “Software engineers spend their first two years building complexity, and the rest of their careers managing it”. This is true. Really true. If you can avoid it, never write a dispatcher. Never write an orchestration framework. Don’t use Java if a bash script will do. Solve the problem you have now, not the problem you might have later. Nothing makes you feel as smart as a well architected, abstract framework for solving really complicated, general problems. Nothing makes you feel as stupid as not understanding how to debug it.

Anyway. This is my list. The nine things I wish I knew nine years ago. It strikes me now that current me would love to see the list Nine Things I Wish I’ll Remember In Nine Years. What stuff have I forgotten that would warp my perspective? I’d love to hear your take on either this, or what I missed on this list.

By: Marcus Frödin from Spotify

https://medium.com/@marcusf/nine-things-i-didn-t-know-nine-years-ago-fcbc757b268b#.9xksp8f8t

Self selection – How to restructure your team for greater autonomy.

May 16, 2016

One of our largest departments within Ocado Technology recently undertook a revolutionary self-selecting restructuring exercise, changing the entire structure of the department whilst allowing all team members to choose which team they would like to work in going forward. The need came about because multiple teams were stretched, working across two major business propositions and context switching between them. The goal was that following the restructure there would be a clear split between teams working on two different business propositions, such that each of those teams could really focus on that product.

ukteamsanonymous-

The overall aim of this restructure was to achieve greater alignment, autonomy and purpose.

Following the principle that a collaborative and distributed approach is often the best way to solve a complex optimisation problem, we decided to take a full day as a whole department to stop work and have a facilitated event to negotiate the moves amongst the five new teams. We did a lot of thinking and preparation prior to this day and the teams used a set of constraints around team size and experience levels to guide their decisions.

The plan going into the event was shared well ahead of time to allow people to get their questions in (and added to a shared FAQ forum) and to be sure the concepts were clear going into the day. Alongside this, we ran multiple “townhall” sessions where people could air their concerns and ask their questions openly. We hoped that at the end of the process we would have well-rounded, committed teams ready to face the new challenge.

There was a certain amount of ad-libbing and practical adjustments on the day, but on the whole it unfolded according to the plan:

– First, a pitch for each team by the Product Owner, covering the vision/roadmap and why the team is super cool and awesome. There was also a set of target criteria for each team as a guide for what we were looking to achieve in each area.

– Next, multiple iterations where we:

1. Assigned or moved ourselves/each other between teams until we’ve addressed any identified issues in         the previous iteration.

2. See if we had met the pre-defined criteria for each team.

3. Repeat until we run out of time or we meet all of the requirements and everybody is happy and                       committed to the team that they are in.

Fuelled by 18 pizzas, we completed three exhausting rounds of moves and peer voting. At the end of each round, we (everyone, including Product Owners and Team Leads) voted on the viability of each team. From this we measured two scores: an intra-team score (the people in that team scoring the viability of the team), and an inter-team score (the rest of the people scoring the viability of that team). This lead to a few interesting dynamics, for example one of the teams gave themselves a high intra-team score, but scored low on the inter-team vote. They then gave a pitch justifying their viability as a team, and were able to dramatically increase their inter-team score in the next round.

The first round was deliberately obviously suboptimal, so that everyone was motivated to suggest changes and improvements and become comfortable with doing so in a very “safe” way. Naturally, this configuration had dramatically lower scores! This encouraged a large amount of movement in the following rounds, as we had hoped.

votingresultsanonymous

Essential to finding a viable solution was an appreciation from all of the ‘greater good’ of Ocado Technology. On the day, some people chose to make some really big compromises in order to serve the greater good and allow us to form balanced teams that are all capable of smashing out quality software.

After the final round of voting we then took a quick anonymous happiness reading by each dropping a green, yellow or red lego piece into a box. Although they were not perfect, we were extremely pleased the results, considering that our original goals was “at least 50% happy”.

Screen Shot 2016-08-16 at 1.23.46 AM

The very next morning we did a big-bang desk move:

image-resizer

We’ve since kept a close eye on the impact of the shuffle-up by measuring the things that matter most to us: throughput and team happiness. There was an expected initial dip in throughput as many people got up to speed on new products they had not worked on before and as new teams gelled and got to know each other. But the throughput three months on has risen higher than before the change and still rising. Improvements in team happiness (measured before and after by Spotify’s “health-checks”) were noteworthy from straight after the restructure.

In terms of the solution itself: we are delighted. Every team has a reasonable level of experience whilst a healthy number of people have chosen to change domain. It is a vastly better result than we could have hoped for had we chosen a top-down approach and the sense of autonomy it has created is invaluable. It seems that teams and individuals have a stronger sense of ownership than ever before and that they are taking quality more seriously than ever before. This did have an up-front cost in terms of short term throughput, but the long term benefits certainly justify it.

James Lohr, Ocado Tech Department Head

Scrum Gathering Orlando Through The Eyes Of A Live Illustrator

May 17, 2016

Equipped with my graphic board, pens, sunglasses and shorts I set sail for the Scrum Gathering in Orlando. Having attended two awesome gatherings in the past, the bar was set high – however, I was far from disappointed.

From the offset, co-chairs Anu Smalley and Kate Megaw knocked it out of the park by entering the stage to the sound of ‘Starman’ by David Bowie, whilst wearing convincing spacesuits complete with helmets. This was their genius way of setting the Gathering’s theme ‘Infinity and Beyond: Transforming the World of Work’. With three tracks on offer, ranging from beginner (‘Mission Control’), intermediate (‘Orbiting the Earth’), to advanced levels (‘Agile Galaxy’), there were more than enough sessions to choose from for all 1100 attendees. Let’s not forget that this was the largest Scrum Gathering so far.

Although each session had a unique offering, there was an obvious key topic that resonated from all talks. During the CST/CEC retreat ‘Agile Leadership’ was introduced as a pressing subject, with one attendee keen to highlight the distinction between ‘Leaders’ and ‘Managers’. Brian Rabon reminded everyone that ‘Agile starts with Leadership’ during his opening keynote. A panellist on the PWC keynote pinpointed that any organisation would struggle without ‘Agile Leadership’, and Steve Denning went on to inform the audience during his ‘Agile Leadership’ talk that the key driver for ‘Agile Leadership’ is having a different mindset.

Leon Sabarsky identified during his ‘Extreme Scrum Hiring’ talk that an obvious flaw when interviewing individuals for team roles is to interview them on their own. His key takeaway was to move away from ‘One-on-One’ interviews by considering ‘Scrum Team group interviews’. This approach enables individuals to be assessed based on their engagement within the group, and demonstrate the qualities required for being an effective team player. It all comes down to good collaboration and communication, folks.

Leon noted that:

“the number one criterion that Scrum team members ought to be measured against is their Collaboration skill. It’s relatively easy to teach people a domain area, Agile methods and a specific technology. However, I can’t teach someone to collaborate well. They either have it or they don’t. If they don’t, they will reduce team effectiveness and cohesion over time.”

Another talk with an interesting twist was ‘Scrum Team CRM: Aviation Crew Resource Management Techniques for Scrum Teams’ by Thomas Friend. Using the narrative of flying aircraft, Thomas made strong comparisons between ‘Aviation’ and ‘Scrum’. Once again, the underlying message here was good communication.

During the Gathering another inspiring movement was unfolding. A group of passionate Agile Educators met face-to-face to carve out a manifesto for Agile that is authentic to Education. With a variety of case studies demonstrating how Agile values and principles have been adopted within an educational setting showing proven success, this group of innovative leaders were making a difference. They set out to define a vision and values for what resulted in the ‘Agile in Education Compass’, an inspiring model for how education can respond to the modern world with agility.

Once again, I had the opportunity to take to the pen and draw key insights from beginning to end. The canvasses enticed the crowds, and people soon took to Twitter to share the learning and store the visuals as a reminder of the Gathering.

Alongside this, on the final day, I couldn’t resist suggesting an Open Space topic around the use of ‘Graphic Templates’ which can assist coaches and facilitators in communicating with pictures. The session was a great success and those that attended were satisfied with their newly gained visual skills.

“Visuals speak volumes, this workshop encouraged me to draw and take these skills back to my team.” – Lynda Menge (workshop attendee)

Whether you wish to enhance your facilitation skills, make collaborative design thinking a key enabler within your team, or simply gain the confidence you need to draw live in front of an audience, join me for a one-day ‘Innovation through Visualisation’ workshop in London on the 1st of June or Atlanta on the 24th of July.

My final point on what drives so many people to attend the gatherings: passion and the desire to collaborate and share ideas. People attend these fantastic events for the discussions and seeds of information that are shared over breakfast, and last well into the evening over a cold beer, the networks that grow, and the desire to continue to collaborate way beyond the event.

I look forward to sharing some ideas with you at the next Scrum Gathering.

By: Stuart Young from Radtac

http://www2.radtac.co.uk/blog/scrum-gathering-orlando-through-the-eyes-of-a-live-illustrator/

 

Why we should lean into risk in Brexit Britain

May 10, 2016

I was going to write a blog about risk. I’d whip through the theory, focus on the practice, and back it up with science.

Then the referendum happened. And now, depending on your view, the country’s either deep in the mire, or free to succeed. The markets have crashed, but might bounce back. Hate crime is up, but might be a blip. We’re living in uncertainty, and we don’t even know how long it’ll last.

All of that feels uncomfortable and risky. So to write about risk without acknowledging the uncertainty around us feels a bit absurd. We’re already awash with political analysis, so I won’t add mine. But whether you’re delighted, devastated or unmoved by these events, it’s an interesting moment to take a look at the parallels with organisational and personal change.

Major change throws the status quo in the air. Before it settles, as it inevitably will, we can make some choices. We can pretend it’s not happening. We can choose to step back and see where the pieces fall. And we can choose to take a risk and lean into uncertainty. These are decisions organisations are making now – as they’ve done before and will again. Individuals are doing the same.

Unless you’re very lucky, pretending nothing’s changed will leave you baffled, and your colleagues disengaged. It’s also, counter-intuitively, a lot of effort. Our ability to adapt is part of what defines us as human. So while adapting might be hard, refusing to is exhausting. Sometimes, of course, the wisest move is to hold your horses and wait for a new normal. But you forfeit the chance to shape it, and risk being left behind.

Choosing to shake hands with uncertainty can be complicated and uncomfortable. It can also be profoundly creative. If you can lean into that, there’s scope to experiment with new ideas and products, have different conversations and make unexpected connections. You might fail, you might succeed, you might create something a bit… ‘meh’. But you only find out if you take the risk. And whether or not it’s sparked by external events, embedding a culture of testing, adapting and improving will reap benefits well into the future.

Thing is, it’s not easy. There’s a gap between intention and doing. And however much you want to, crossing it can seem boring, painful and hard work. And once you do cross it, there’s no guarantee it’ll work. Ugh. Why bother? It’s somehow easier to feel disrespected afterwards than to challenge in the moment. To feed back to your friends instead of your colleagues. To work within stasis than to venture an alternative.

But that ‘ugh’ is worth the bother. It’s when things shift, and when you learn. Plus you reinforce in yourself and colleagues that, whatever the outcome, you are people with the agency to create change. You’ll be more likely to do it again, helping build a culture of creativity in yourself and others.

So where to begin? Here are three initial suggestions.

1. Acknowledge fears, but don’t draw them out. Give yourself three minutes to project the potential range of outcomes from best to worst. Then begin, ditch or adapt. You’ll only find out what actually happens by taking the risk, so don’t waste time on the fundamentally unsound, or delay the great.

2. Solicit feedback; ask, listen, learn, adapt. And be specific: work out exactly what you want feedback on, and ask questions within a clear remit. This shifts the focus away from egos (easily crushed, despite denials) and towards ideas. Seeking feedback can feel like a massive risk in itself. But the more you do it, the easier and more useful it becomes.

3. Build networks. It’s exhausting taking a risk on your own and it takes ages. Talk to people who disagree: diverse opinion makes for robust ideas. And test the idea as soon as you can, drawing on your network for support. Make sure your network includes people unconnected to your idea, but who can help you reflect on progress and remain resilient. Action learning sets and peer mentors are ideal.

I’m not suggesting all ideas are sensible or risks worth taking. But change is definitely coming. New systems, new products and even new industries may emerge. I hope that as organisations and individuals we’ll be inspired to lean into risk when we encounter it. Start experimenting, adapting, innovating. The status quo has been shaken, and will rebuild. The space in between is yours to shape.

By: Kamala Katbamna from Chirp

http://www.chirp.org.uk/new-blog/2016/6/29/risk-taking-in-a-post-brexit-britain

1 Comment

Leave a Comment

Your email address will not be published.

Comment *

This site uses Akismet to reduce spam. Learn how your comment data is processed.