Christian Heilmann

You are currently browsing the archives for the General category.

Archive for the ‘General’ Category

Ink-trap development

Thursday, March 1st, 2018

Sometimes you see things that look a bit off and it makes you feel uneasy. When something challenges your sense of quality and what appears well-made. Like the following font:

Bell centennial demo

This doesn’t look good, and it doesn’t look right. It feels like someone didn’t quite finish it or didn’t know how to use tools. Or – even worse – didn’t use the right tools for the job. This font, for example, looks like my first attempts to get my head around vectors in Photoshop. Not a memory I cherish.

In the case of this font, though, nothing of this applies. What you see here is Bell Centennial by Matthew Carter, a well-regarded font expert. It is a font that has seen a massive amount of use.

You may not recall ever seeing it, but here’s the deal: Bell Centennial was the font used in AT&T phonebooks. The weird missing parts of the letters in it are so called “Ink Traps”. The genius of the ink trap is that it makes the font work when applied in its natural environment.

inktraps

Phone books shouldn’t cost much to print, which is why they use cheap paper. They also are big and should use small fonts, allowing for more content in fewer pages. In essence, the implementation phase of the project phone book tried to cut corners. Staying as cheap as possible.

This is where the ink traps come in. Ink bleeds out on cheap paper and blurs the letters. A font with no spaces can thus become unreadable. Not so Bell Centennial. On the contrary – it gets better and more legible when printed. The ink traps fill with ink and make the weirdness of the font go away.

M in design and in print

Bell Centennial in use

I like this approach a lot. There is a lot of merit in creating something and assuming a flawed implementation. As they all are in one way or another. By leaving things out to become available later – or not at all – we can concentrate on what’s important. A solid base that may not be perfect, but will not expect the implementer to do everything right, either.

Because they never do. In twenty years in this industry I’ve never seen a project get out the door the way we planned it to. It was even more common to see projects getting cancelled halfway through. And not only waterfall projects. Even the safeguard of the Agile Manifesto keeps failing.

In-build failure obscured just enough to make money

When I worked for an agency in the B2B space this seems to be even a common theme. Get the project, make sure you have a nice round sum in the contract that you have to pay in case you fail. Then pad the project with lots of unnecessary but expensive heads in the early stages. Bill all those to the client. Mess up and pay the fine when everything goes pear-shaped, leaving you with a nice profit.

We want to build for the future…

As a technical person, these projects were frustrating to work on. We’re lazy. We don’t want to do the same things over and over again. We want to do something and then automate it. We are all about making sure what we do is maintainable, extensible and follows standards. Because that makes outcomes predictable. For years we’ve been preaching that our code should be cleaner. It shouldn’t make assumptions. It should allow for erroneous data coming in and trying to fix it. It should be generic, not specific. We preach all this to avoid unpleasant surprises in the future.

Future imperfect

And yet, I have a hard time remembering when projects that we put so much effort in ever became a reality. They got out, yes, but somewhere along the way someone cut corners. And what is now live was never something I was particularly proud of. Other projects, that appeared rushed and made me feel dirty got out and flourish. Often they also vanished soon after, and oddly enough, the sky didn’t fall on our heads. Nobody missed them. They’ve done their job and overstayed their welcome. It was wasted effort to make them scale to forever and try to predict all the future needs. As there was no future for them. It is easier to fold and restart a software project than to dismantle and change a physical product. That’s the beauty of software. That’s what makes it soft.

I’ve hardly ever seen rewards of the hard work of making products maintainable in a clean manner. I am not saying they don’t make sense. I am saying that far too often, something got in the way. Something I had no control over. Often things I didn’t even hear about until things went pear-shaped:

  • Our well-thought-out design system hardly ever evolved with the product. Instead redesigns would wipe them out completely. Or the product would move to another CMS or backend. Out of a sudden this brought new limitations incompatible with the original design.
  • Our clean, accessible and semantic templates have a similar fate. Tossed around a few cycles of maintenance someone will have removed or warped the goodness we added upfront. Audits will flag this up, but with no immediate repercussions the invalid bits will end up on the backlog. There’s new things to add, after all.

