code development

Things I don’t know as of 2018

At the end of last year, Dan Abramov talked about the things he doesn’t know. It’s a useful framework to reflect, and as a privileged, experienced developer, I am comfortable talking about this, in the hope it might help others understand that experienced developers don’t know everything.

I’ll echo what he says about Imposter Syndrome and Dunning-Kruger and how it absolutely sucks to see truly smart developers I know, or that I follow, having to constantly prove their credentials just because they’re not cis, straight, able-bodied white men. If I’m in a position to support you or amplify you, I will try to do so. Your experience is definitely a thing I don’t know, but I can listen.

I covered a few things I know enough to be confident in for my 2018 in Review post. I’ve had to care about DevOps and containers and pipelines because they solved real problems my team was having. I love graphics because trigonometry and fractals are why I got into programming, but I work in the network, looking at architecture, security, interfaces and data. That leaves a big wide world out there, and this doesn’t include the unknown unknowns.


I’ve tried to get into it a few times, but it still just looks like old-school Perl to me. Lots of punctuation occasionally interrupted by domain language. This actually sounds like a good idea to me – an almost complete separation of concerns – but I keep finding the learning curve too steep and so I retreat back to Python and C#.


I’ve been building websites since Mosaic was a browser. I can style things with CSS. It’s not hard to put red text on a green background (you monster), or fix a navigation bar to the top of the screen, but look at the fancy grid layouts, or parallax scrolling effects, or CSS icons, and I couldn’t tell you where to start. I don’t know how to unit test it, so my tools don’t work here. Just as well I work with some very smart CSS developers.


I use Markdown a lot. For README, for Architecture Decisions, and for drafting blog posts, but I always need to google how to insert a link, or a table, or an image. And I feel like an idiot each time.

gulp, npm and webpack

I know these are essential tools when I’m building React. I know they turn my code into something the the browser runs. I know how dependency management works (I can bore you about HORN over a drink if you like), but I’ve only ever used these JavaScript tools preconfigured in a template or an existing codebase, so I could not create a JS or TypeScript build pipeline from scratch, or fix a broken one.

I really couldn’t tell you anything intelligent about how those fit into the ecosystem alongside Grunt, Yarn, bower, sass, scss or anything else. So long as I can write a script to install and run them, I’m happy not to have to dig into them. All I care about is if it runs and if the dependencies are secure.

I suspect I’ll need to learn more about these tools this year though.

You don’t need to know everything

You’ll have your resolutions to learn more, whether weekly or yearly. There’s more to learn than you will ever get the time to – that’s why we work in terms. Pick one thing to learn next because it’s important to you, because it’s interesting, because your project requires it, or because thats where the money is. Forget the rest until you’re over the Dunning-Kruger curve and you know enough about that new thing to see all the possible next things to learn.

code development leadership

Tribe of Mentors – 11 questions

I’ve been listening to the Tribe of Mentors podcast by Timothy Ferris and in the related book, he talks about the 11 questions he sent out to get people to respond. He’s got a great discussion about how he refined the questions, and why he chose those questions in that order, and I’d recommend checking out the book and the podcast. I thought it would be interesting for me to answer them. If I’m going to write a blog, I should give you some insight into who I am.

The questions he asks all his interviewees are:

What is the book (or books) you’ve given most as a gift, and why? Or what are one to three books that have greatly influenced your life?

What purchase of $100 or less has most positively impacted your life in the last six months (or in recent memory)?

To give me a significantly more productive commute:

  • I have a small notebook that I can carry in my pocket, from my local supermarket;
  • A cheap bluetooth earphone for listening to podcasts, which is good for voice, but not great for music;
  • Pocket casts for managing my podcasts. I also set it up to auto-play whenever I turn by earphone on.

How has a failure, or apparent failure, set you up for later success? Do you have a “favorite failure” of yours?

Deleting a database

If you could have a gigantic billboard anywhere with anything on it — metaphorically speaking, getting a message out to millions or billions — what would it say and why? It could be a few words or a paragraph. (If helpful, it can be someone else’s quote: Are there any quotes you think of often or live your life by?)

“Do not compare yourself to others for you may become vain or bitter. There will always be greater and lesser persons than yourself.”

Desiderata, Max Ehrmann

What is one of the best or most worthwhile investments you’ve ever made? (Could be an investment of money, time, energy, etc.)

My PhD. I learned discipline, I took the opportunity to learn lots of new technologies, and to sit in on some random lectures.

What is an unusual habit or an absurd thing that you love?

