Month: October 2020

Code has no value

Nor does SCRUM.
Nor does XP.
Nor does waterfall (I could keep going with the methodologies).
Nor does unit testing.
Nor does acceptance testing.
Nor does the runtime you are using.
Nor does the version of a framework you are using.
Nor does your automated deployment process.
Nor does the language you are using.
Nor do the patterns you are using.
Nor do those post-its you’ve put on the wall.

We get so worked up about these things on Twitter (and boy do we get worked up) but they are all intrinsically valueless. Utterly valueless.

What gives them value (positive or negative) is context – your goal and your constraints. To illustrate this I’m going to use three examples from my career.

Hobbyist developer

As far as my public persona goes this is largely what I am today. My goal and constraints are pretty clear: I want to have fun, there’s only me and limited time, and I only want to spend hobby levels of money.

In many ways I’m back where I started with my BBC Micro. I have an idea, it appeals to me, and I just crack on and have a bash it. Sometimes the focus on satisfying my curiosity, sometimes its making something I will use, sometimes its making something I hope others will use. I don’t have to talk to anybody about it, I don’t need to make money, I’m the customer / customer proxy.

This being the case I’ll use a toolchain I think is fun and the most complex process I’m likely to have is a Trello board, but mostly not even that. I might add a unit test in if it helps me. I’ll probably do an automated deployment process because the things I do are simple enough that its really just “build and upload”.

I really just make day to day decisions based on what will amuse me.

Small startup

The phrase “next paycheck delivery” was used in what I think was a pejorative manner in a reply to one of my tweets earlier today but actually next paycheck delivery (much like code) has no value in and of itself and can be either good or bad depending on your context. I’ve spent time in a number of startups where actually that was entirely the right thing to be doing – without the next paycheck the company was going to sink.

In the specific example I’m thinking of the business needed to pivot and had very little runway left. We had to attract customers and fast and they wanted to see something working and be able to use it.

So our goal was clear – get a working, usable, demo for a customer. Our constraints: we had an insane deadline, no money, and there were two of us.

We sketched out a plan. Minimum possible set of features based on what would be useful and what we thought it would cost to build. We divided up the work so we could do it in parallel. We wrote no unit tests. We used the most bare bones of process (you do this stuff and I’ll do this stuff). We threw things together in a fairly ramshackle way based on how each of us could move fastest. We were not gnashing out teeth about what version of runtimes we were using. We reused some bits in a different language that had issues but would serve our purpose.

It was so down to the wire we were doing the proverbial “coding while the customer was watching”. Put simply: “I ain’t got time to bleed”.

See the source image

Did this cause a problem for later down the road? Yes. Absolutely.
Did it enable the business to survive? Yes. Absolutely.
Would it have been better not to end up here? Yes. Absolutely.
Is it code I was proud of? Yes. Absolutely. It met its goal.

I’ve been involved in a few more startups and super constrained environments since and I’ve got a lot better at moving fast and ending up with something that is easier to move along and develop.

If you find yourself here the important thing is to recognise that yes you’re likely building up debt for the future, try to minimise that, understand that at some point yes you may enter rewrite territory.

Large organisation, established products

I’ve also spent time in larger organisations doing various roles – I think the biggest had 50 development teams and it was an environment where, at the wrong time, mistakes in some parts of the system could cost millions in minutes.

The company had market fit, it had customers, it was still growing rapidly, it had complex integrated systems and services, and a physical presence. It didn’t matter if teams did things differently but there were economies of scale that came from solving similar classes of problem in similar ways (why generate unique DevOps pipelines for two .NET API services for example). But what was really hard was co-ordinating all this. Sure we could use versioned APIs, contracts etc. but delivering a significant new piece of value required the delivery from several teams and co-ordination with the physical aspects of the business.

Goals and constraints would change but to focus in on just a handful of key things that were common:

  • Predictable delivery
  • Visibility
  • Common understanding of contracts
  • High quality

As a result we had people focused on service integration and standards, teams followed agile processes (there was variance between the teams), there were two or three runtime environments but some basic conformance standards, a lot of focus on both unit and acceptance testing, formalised roles, code reviews, architecture reviews, discipline specialists, etc. etc.

These things worked for this organisation – in the context of the organisations goals and constraints they added value. “We’re not at home to Mr Cockup”.

See the source image

But the practices they found essential would have crippled the startup trying to pivot.

Finishing thoughts

I provide these examples hopefully to illustrate that its all about context. For me understanding this is what sets a good developer apart from a coder and its vital to engineering management.

To finish in the pithy tone in which I started I just have a few recommendations really:

  • Always make sure you understand and can clearly articulate your goal
  • Always make sure you understand and can clearly articulate your constraints
  • Always make sure you understand what success looks like and how you will measure that
  • Always make sure you understand what failure looks like
  • Always make sure your approach is based on maximizing your outcomes within those constraints.
  • Have an eye on the future but don’t let it impede your today – the future may never come if you do.
  • Relentlessly focus on value – but remember that value is related to your context and not what some dude told you on Twitter.
  • When someone tells you technology, tools, practices have value in and of themselves – they’re probably trying to sell you something.
  • Do not, I repeat, do not become an evangelist unless your job is to be an evangelist. The minute you do you’ve lost objectivity.

Dell XPS 15 Mini-Review – A Developers Perspective

If you follow me on Twitter you’ll know I’m mostly a Mac user and am fortunate enough to have a super nice 16″ MacBook Pro that I definitely consider my benchmark for a good developer laptop. From a usability / tactility perspective the hardware quality is still the best out their in my opinion and you get a lot of power in the box.