New toys with new battery requirements

A common scenario is new product owners trying to make their mark by bringing the new tech hotness. Hotness they don’t understand and don’t hire able people for. Instead, it means starting new and following the “best practices” of the new hotness. What works for Facebook will also scale and apply to this internal payroll system, right?

Is failure a given? Maybe…

I’m sorry if this sounds bleak, but this seems to be a good time to re-consider what we are doing. We had a few decades of computers turning from a tool for scientists to them becoming an integral part of life. And this means we need to level up our game. This is not a cool tech thing to play with. This is a integral part of life. People’s identities, freedom, security, safety and happiness are dependent on it.

Broken toys

The quality of what we rely on isn’t that encouraging. If anything, a lot of the sins of the past now come to light – even on a processor level. We built a lot of spur-of-the-moment, good-enough things and hoped nobody looks closer. Well, the bad players of the market seem to be the ones looking and taking advantage.

When in the past we hid odd code in obscure byte code we now create huge dependency chains and lots of components. Components easy to re-use. Components not under the scrutiny of any quality assurance or security audits. Instead we rely on the wisdom of the masses and the open source community.

This would work, if the OSS world hadn’t exploded in the recent years. And if we didn’t tell newcomers to “not worry” and “just use what is there” to be more effective. We’re chasing our tail trying to be more effective and creating a lot with not much code. We move further and further away from the implementers and maintainers of our code. That’s what abstraction offers. Nobody likes maintenance. But it is probably the most important part there is. Any non-maintained project is a potential attack vector.

We forget that someone, somewhere needs to ensure that what we do doesn’t become a security nightmare. Instead, we create tools that check existing solutions for problems after the fact. This is a good measure, but it kind of feels self-serving. It also assumes that companies care to use these tools. And how they use it.

Case study: when the law required accessibility

I remember accessibility going through the same motions. When being accessible to people with impaired abilities became a legal need, people started to care. They didn’t care enough to look into their process of creating accessible products, as in – start with a sensible baseline. They didn’t want to understand the needs. They wanted to know how not to get sued. They bought a tool to check what’s obviously broken. They displayed a “Bobby Approved” or WCAG-AAA compliant banner on their web sites. They achieved that by adding alternative text like “image” to images. Satisfying the testing tool instead of creating benefit to visually impaired users.

This enraged the purists (including me) as it showed that people didn’t understand why we wanted things to be accessible. So we ranted and shone bright lights at their mistakes to shame people into doing the right thing. The net effect was that people stopped reaching out to experts when it came to accessibility. Instead they hired third party vendors to care on their behalf and build the thing needed to not get sued.

A lack of shared responsibility

It makes you wonder if we are trying too hard. If the current messy state of affairs in the whole of IT is based on a lack of shared responsibilities. Communication doesn’t help if it only states “don’t worry, it works”. An “of course our product will scale with you” is worrying without any shared ownership of the “how”. There is a disconnect between what we build and who maintains and uses it that leaves everyone involved disappointed.

This is tough to swallow and does rattle a few basic pillars of how we make money in the IT world. We build products and frameworks that enable people to do their jobs. We don’t want them to mess with the products though, so they become very generic. Generic solutions are less likely to give an optimised experience. They also are less likely to result in performant solutions catered to the current need. We throw in the kitchen sink and the plumbing and wonder why people run out of space. And we get angry when they start fiddling with the wrong pipes or don’t fix those that leak as long as the water runs.

Many products are terrible, but everyone involved didn’t do anything wrong

We’re quick to complain about users not doing things right. But we also never cared much about how people use our products. We hand this task over to the UX people, the trainers, the help desk and the maintenance staff. It is easy to complain about systems we have to use and wonder how on earth these things happened. The reason is simple: we created generic solutions and tweaked the output. We didn’t remove any extra features, but made them options to turn on and off instead. Many of our solutions are like a car with five steering wheels in different sizes. We expect the drivers to pick the right one and get cross when they’re confused.