I love weird films and music, such as Trout Mask Replica, Eraserhead. Things that I don’t choose all the time, but reset my expectations about what art can be. It’s always good to get a refresh to help my problem-solving and avoid getting stuck in a rut.

In the last five years, what new belief, behavior, or habit has most improved your life?

Regular blogging. It has helped me to crystallise my thoughts; share ideas with others, and my future self; and led to some great conversations.

What advice would you give to a smart, driven college student about to enter the “real world”? What advice should they ignore?

It’s OK if it takes you a few years to find the right job for you. It’s ok to have a few jobs on your CV if you have a reason to move. Treat them as a chance to find out who you are, and don’t let golden handcuffs make that decision. Bank the cheque in case you need a parachute.

Don’t work on your free time to get a job. Do what you enjoy. Climb hills. Practice the guitar. Volunteer at the hospice. Spend time with friends and family. Jobs that require you to learn on your own time are jobs that don’t respect you.

What are bad recommendations you hear in your profession or area of expertise?

April Wensel covers this better than me. I felt an unease about things, but April Wensel managed to capture it much better than I could. Don’t be a hero. Be a team player. Don’t follow these toxic tips.

In the last five years, what have you become better at saying no to (distractions, invitations, etc.)? What new realizations and/or approaches helped? Any other tips?

I became a dad during this period, and time has become far more precious as a result. Family comes first. So less TV in the evenings, more time with my daughter, more together time with my wife. Less news, less shouting at the TV. If it’s not something that I’m passionate about, or will help my family, me or my friends, I can’t justify the time.

When you feel overwhelmed or unfocused, or have lost your focus temporarily, what do you do? (If helpful: What questions do you ask yourself?)

Go back to my task list. What’s the best thing to do now that my future self will thank me for?


Embrace bored

Be bored.

No news in Facebook news feed
No news in Facebook news feed

Be at peace with your thoughts, and let them consume you. Put down your phone, disconnect from social networks.

Don’t seek stimulation just for the sake of it 

Think about your problems. But don’t dwell on them.

Boredom makes you brilliant. 

Boredom makes you more creative 

Procrastinate. It’s good for you. 

Not working will help you work.

Grab a coffee. 

Smoke a pipe or three.  

In Praise of Boredom – Maria Konnikova

If you’re stuck, get away and think.

Give yourself time. 🕒 It’s a precious gift.

.net development programming

My .net journey

With the release of Visual Studio 2017 and .net core, I’ve seen a few folk talking about their story with the platform. This is mine.

I’ve never been the biggest Microsoft fan, ever since I grabbed a copy of Mandrake Linux and figured out how much more tinkering was available and how much more logical certain operations were than on Windows 95. But it was definitely still a tinkerers platform.

But I got an internship at Edinburgh University whilst I was a student there, funded by Microsoft. I got a laptop for the summer and a iPaq (remember that?) to keep. I also got a trip to Amsterdam to meet the other interns and some folk from Microsoft, back before they had much more than sales people in the UK. And they told me, no matter how much anyone hates Microsoft, they always hate Oracle more.

It meant that I was among the first to get the .net 1.0 CD, so I could legitimately claim later that yes, I did have 2 years of .net experience.

But from there, I stayed in Linux, learning the joys of Java Threading on Solaris (top tip : Sun really should have known what they were doing, that they didn’t means I can see some of why they failed – it was far easier working with threads on Red Hat or Windows).

And then I did my PhD, digging into device drivers, DirectX and MFC. I hated Microsoft’s Win32 GUI stuff, but the rest, in C++, was quite nice. I enjoyed being closer to the metal, and shedding the Java ceremony. I trained on templates and started to understand their power. And Java just wasn’t good enough.

I wrote research projects in C++ and data analysis engines in Python. It was good.

But Java came back, and I wrote some media playback for MacOS, and fought iTunes to listen to music. And I vowed never to buy from Apple because both were a right pain.

And I needed a new job. And I’d written bots in IronPython against C#, so I got a .Net job. And I missed the Java and Python communities, the open source chatter. And I wanted to write code in C# that was as beautiful and testable as C++. And I wanted to feel that Bulmer’s Developers! chant was a rallying call, not a lunch order from a corporate monster.

So I found and it was in Scotland, and I wrote a lot of code, and I learned that open source did exist in c#, and that there was a conference named after that chant and I met more like minded developers. I fought my nervousness and my stumbling voice and I found some confidence to present. And blog. And help write a package manager. And then everyone else learned Ruby.

And then the Scotts joined Microsoft and became .net. And then LINQ came and I remembered how clean functional programming is, and I started feeling like I was writing Python if I squinted hard, and ignored types. And then core came, and Microsoft had some growing pains. But it’s a sign that the company has completely shifted in the right direction, learning from the guys who left for Ruby. And Node.

