Categories
.net code development

Thoughts on Global Azure Bootcamp 2019

I’ve got a collaborative post coming up on the talks themselves on my employer’s blog but as a speaker and tech enthusiast, I wanted to share a few thoughts on the bootcamp as a whole.

Firstly, I’d like to thank Gregor Suttie who organised the Glasgow chapter under the Glasgow Azure User Group banner.

It’s an impressive feat getting so many speakers on so many topics around the world. Each city is going to be limited in the talks they can offer, but I was impressed by the distances some of the speakers at the Glasgow event traveled.

I would have liked to have been more of a global feel. I know the challenges of live video, especially interactive, but this is an event that would benefit from some of that (or indeed, more speakers participating the the online bootcamp via pre-recorded YouTube videos). I realize an event like Google I/O or Microsoft Build is different in focus, being company rather than community driven, but it felt like a set of parallel events rather than one, so it also feels as if some of the content is going to be lost, and there were a lot of interesting looking talks in other cities that turned up on the Twitter hashtags.

There’s obviously a lot to cover under the Azure umbrella, so it’s going to be hard to find talks that interest all the audience all the time, and it was hard to know where to pitch the content. I aimed for an overview for beginners which I think was the right CosmosDb pitch for the Glasgow audience, but I was helped by the serendipity of coming after an event sourcing talk so I could stand on the shoulders of that talk for some of my content.

I would maybe have liked to see more “virtual tracks” so that it was easier to track themes within the hashtags, whether it’s general themes like “data” or “serverless” or technology/tool focused like “CosmosDB”, “Azure DevOps” or “Office 365”, to help me connect with the other channels and see what content is must interesting to follow up. Although Twitter was a good basis for it, I think there’s scope to build a conversational overview on top, into which YouTube videos, Twitter content, Github links, blog posts, official documentation and slide content could be fed.

As a speaker, the biggest challenge was keeping my knowledge up to date with all the updates that are happening, and events like this do help, but as I’ve been on a project that’s Docker and SQL focused recently, it’s a lot of work on top of my day job to keep in touch with the latest updates to CosmosDb, especially as a few tickets on the project were picked up and moved to “In Progress” between submitting and delivering my talk, and a new C# SDK was released.

Categories
code

Live coding during a presentation

I’ve done a few talks in my time, and some of them have involved live coding to help take the audience on a journey to understand the lesson I want to teach. It’s a technique I use rarely however as it can easily get problematic.

Live coding for a presentation is not the same thing as coding for your job or a mob session. Live coding for a presentation has to be as slick and as polished as the rest of the talk. No googling the API docs, no stumbling over syntax errors (although don’t worry if you don’t spot them, someone will.)

If you’re nervous with slides, live coding can help relieve some of the pressure. It certainly helped me when I was starting out, as I could pretend I was having a conversation with my computer for some of the talk. Fortunately, it was a conference with microphones.

Live coding is also great for presenting something novel (or at least novel for most of the audience) as it gets to demonstrate that it’s real and it works. I used it, in one presentation, to demonstrate TDD.

Be careful though. Technology can let you down, so have a think about how you might demonstrate another way. Do you have a video you can show on someone else’s laptop? Can you demonstrate with screenshots? Could you whiteboard a solution?

If you don’t feel comfortable writing code in front of an audience, don’t. Can the code (I use VS code snippets, but there’s plenty of macro choices), so you can reveal it gradually. Or pre-build it and uncomment as you go.

If you are preparing code in advance, to distribute with the slides, heavily comment the code so that when people download it afterwards they understand the context.

I do love to see live coding done well in a presentation, but unless you’ve prepared it meticulously, it won’t go well. Think about the story, and how and when you’re introducing new concepts. Don’t be afraid to go back to something later (“Here’s how to connect, but I want to show you search first. I’ll come back to the parameters here once you’ve seen the search results.”) It’s OK to refer to your notes, especially if you’ve just thrown up a screenful of code for the audience to read. Make every interaction useful.

It’s OK to backtrack. Show the mistakes you made, the error messages you saw, and how you corrected them. You won’t be the last person to make that mistake.

Relax and enjoy it. If code is what you do, be comfortable with it, even if the nerves are trying to turn you inside out from your stomach.

Categories
development leadership

CodeCraftConf 2018 : Successfully Growing A Team

Thanks to everyone who came to my CodeCraftConf session today, and to the organisers for all their hard work. Here’s the questions I asked, and I’ll follow up with my thoughts from the discussion.