Ink-trap development?

Maybe this is a good time to reflect and consider an approach like Matthew Carter did. We know that things will go wrong and that the end product is not perfect. So we optimise for that scenario instead of offering a huge, generic solution and hope people only use what they need. Maybe coding isn’t for a small, elite group to deliver interfaces to people. Maybe we need to have more involvement all the way from design to use of our products and we will create what is needed. This means that a lot more development would be in-house rather than buying or using generic solutions. Sure, this will be much more boring for us. But maybe not trying to predict all the use cases people might use our products for will give us more time to have a life outside of our work.

Working in IT isn’t an odditiy any longer, it is one of the few growing job markets. Maybe this means we have to dial back our ambitions to change the world by building things people don’t have to understand. Instead, we could try to build products based on communication upwards and sideways. And not those that only get feedback from user testing sessions once in a blue moon. People are messy. Software won’t change that. But it could give people ways to mess up without opening a whole can of worms by sticking to features people really need and use. We can always expand later, can’t we?

Twitter testing out a new “consequences” button? Not really…

Monday, February 26th, 2018

I just had an interesting experience after adding a German SIM card to my phone. The Android version I have told the phone to automatically switch all apps into a German mode. This can be handy, but I found it annoying.

Where it got really odd is in the Twitter Lite PWA-ish app. As it runs in a Chrome WebView the browser tries to be extra helpful and translates the interface back to English. That way I ended up with a “consequences” button, which made me do a double-take:

Twitter with a new consequences button

I thought it is a new way to deal with lots of answers and that you can vote answers up and down. I also was impressed that now tweets can like people, but no. “Follow” in German is “Folgen. And as a noun instead of a verb, “Folgen” in German are “Consequences” in English.

One more thing to worry about when a webview gets too clever for its own good.

Don’t pay me to speak – share instead

Friday, February 16th, 2018

No money

I just made an announcement on Twitter on something I’ve been doing for a while. Something I’d love more people with the same privilege as I enjoy doing:

It is a wonderful situation to be in a full-time employment and get the chance to present at events. It also is a tricky one. Your work contract often doesn’t allow any extra income. And even if that is the case, you need to deal with taxes and paperwork coming from that. You also don’t want to be the person taking a speaking slot away from someone who does it for a living and is great at it. Or someone who starts out and needs the pay to be able to afford it in the first place. You also don’t want to be a speaker because you are a freebie for the conference organisers.

Conference organisers are under a lot of pressure these days. They are rightfully asked to offer a diverse line-up and be open to lots of people to attend. Elitism and gatherings of the privileged are things to avoid. Sometimes it is hard for a small to medium conference to budget for that. It is not enough to offer free tickets. Often people who could benefit from an event and bring a different point of view can’t even afford getting there.

To help making this easier, I’ve been forfeiting my speaker fees for quite a while. Instead I ask conference organisers to put the money into efforts that bring people who can’t afford it to the event. It means no paperwork for me, no worries about annoying my employer and yet it means I am not a freebie presenter.

I hope that this helps a bit making what we have here even better than it is now. Thanks to all the conference organisers who put effort into this.

Photo by Neubie

Presenting about the P in PWA at Awwwards Berlin

Monday, February 12th, 2018

Last Friday I presented about Progressive Web Apps (PWA) at the awwwards conference in Berlin.

I was pretty lucky as @DasSurma also covered the same topic later in the evening with a more WordPress focused approach.

I am sorry that I couldn’t stay for the whole event, but we got booted out by security as my partner and me had brought our dog. We had asked upfront but there was a miscommunication between the organisers and the event staff. So we had to leave early.

The talk I gave was “Minding the P in PWA” and I covered the idea that we talk too much about the nuts and bolts of PWAs instead of seeing their benefits.

The slides are available at SlideShare

Taking the P out of PWA from Christian Heilmann

I am pretty sure that awwwards will soon release the video. Until then you can also watch the longer version of this talk at Skillsmatter which I gave last month at the London PWA Meetup.