I’m proud of what I’ve built in C#, and it’s a much better language than Java, now. It’s definitely the right choice for what I’ve built. The documentation is definitely better than Apple or Sun/Oracle produce, although MSDN and are having some migration pains of its own.

And is making a comeback.

And I still use Python on hobby projects.

development lifehacks

Step out of the shadow cast down by your ego

Don’t define yourself by your job. You are a fascinating unique intersection of many identities, including your job and your vocation, but even when these align, you are much more.

You have friends and family. You have friends outside work but in your vocation who are a great sounding board. Use them to explore the market. Not necessarily to find a new job but to be sure your current one is giving you what you need.

Don’t define yourself by your code. Be passionate about it, be proud of it, but don’t give yourself to it. It will consume you in every imperfection found in review, in every late night and weekend you spend fixing one last bug, in every sleepless night worrying about the things the users don’t care about.

If you don’t have balance, it can destroy you.

Be comfortable in yourself and your code and work will follow. If you don’t know who you are, find out, accept your flaws and limitations and choose which you will improve and which you will defer to others.

development leadership

On respect


Firstly, an apology to my regular readers on the delay to this post.  I’ve had a very busy couple of weeks personally, squeezing out the time I have available to blog. Hopefully things will be back to normal next week.

As a coda to my 3 Dear… Blog posts, I wanted to discuss respect.

All of these talk about respect, but I realise that respect isn’t always understood. Respect doesn’t mean to tolerate, it doesn’t mean to accept someone’s position blindly, it doesn’t mean opinion is as valid as fact.

It means that I will try to tailor my message to talk about things meaningful to you, I will be technical with developers, I will talk deadlines and finances with managers, and I will talk to users about their business, not our architecture.

I will disagree with you, but I will be open to the possibility that I am wrong, if you can show me why.

If we can’t agree on something, we must respect each other and the team enough to come to a way forward that recognises without necessarily resolving that disagreement.

I will not respect your opinion. But I will respect your right to hold it. I will respect a hypothesis based on that opinion that can be tested and reasoned about. And I will respect the result of that test, if the methodology is sound. I expect that your first hypothesis will not be your last.

I will not respect you because of the title you hold, your seniority or your ability to bulldoze dissent. I will respect you if your actions demonstrate respect, if your words respect your actions, and your attitude respects your words. Power is not worthy of respect. You will be judged by how you wield that power. I will try and wield my power responsibly.

I am open to change, but not for the sake of change.

Respect yourself and the respect for others will follow.


Whois Craig Nicol

Head and shouldersSince I took the John Sonmez blogging course, and started posting more regularly, I’ve noticed I’ve got a few more followers, so I’ve decided to join the WordPress blogging 101 course to make sure I’m keeping up the momentum and to try and avoid any common mistakes I might have made in the past.

Today’s topic is to introduce myself, which I hope is useful for those new readers, but it’s also a chance for me to focus on what I want to post about on this blog.

About Me

I’m paid to solve problems, usually in code, and usually in c#, with a bit of sql. I work mainly with websites currently but have prior experience with mobile and desktop development, covering JavaScript, C++, Java, Python, MATLAB and the gnu software suite to solve previous real world problems.

Solving problems is the part of the job that gets me up on the morning and keeps me motivated, but the problems that most interest me are the ones where we solve for the user. We don’t always get it right first time, because users often change their mind once they see working software, so part of what interests me is how we respond and improve.

I am a technical lead, so I am also interested in how to build and run a team.

Technology Choices

I tend to work mainly in C#, but you will find my blogging about a variety of technology topics, to see how well technologies and products out there solve the same type of problems I’m dealing with day-today. I’m looking for inspiration and warnings, and I’m sharing this blog publicly, both to help others think about problems this way, but also to get your input, so you’ll often find I finish a post with a question. That’s your cue to jump in.

Expect to hear about Node.js, XML, Big Data, User Experience, Web testing, HTML5 and beyond, security, debugging, requirements capture, Visual Studio, Yak Shaving, dynamic languages, managing geographically displaced teams, C#, Cloud development, agile, and other related topics.

Where Do You See Yourself?

Both the John Sonmez course and the Blogging 101 ask where I want this blog to go, and where I see myself next year. I want to present some of these thoughts at a conference, so consider these posts a first draft. I also what to get better at understanding the problems I’m solving, and how to continually improve my approach to them. I also hope I can engage with the wider community, by finding more blogs to read, more technologies to comment on, and keeping a wider pulse on the technology landscape.