However I do like to keep my hand in with Windows 10 and “full” Visual Studio and so like to keep a Windows machine around too. On the one hand having another laptop for this is definitely extravagant… on the other I spent 3/4 of my life with this stuff (and the other 1/4 with my bikes!) and its nice to be able to freshen things up through switching device. My previous Windows laptop was a Surface Book 2 but although at first I was quite impressed over time and with long term use its flaws become obvious.

Firstly Microsoft’s own updates managed to brick the dedicated GPU on two occasions. It would just go missing. And their support teams were hopeless in terms of resolving the actual issue – sure they’d sent me a new unit almost no questions asked (awesome!) but it was clearly a software issue relating to a Windows Update and would likely happen again (their were loads of people effected by it). There have been driver issues with screen detachment. Honestly just not good enough when you own the hardware and operating system and are charging as a premium product.

And finally the hardware itself – its got a great feel to it but their are some glaring issues, particularly in 2020 and with the Surface Book 3 too as its not really been updated. Specifically:

  • The device is unstable on a lap – there’s a lot of weight in the screen so it can tip over easily
  • The trackpad is tiny
  • There are huge borders round the screen

To me, in the price point, all these things make it an absolute no-goer at the price point. I applaud trying something new but the compromises are in all the wrong places for most use cases.

I considered the Surface Laptop range – I really like the tactility aspects, great solid feeling kit, decent trackpad and keyboard. But my word at the prices they are underpowered. In fact they are underpowered full stop.

Plenty of people are fans of them I realise… but to me its like the Apple contingent ignoring the keyboard issues on the laptops or the thermal and expansion issues on the trash can Mac Pro. Obvious issues for premium devices.

So all that leads me to the Dell XPS 15 which I picked up about 3 weeks ago, have done a lot of coding on, and am writing this on. Its an i7 model with the 4K touch screen and 32Gb of RAM and the 1650 GPU. That’s a touch behind my MacBook Pro which is the i9 model with 64Gb of RAM.

Hopefully all the above gives you context for the following comments. Some might be operating system related but unless you want to go Linux the hardware and software go together.

Good Stuff

  • It was really well packaged with a great unboxing experience – Dell have definitely learned from Apple here, first impressions count.
  • Purchase and delivery was easy. The Dell website is a bit “dense” when it comes to how it presents information but I clicked buy and it arrived the next day.
  • The screen is beautiful – it really is. Bright, high pixel density, very thin borders, vibrant, sharp. I love it. I never use it as a touch screen. I hate grubby finger prints on my screens.
  • I’ve not benchmarked it but it feels plenty fast.
  • Plugging it in to my daisy chained Thunderbolt monitor setup via my existing Thunderbolt hub on a single cable “just worked” and it seems to have no trouble running three 4K displays (its own and the two attached)
  • The interior of the laptop feels really nice. Its almost soft and feels more approachable than the now in comparison cold feeling MacBook Pro.
  • Windows 10. I really like Windows 10 – its a nice operating system and things like WSL are neat touches. That said…. see bad stuff too.
  • It handles external displays better than a Mac. Why Apple cannot get this right is beyond me – but when I plug my MacBook in its like a lottery as to what it will decide to do with the screens and its not unusual for me to have to unplug it and try again several times and even restart. The Dell “just works”.
  • I can use XBox Game Pass on it – this has a decent selection of strategy games (my favourite) that I can now play without having to buy them on Steam. Awesome!
  • It has WiFi 6 support – I’ve recently upgraded to a WiFi 6 network to resolve some issues and it was nice to find the Dell has hardware of this standard.

Ok Stuff

  • The trackpad is ok. Its not dreadful and its certainly big enough but clicking it is weird and less accurate than the Mac. It can sometimes feel what I can only describe as “loose”. Gestures are nowhere near as accurate as on a Mac. I’ve got used to it but I don’t like it.
  • The keyboard is ok. Again not dreadful but not quite to my taste (for context I really like the Apple magic keyboard and the reworked and fixed keyboard on the new MacBook’s). It just feels a bit… squidgy?
  • The outside of the device isn’t very attractive to my eyes. Sat next to my MacBook it looks like a cheap device – it is not a cheap device!
  • Battery seems ok. I’ve never found myself desperate for power.

Bad Stuff

  • The fans are noisy when working hard and it seems to spin fans up more readily than the MacBook Pro. Relatedly it also seems to get hotter easier than the MacBook.
  • Windows 10 spyware. Not being able to disable telemetry is, and excuse me, a fucking disgrace.
  • The out the box Windows 10 experience is terrible. After initial boot up there were loads of updates to apply. The Store was only partially working until one of the updates downloaded. Worse it does all these downloads in bits and pieces with many reboots and no end in sight to it. Its confusing and incredibly user hostile. I don’t mind an update but gather them together and do a single update – and if the operating system is only going to partially work until this is done hold off until it can be done. Rubbish frankly. Utterly rubbish.

Overall

I like it! Interestingly I’m finding myself preferring the Dell, and Windows 10, when plugged in at my desk and preferring my MacBook when on the move and thanks to WSL I don’t have to grapple with different shells. When at my desk I’m using an Apple Magic Keyboard and Logitech MX Master mouse and so that is certainly part of it.

I don’t (and won’t again) do app development so if Apple messes up with this ARM transition or we end up with borked lower power laptops as a result I feel I’ve got a decent way forward with hardware. At the moment I feel as if I could happily use this as my daily driver.

All this said – longer term problems may emerge. I guess I’ll find out.

Contact

  • If you're looking for help with C#, .NET, Azure, Architecture, or would simply value an independent opinion then please get in touch here or over on Twitter.

Recent Posts

Recent Tweets

Recent Comments

Archives

Categories

Meta

GiottoPress by Enrique Chavez