The resources I covered:

  • What the web can do – a dashboard of extended features of the web like sensor access checking if your current browser supports it or not
  • Mozilla ServiceWorker Cookbook – recipes of different ways to use ServiceWorkers.
  • Google Workbox – an abstraction library to ease the work with the moving ServiceWorker spec
  • Google Lighthouse – an audit extension to the Chrome developer tools that lints and checks the quality of a PWA opened in the browser
  • PWA Builder – an open source project by Microsoft that allows you to pre-seed a manifest from an existing URL and create a ServiceWorker for you. You enter a URL, and you get a PWA and binary fallbacks for the PWA in the end.
  • Details on the support for ServiceWorkers and WebManifest in Apple Safari/Webkit – including some interesting facts about how Safari deals with defunct and old caches
  • PWA Stats – a resource by Cloud Four showcasing PWA success stories. This is great if you need to convince business owners to go the PWA route
  • PWA on Windows 10 – an in-depth article showing what Windows 10 offers to PWAs, including Service Worker support in Edge and web indexing of PWAs and automatic ingestion into the Windows store. There’s also a great tweet by @kirupa, showing “what a PWA would look like on Windows 10:

Again sorry for having to bail early, please don’t hesitate to contact me if you have more PWA questions.

Developer Evangelism interview on news.com.au

Monday, January 29th, 2018

This morning news.com.au ran a segment about new job titles based on an interview with me a few weeks ago. In the interview about developer evangelism I answered a few questions and – more importantly – covered the difference between sales and developer relations. Here are my full answers to their questions:

Article screenshot

In layman’s terms, how would you describe your job?

A developer evangelist (or developer advocate which is a term many prefer now) is an expert who helps developers use the products of a company and technical people in the company to get the time and support to write excellent products. The job is a communicator role between the technical experts of a company, the outside world, but also different departments of a company. Working in tech is a taxing job although it doesn’t look that way. A lot of people have demands but are not interested in understanding what you do – they just want the work done. The job of the developer evangelist is to bridge that gap. By creating learning materials, presentations and help with communication in between departments. Developers are excellent at solving technical problems and building great software. But many have neither the time nor the drive to communicate their efforts well to others. This is what we do.

Would it be fair to say you work as a sort of salesman for companies to encourage other people to purchase things from the company? Or purchase apps for example?

No, not at all. This is the job of a sales department and their main goal is to artificially create demand for a product. As a developer evangelist you help the product on a technical level. You create example projects using the product. You collect and collate outside feedback, triage it and then bring it to the busy technical team. You help people with technical issues. You create demand in the technical community by talking about the product and showing how it makes the life of developers easier.
If you do a classic sales pitch in the form of “you don’t need to understand this, our product magically fixes all your problems” you’re dead as a developer relations person. You need to have the technical knowledge and properly understand how the product works, not simply sell it. Of course, we’re all creating demand and interest, so in a way we are sales people. But what we sell is knowledge about the inner workings of the product to the outside. You sell your company as a place using cool tech to other developers. We sell outside interest back to the company helping it to priotitise product roadmaps. Good DevRel work doesn’t necessarily result in more product sales. Instead it helps with hiring new talent and ensure people in the company are happy. A company with a fixed product does not need a developer evangelist. When your product offers more granular access to its features using for example an Application Programming Interface (API) then you should consider bringing this role up.

As a comparison, consider a car company. The sales people are there to sell cars – customers don’t need to know the internals. A devrel person would be the one explaining mechanics how to maintain the engine. The person should present at conferences why your cars have great technology and are good for the environment. And explain that your company is much more than just a maker of cars. We create interest and explain how things work so people from the outside can contribute. We don’t sell products.

On your Linkedin you say, ‘I like to take complex technical things and translate them to various audiences in an understandable format’. Is that for people working for companies like Microsoft? Or the general public?

That depends on the event or publication I am asked to reach out to. I’ve explained tech and products of my former and current companies internally to our own people of other departments. I explained them to outside developers working for other, similar companies. I worked withthe open source community as a whole, designers, product managers, project managers and at one time also to people working in the unemployment office. That’s the “various audiences” bit in there.