Successfully Growing A Team

  1. When is it time to grow your team?
  2. How do you deal with resistance from existing team members?
  3. Is it more important to find a culture fit or build a diverse team?
  4. What is your biggest worry with your current team size, or with growing your current team?
  5. How frequently can you add new people to your team?
  6. How long does it take to integrate someone new?
  7. What practices do you use to ensure sustainable growth?
  8. How do you know when a team is too big?
  9. How do you split a team that’s grown too big?
  10. How do you grow a team when the existing members are already overworked?
  11. How long is your recruitment pipeline in terms of short-term planning (getting people in the door) and long-term planning (having the right team in place for next year or 5 years?
  12. How do you recruit outside your specialty?
Categories
development

Ddd.scot panel sessions and lightening talks

I’ve been selected for 2 sessions at DDD Scotland this year. There’s no presentation from me, but I’ll be chairing a panel, and appearing on another, so plenty of opportunities to answer questions. This is a new thing for ddd.scot, as well as the lightening talks stream to help you practice public speaking, or just share something cool. Please come along and provide your feedback.

If you’re coming, please submit a question to the Your Career in Software Development panel so we can answer the questions you have on your career. Submit your question anonymously here

Hope to see you there.

Categories
leadership

#digitleaders 2017, Edinburgh

Last week I attended the first Digit Leaders conference at Dynamic Earth in Edinburgh. There were 3 loosely-themed sessions consisting of 3 15 minute talks and a collective Q&A panel with the 3 speakers.

I’ve mentioned before that I think it’s a great venue and it was the first conference I’ve been to with this format, which doubles down on thinking of a conference as a high level overview of a topic, and a networking event for questions. For these topics I think it went well, but it suited the second two topics more than the first, where I think all the speakers would have benefited from more time to explore how they made changes rather than the high level what they did.

I’m going to split the topics up slightly differently in this post as there’s a couple of topics that came up in several places, in talks, questions and the networking event after.

Digital Transformation

Leadership is sometimes about a steady hand and maintaining course, but sometimes it’s about taking a failing team, or culture, and turning it around.

A great example of the latter was Helen Marshall of Yodel who was brought in to lead an infrastructure transformation by an IT team with a reputation for impeding progress and without faith in their ability to execute the transformation.

She took some well worn leadership techniques : find and communicate a clear common goal; break the work into smaller chunks; move people into roles that play to their strengths, and created a team that won awards internally and externally for their ability to power the business.

Interestingly though, whilst there were goals for the project (complete this part of the migration before the Christmas rush so we can handle x% more parcels), the goals she focused on were cultural: delight the business, inspire others, won awards. And the project got a new name to keep things fresh. Westinghouse theory can be useful.

There was also an interesting take from Gordon Craig of Craneware, looking at transformation outside the digital part of the business. They sell software but​ their sales process was misfiring, partly down to long lead times that meant the feedback loop was slack.

Again, rather than focus on sales goals, he started tracking team behaviours, which can be monitored and corrected on a much shorter timescale. He didn’t go into much detail on what behaviours he monitored except to say there was daily dashboard monitoring that could be done locally in the US and at home in the UK, and that data quality in the CRM was an issue so he tied commission to having the correct data in the CRM. If it wasn’t there, no commission was paid.

He also spoke about rethinking the company as a sales company rather than a software company, aligning the rest of the business, and the strategy, to the goal of more sales, pushing the rest of the business to support that pipeline.

Cultures, sub-cultures and co-existing

There’s always been a stereotype of IT as socially awkward, 20-stone, socially awkward men who work in windowless basements. That’s less true than it was, but there’s still cultural differences between IT and other parts of the business, but one thing we can easily forget it’s that there can just as big differences between Sales culture and Marketing culture, between the US organisation and the UK organisation, or between verticals within the organisation who target different markets.

Liza Horan discussed the later in the context of Disney, a very hierarchical organisation with a culture of asking for permission, with their child organisation ESPN, which is individual driven and a culture more about do it and all for forgiveness. Which very much reminded me of the behind the scenes stories of how Pixar works and how they fit in.

Chris Rivinus had some great data quantifying this cultural difference, between departments and between countries, based on surveys and Hofstede’s law. He also spoke about how he’d used this to aid communication. In one large organisation, they needed to update their cybersecurity. This was communicated as an agreed document, and everyone git the same content, but the highlights of the message were adapted to whether the department in question was, for example, hierarchy focused (do this for your boss), financially driven (do this or here are the penalties) or various other axes.

We know, as IT, we need to tailor our message to the audience, but it was fascinating to see numbers and here more techniques about how to put that into practice.

Diversity and the skills gap

A recurring theme throughout the day was that the white male stereotype was very much the norm at the conference. 7% were women, and no numbers on other aspects of diversity.

It’s hard to blame the conference for that though as it was still far more balanced than the pure technology and architecture conferences I’ve attended.

I think on the core question of whether it’s a lack of diversity in technology or in leadership, I see marginally better balance higher up in organisations, but I don’t know why.

The big challenge, as it has been throughout STEM for a while, is how to get and keep them interested in technology throughout school and university and into work. Find the right inspiration and role models? I’m not the expert here, but I see the problem constantly.

Leadership psychology

Good leadership is full of apparent contradictions. You need to be strong to inspire others to the bigger goals, and to make the tough decisions; but you have to be vulnerable enough to ask for help when you don’t have options to make decisions on, to rely on others to tell you what the coalface is really like. You need to understand numbers and empathise with people. You need a strong unifying culture where individuals thrive.

I’m no expert on soft skills. I’m still learning. In that, I’m not alone in the technical sphere. Other teams succeed on skills that overlap more with leadership skills, so it can be harder for technical people to succeed as leaders without a willingness to learn. That’s why we need conferences like this, to help us learn.

My notes

For those of you who can read it, here’s my notes from the conference.

Categories
development

Why you, yes you, should present at conferences 

The best ways to learn are active, whether it’s Deliberate Practice, a proof of concept demo, or teaching someone else, anything is better than passively reading or watching a presentation. And presenting at a conference forces you to distill your learning into the pure essentials, to decide what’s important, where the roadblocks are, and tell someone else what you wish you knew when you started. 

But remember, you always have 2 audiences, those in the room, or otherwise watching live, those who are waiting to be inspired. And those following up after, the ones who were inspired and now want to learn. Those are the ones who’ll read your blog and follow the URLs so they can learn by doing. 

Categories
development programming

ScotSoft2016 Developer’s Conference

Normally after attending a conference, I will give a review of the talks, the interesting topics and the event itself. Unfortunately I don’t feel I can do that for ScotSoft2016. Despite being billed as a “Developer conference”, it felt like a technical event for non-developers. Enough of an overview to start to explore, but not quite enough to satisfy technical appetites. There were some good talks, but it didn’t feel like a Developer’s conference.

That said however, I did enjoy the keynote speakers, Sam Ramji of CloudFoundry and Troy Hunt of Have I Been Pwned. And there was some great advice from Asko Seeba about how to avoid writing next year’s unmaintainable legacy code by picking the right frameworks and technologies. I’m also told I missed a great pre-Halloween scare from 7Elements’ David Stubley about how insecure your web application is (although I wasn’t sure if he was wearing a hoodie and writing green text).

There was some useful information, and despite being a long day, it never felt like it. I can’t fault the venue, or the expo, and the speakers were all practiced and delivered their information well, but only a couple really hit the mark, sparking off ideas for me to go and explore.

I heard good things about the Global Forum and evening events in the conference. ScotlandIS is certainly creating the right framework for a good conference, so I’ll definitely keep it on my radar for next year and hope they figure out exactly who their audience are..

Categories
code development

Usable APIs @CodeCraftConf 

Thanks for those of you who came to the APIs conversation. If you want to continue the discussion, these are the questions I had on my cards. 

  1. What’s the worst thing an API has done to you?
  2. What’s the first thing you check when evaluating the use of a new API?
  3. What’s the first thing you do when developing a new API?
  4. Do you approach developing APIs internally differently to one for the public?
  5. How do you make an API foolproof?
  6. How much structure should an API have? Does it need a contract? (see SOAP vs REST)
  7. How should you change an API?
  8. How should you retire an API?
  9. Which stakeholders need input to API upgrades and changes, and how do you engage them?
  10. How do you keep an API consistent if you grow it via tests?
  11. Do bug fixes necessitate a new version?
  12. How do you isolate your application from an insecure API?
  13. How do you isolate your application from an unreliable API?
Categories
development

CodeCraftConf : call for guides

The CodeCraftConf call for guides is open, and I’d recommend either applying to be a guide or buying a ticket to attend. Last year’s CodeCraftConf was a great event, and I learned a lot.

For those of you unfamiliar with the guided conversations format, the conference website has a good write-up, but it’s a way to keep the conversation going by injecting new questions and riffing of old ones, to give everyone a chance to contribute.

If you want to be a good guide, be sure to share the conversation, and not let one or two individuals control it, especially if they’re in conflict.

If you want to apply, and you’re not sure what sort of questions to ask, have a look at my list from last year, and my write-up of the answers.

I hope to see you there.

Categories
code development programming

Your API sucks : foolish inconsistency

There are many ways that an API can be inconsistent. Different methods can follow different conventions, one method may have different results, or maybe a change introduces inconsistency between versions.

Spatial Inconsistency

When calling 2 different methods in what appear to be related domains require 2 very different calls and get 2 very different results.

GET /cat

{ Name : “Garfield” }

GET /food/index.php/fooditem/1

                    🍌

Random Inconsistency

When calling the same method multiple times can lead to a result with a significantly different format.

GET /cat

{ Name : “Garfield” }

GET /cat

{ Name : “Jatt” }

GET /cat

{ Name : “Lion-o” }

GET /cat

🍌

Temporal Inconsistency

When versioning an API breaks existing clients without warning. Speak to Seb Lambla if you want to do it without versioning, or Troy Hunt if you want to version it right, in all the wrong ways.

Today:

http://www.example.com/api/getAddress?postcode=EH28%208PL

Tomorrow:

HTTP POST
 http://www.example.com/api/getAddress
 X-www-form-urlencoded
  API-version: “v1.1”
  Search-type: “postcode-lookup”
  Input: “EH28 8PL”