The general public is less interested in the inner workings of products. It makes more sense to give this communication channel to marketing. However, a good developer evangelist works very closely with sales and marketing to make sure that your company advertisements and press releases don’t overpromise or make it impossible for your developers to deliver in time.

The job of a developer evangelist is to make technical issues easier to understand. This also means to help your company to communicate to the general public without dazzling them with buzzwords.

You don’t only to explain the how but also the why. And the why differs from audience to audience and needs different explanation materials. This could be a very well documented and explained piece of code, an exciting use case and demo app or a presentation. It boils down to being a good communicator and feel empathy with the audience. Far too many technical documentation assumes a perfect audience and thus fails to spark interest. Other information materials show a shiny best scenario but never explain what to do when things go wrong. As a devrel person you need to find a good middle ground.

How does one go about becoming a developer evangelist?

The perfect scenario is to move an interested developer of the product into the role. You need to know the products and technologies inside and out to be a good developer evangelist. People in technology have had their fair share of overpromise and slick sales people telling us things work that do – in fact – not. So you need to have the right “street credibility” or you’re just a sales person that tries to reach a very hostile audience. Personally I was in a lead developer role in a company when I transitioned. I didn’t see any more ways to get promoted on a technical level without moving into management. So I proposed the role of developer evangelist to help the company to improve our internal and external communication. I was lucky to find a sympathetic ear as this is a big issue for a lot of companies.

To start, you need to know what you want to talk about. You can’t only be a good presenter or writer, you also need to know the technical details and know what the market as a whole is doing. For developers or technical project managers who consider a role in DevRel it is a great idea to do a competitive analysis and find out what gets developers excited and how it relates to your company. Then you can start selling the idea of this role to your company. One thing to remember is that only your own excitement sells. If you don’t care about the technology you are supposed to promote or you don’t understand it, you will fail.

Do you developer evangelists work in every tech company? For example, is there a developer evangelist attempting to sell Candy Crush to developers or people looking for the next app to play?

I am pretty shocked how far this has grown. When I wrote the developer evangelism handbook there were only a few companies that had devrel departments. Now almost every technical startup has them.

However, the example of Candy Crush or next app to play is nothing a developer evangelist should do – at all.

King, the company behind Candy Crush most likely has developer evangelists. Instead of telling people about their new games they talk to game developers how to use their analytics, scoring mechanism and other internal features of games. Developer Relations (DevRel) is a hot topic now and a lot of people try to jump on the bandwagon. It kind of washes out the idea of what it is meant to do – improve communication between technical and non-technical people. Developers are a sought after community. They are early adopters and often they are ahead of the next wave of change in our markets. It is tough to hire talent, and it is even harder to retain them. A functioning DevRel department is there to make the technical people in your company be understood and proud of what they are doing. It is not about going to events and giving out T-Shirts.

Do you believe developer evangelists are just one of the many jobs people need to embrace/learn to do in the 21st century. If so, how should people start learning?

It is for sure one of the newer jobs and one that still needs proper definition. However, I would disagree that people should start as developer evangelists. It is a role technical people should transition into once they know your company’s products and goals. That doesn’t mean though that the skillset needed for it isn’t a thing everybody should be learning. We’re at a stage where technology evolves faster than humans. In the very near future it will not be about who can program, but who can use intelligent products that work for us in a sensible manner. Knowing what is happening at the bleeding edge of technology and finding simple ways to explain it is a skill that will become more and more important. It is especially important to make a conscious decision to avoid the drama and hype about technology. Right now, the tech world is getting a bad reputation of being horrible people who only look out for themselves and don’t care about what our products do to people. It is a good time to disprove this impression.

The beauty of our time is that the internet is a great place to learn all kind of things. You can use online courses to try out ideas and technologies for yourself and play with them. There is no certificate for developer evangelism. We’re still at a very early stage. You can use that as an opportunity.