Game Design, Programming and running a one-man games business…

SCALE IT UP. SCALE! SCALE! SCALE!

I like the concept of scale. its why I’m obsessed with the ramp up of teslas gigafactory and car production, and why I am making a game about factories in the first place. I find factorio very impressive. I also find real world scale very impressive. Like REALLY huge wind turbines.

And REALLY huge solar farms.

So yeah… I like to address scale in my work (games!) too :D. I think that optimization and scale go hand in hand. its no good allowing players to create colossal factories if the option is only theoretical, given hugely slow code. So embracing scale FORCES you to write more optimized (i’d say ‘better’) code. I also think that in my tiny, tiny way, if I can get the CPU usage of my games down by just 10%, then thats a lot (high tens of thousands of players) of games running on PCs using less power. Thats good for the environment!

Anyway, on the subject of scale I just swapped my twin 27″ monitors for a single 49″ beast that weighs less and uses noticeably less power (yay progress!) and also way less cabling. I’m not sure I have the height just right yet, and it seems to tell some programs its a mere 3840 res and not 5120 res (which both my game, and many apps agree that it is).

First things first…. LOL huge monitors are awesome. I find myself daydreaming what it would be like to stick 11 year old me, used to playing pong on the CRT TV and stick him in front of a 49″ monitor with twin speakers & subwoofer belting out battlefield V. Its truly amazing. My 980ti cant quite handle a proper FOV in ultra resolution, so I may have to scale it down a little bit but hey…. its super fun.

This has led me to try out various games at that resolution including of course… Production Line! and it looks remarkably fun in 5120×1440 res (which it happily supports… (click to enlarge). BTW runs fine at 60fps with this map…

of course the target market for this is pretty small so far, but I definitely remember a time when the absolute maximum conceivable size for a monitor was about 1920, which is why loads of developers like me used to create 2048×1024 render targets, because obviously we wouldn’t need bigger (LOL), and TBH when I coded gratuitous space battles with 4096×2048 render targets for those show-offs with their fancy-ass 2560 res monitors, that again felt like a limit that *could never be crossed*, and yet here I am, in 2019 with a monitor that my own game from 10 years back (GSB1) now cannot quite cope with at 5120 res…

Scale in terms of coding to support silly monitor resolutions is one thing, but I also think its worth considering scale in other terms, such as users, bandwidth and so on. I doubt I will EVER make a game as successful as flappy bird, angry birds, fortnite or minecraft, but you have to wonder how many times devs got close to that and then kinda fell over (and failed to achieve their full potential) because they couldn’t cope with the scale.

Right now, positech has several obvious bottlenecks preventing us from coping if we suddenly had a mega hit (anything bigger than Democracy 3 probably). For one… I’m the only person doing customer support (yikes!), which means if you email support AT positech dot co dot uk and tell me the game doesn’t run on your linux toaster, its ME, the lead coder, lead designer, and lead biz-dev dude, who gets distracted by your email. Not ideal.

Another bottleneck is programming. Production Line is Windows only. I hate cross-platform stuff, but if the game suddenly sold 5x or 10x its current level, I’d be mad not to do an OSX port, and maybe IOS version (likely never linux…sorry but its way way too small). This would mean hiring someone to do a port, and the problem with that is it TAKES TIME right when you want to hit the zeitgeist with your hit game.

Because the costs of maintaining the infrastructure, both physical, and in terms of manpower, necessary for a mega-hit are so high, it makes zero sense for someone like me to really have it in place without a hit, although TBH I’m better prepared than most. My blog, website and reporting back-end is on a dedicated server, not some tiny VPS thing, and I have CPU time and bandwidth to burn.

The big problem (if I had a big hit and saw a need to scale) is that I’d need people FAST, and thats either hard, or expensive. If you live in downtown san fran, finding people is trivial, but their salaries are hysterical (due to property costs), so its swings and roundabouts.

I guess the sensible thing is to make sure you know WHO to talk to, in terms of outsourcing companies, and have made the contacts and pressed the flesh with them, without immediate plans, but with an eye to the future.

I guess I’m also saying that for companies that help with porting, or customer service etc, it makes sense to be polite and chatty and helpful to *as many indie devs as possible*, so that you are on speed-dial for them when their 16th game goes to #1 in the steam charts.

Maybe Democracy 4?

How to 10x your indie game development process

Oh yes, I know all about search engine optimization. Can you tell?

I talk to a lot of indie devs, although TBH not as many as I would like to, and I find many of the discussions illuminating. Because I work mostly alone in a little room in a field in the shire, I get so used to my way of doing things that its easy to forget there even are other ways. However, one of the most illuminating things is discovering just how long it takes most developers to do things (whether its code, art, biz dev, production stuff, whatever), and I am constantly shocked at how my output seems to not be 20-30% higher than many devs, but seemingly 300-400%+ more than many developers.

This blog post will try and explain how.

Its harsh. This is not touchy-feely happy cliff. This may annoy you, and make me seem a harsh, competitive, aggressive workaholic. This is reality. Most people don’t want to know this reality, but they claim to want it. This will not motivate everyone, but here goes…

Tip #1 Stop fucking around with ‘fun’ disguised as work.

Reading reddit is not work, unless its 100% actual new, informative, well-reasoned and argued and productivity or sales-boosting information directly applicable to indie game development on the platform/genre combo you work in. Reading about how to make mobile games about ponies is not going to improve your bottom line when you are a PC strategy game developer, no matter how much you kid yourself it will.

This also includes playing a dozen new indie games a month, or watching youtube lets plays or twitch streams of a whole bunch of new games. Thats not ‘market research’, its just goofing around. If you are currently between titles, and thinking seriously, and doing market research into industry trends etc, then yes, MAYBE you can claim a few hours for doing this as ‘work’. If you current game design is pretty fixed, and you are > 6 months away from release, it really doesn’t matter a fuck what is #1 in the indie game charts and how it plays. Thats not work. It will NOT change your immediate plans, don’t pretend otherwise.

Tip#2 Work somewhere quiet.

No a coffee shop is not quiet. Nor is any room in your house/apartment where other people walk through regularly. You need to be an end-zone where people only enter your room if they need YOU. Unless the house is literally on fire, someone has been shot, or imminent death or suffering beckons, nobody should disturb you when you are working. Nobody. You are in isolation. Don’t kid yourself that ‘you work better in a gregarious group of chatty people’. Thats crap and deep down you know that.

Tip#3 Get a big monitor, get 2 big monitors. Don’t feel bad if you have 3.

You cannot get a lot of work done on a tiny laptop. Thats silly. its 2019. Get some big monitors, they are cheap. I have twin 27″ monitors at 2560×1440 res. I couldn’t work at my current rate with less. I spend less time alt-tabbing than you. I can glance at my inbox without a context switch from game dev. I can view loads of my code and my game at high resolution at the same time. Monitors are cheap. its a business investment. Trust me. Buy 2, big, high quality ones. Buy them now.

literally the bare minimum

Tip#4 Shortcut keys and batch files etc

I feel physically pained when someone right clicks and selects ‘copy’ or ‘paste’. How many shortcut keys do you know? Copy & paste & cut and select word, select line, select page up + down? Windows + R Windows+F? Alt+tab? Shift+alt+tab? Windows+arrow keys? Know them all. You actually do not need a mouse for much. the mouse is SLOW. I use batch files to process files in photoshop quite a lot. I also know a lot of shortcut keys in textpad32 and paintshop pro. Also… if you use visual studio are you using visual assist? its amazing. use it. USE every productivity tool imaginable. leverage what computers are good at. Get a fast PC.

I know devs who use zipped up files and drag-dropping to back up their code. FFS. Use source control and cloud backup software that automates all this for you. If code and software exists to make you more productive USE it. Use email filters and rules. So much time-saving software exists, use it.

FFS I even have my living room lights come on automatically at sunset without me pressing buttons. Automate the fuck out of things.

Tip#5 Comfort

You will work longer and harder and happier in a nice work environment. When it comes to my office, no expense is spared. If you are an indie developer, your desk and office chair are probably more important to you than your car, TV, cooker and sofa combined. You will (hopefully) spend a lot of time in that chair at that desk. Get a really good one. try many, the really good ones will last a while. Mine is an aeron, 9 years old, still perfect. I actually had a desk made for me (surprisingly cheap actually), It will last forever. Do not make false economies here. Mine was about £800. Thats under £100 a year so far for the place I park my ass most of my life.

other chairs are shit

Tip#6 Mindset

If you are working on your first game, I hate to be that ‘one guy’ who breaks with the happy-clappy hugs and flowers online twitter group hug, but no, you are not an indie game dev, you are a wannabe. You are trying. you might one day release a game, in which case, well done, welcome to the club. the world is littered with people who try and fail, and those who give up. Someone who is ‘working on a novel’ is not a novelist, they are a hobbyist.

If you want the warm glowy feeling of being an indie dev who entertains people and ships games and makes a living from it, they you need to work hard as fuck, for a long time, and get your head down and get the product shipped. Do not surround yourself with well meaning people who tell you what you want to hear. Thats a route that spirals down and down into insular failure and disappointment. If your game is behind schedule then you are failing. Stop whining and work harder, and keep that attitude until you finish something.

Also… don’t kid yourself that you have worked ‘super hard’ because you put in a solid 6 hours work at your desk today. Thats great, but frankly someone flipping burgers has worked longer and harder than you today. You claim to want to make a secure living in one of the most competitive, sought-after, cut-throat industries in the world? Well so does everybody else. Most people fail. Most people lose. You will not make a success of this working less hours than someone doing an unskilled minimum wage job. Do not blame me for the harsh realities of competition, but more importantly do not pretend they don’t exist because that truth is inconvenient.

This job is not hard. You want hard? go work as a soldier, a police officer, as a trauma surgeon or an astronaut. game dev is fucking easy. Don’t kid yourself.

Tip#7 Focus on one thing well

If you are good at making 2D RPGs, make 2D RPGs. Unless you have three years salary in the bank, and a lot of confidence, and are absolutely MISERABLE making those games, do not change. Every 2D RPG you make improves your skills, your experience, your audience, your engine, your productivity and your tool-chain.

I’m a competent programmer. I could make a 3D physics game next. Maybe I have a cool idea for one, but for fucks sake that is a BIG leap away from 2D/iso strategy/management games. Why throw 90% of my audience, experience, skills and technologyonto a bonfire just to switch genres and styles.

You might decide to change genres/engines/languages etc because you are seeking artistic fulfillment. Thats great, but thats the luxury of a leisure activity. Again…3 years salary banked? go for it. Else…thats almost certainly a poor business decision. Get good at a thing, then do that thing until its a big success. There is HUGE opportunity cost when you learn a new genre/style/language/technology. Make sure you are fully aware of this. Few genres are so small they cannot support a single indie dev.

source:spiderweb software, experts in genre focus

Tip#8 Seek out harsh but real criticism

I get a fair few really good reviews and emails from people who really like my games. I love them. they make me feel happy, and warm, and appreciated and other nice things. its a good feeling. They don’t actually make my games better though. The emails you hate, the negative reviews, the dreaded steam refund reasons… these are the harsh angry truths that you do NOT want to hear, and yet you must. When someones tells you ‘i could make a better GUI with my ass whilst high‘, you may be angry, depressed, furious, insulted…but you need to hear it. maybe your GUI *is* bad. Maybe it could be improved.

to be fair, that slider was really crap. its better now.

Do not insulate yourself from the negative. negativity can lead to change, improvement and accomplishment. Data about what you are doing badly is absolutely essential in improving. If nobody ever tells you your games art direction is shit, or your game title is stupid, you will never improve it. If you *absolutely* cannot cope with harsh, hurtful criticism, then you probably should not try to make a living from indie game development.

Tip#9 avoid chances for distraction

I used to use rescuetime. I also used to use an hourglass to focus myself on work. I now find I need neither. I’ve worked so hard, so long, I’ve internalized what they used to do for me. Most people aren’t at that stage, and they get distracted. if your phone distracts you from work, switch it off. Nothing will explode. We survived thousands of years without mobile phones, you will be fine for entire eight hour stretches. You don’t need twitter during work hours, you don’t need to check the news sites or reddit during work hours.

If your code takes time to compile or art takes time to render, learn to multi-task with other WORK stuff. Set aside small tasks, like replying to forum threads, easy tech-support emails etc, so you can do them when you are waiting for your work to complete. Schedule other activities that you need to do anyway around times you know you are waiting for your PC. I mow the lawn/chop firewood while my PC renders out youtube videos for me. If my PC needs to reboot and update the O/S I will set it off before I have lunch, or last thing at night.

Avoid situations where your PC is sat there doing something (rendering / compiling / updating) and you have nothing to do but SIT THERE. You will get distracted, your mind-state will collapse, your productivity will plummet.

source: XKCD

Tip#10 Avoid bullshit productivity planning admin

Some peoples reaction to stuff like this is to immediately start planning to be more productive. they will start a productivity planning spreadsheet, with nice formatting, some color-coding and even a company logo, or they will google for inspirational quotes to print out and then stick up around the office. or they will start making an important list of the top ten things they have learned about productivity. They might hop onto discord to chat to fellow devs and share their new found enthusiasm for productivity with their buddies…

This is all bullshit.

The true response to this blog post, which is ending very shortly, is to close your browser. (yes CLOSE it), and do some work. Internalize the *attitude* not the specifics, and actually DO something. In other words, do not become like this classic, absolutely on-topic sketch from the life-of-brian which does a great job of showing exactly what I’m on about.

Get back to work and stop fucking around.

Starting the game: An in depth profiling look

How long does your indie game take to start up? from clicking the icon to actually being able to take input at the main menu? Just for fun, I decided to analyze whats involved in doing so for mine.

Because the aim here is to actually analyze the REAL impact, not the best case, I need to ensure that the game (Production Line) is not just happily sat there all in RAM from a recent run-through, so it seems best to oh…maybe launch battlefield V beforehand (and quit it) just to populate disk/RAM with a load of other stuff and do my best to evict all my games code.

Then…its time to fire-up aqtime and take a look. I decided to do line-level, rather than just function-level analysis, which slows the game massively, taking 17 seconds to start (the reality is dramatically faster), but I can still do relative comparisons.

First thing to notice is that pretty much the entire time is inside Game::InitApp() which makes sense.

Rather worryingly though, the vast majority appears to be inside SIM_Threadmanager::Initialise. That *may* be an artifact of aqtimes approach to thread profiling, but worth taking a look inside anyway… And it turns out that 100% of that time is inside SetThreadName() (which i only need for debugging anyway). This is a rare bit of code that I don’t understand well, and was from the evil interwebs:

#pragma pack(push,8)
typedef struct tagTHREADNAME_INFO
{
	DWORD dwType; // Must be 0x1000.
	LPCSTR szName; // Pointer to name (in user addr space).
	DWORD dwThreadID; // Thread ID (-1=caller thread).
	DWORD dwFlags; // Reserved for future use, must be zero.
} THREADNAME_INFO;
#pragma pack(pop)

void SetThreadName(DWORD dwThreadID, char* threadName)
{
	THREADNAME_INFO info;
	info.dwType = 0x1000;
	info.szName = threadName;
	info.dwThreadID = dwThreadID;
	info.dwFlags = 0;

	__try
	{
		RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(ULONG_PTR), 
(ULONG_PTR*)&info);
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		volatile int foo = 9;
	}
}

The exception is basically ALL of the time. WTF? Apparently there is a less hacky way outlined here: https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-set-a-thread-name-in-native-code?view=vs-2019 Which I will try later. I suspect the waiting for visual studios debugger is the cause of the problem.

Anyway…onwards and upwards, so whats next? It basically all Init3D() (click to enlarge)

So basically my DirectX initialisation and the shadermanager stuff is most of the problem. I suspect the DirectX initialisdation may be too black-boxed for me to influence further. The first big chunk is this line:

PD3D9 = Direct3DCreate9(D3D_SDK_VERSION);    

Which takes up 34.74% of the start time. The next slow bit is the largest at 41% which is:

hr = PD3D9->CreateDevice( AdapterToUse, DeviceType, WindowHandle,
 D3DCREATE_SOFTWARE_VERTEXPROCESSING, &PresentParameters, &PDevice);    

So…holy crap. how can that line of code even be run? This can only happen if my checkcaps() code suggest the video card does not support hardware transform and lighting. I suspect some of the reporting here must be nonsense? Especially as my own debug logs suggest that the hardware TNL version is the one than ran… FFS :( lets look outside that code then…

Most of the slowdown is in shader manager, which loads 11 shaders:

so it looks like about half the loading time here is actually spent writing out debug data! This is hard to avoid though, as I do find this data invaluable for detecting errors. And because an app can crash and lose all its data, I flush each line of my debug logs to disk with a hard drive flush on each line…

…so interestingly all the time seems to be inside OutputDebugString, which is only of any real use when the debugger is running. However! I *do* want to see that data in both release builds, and debug builds. Maybe I need a flag to tell if a debugger is present when the debug engine starts up? As a first pass I should at least build up a char* with the newline in to avoid twice the OutputDebugString calls. Here is the new code and timings.

Ooooh. I’ve halved the time of it. I’ve done the same with my non-directx debug code too. Now I’ll try changing that thread stuff… It turns out that SetThreadDescription is windows 10 only, so I need a different system (and apparently would need to update my platform SDK…urrrgh), so maybe best to just skip calling that code when no debugger is detected?

This works (using isDebuggerPresent) but the profiler actually trips that flag too, so to set it work I needed to compare time stamps on debug files. Without the debugger, it looks like time from app start to menu ready is 0.395 seconds. With the debugger its… 0.532 seconds.

That sounds pretty small, but actually I’m quite happy as I lost ZERO functionality, and the changes to the debug data will affect any time that data is written, not just during startup. 9Its not a lot, but there is *some*, and I’m an efficiency obsessive.

I think I’ll put a clause around the debugengines OutputDebugString and nuke that unless IsDebuggerPresent() too :D

The curse of staggeringly slow code

No, I’m not talking about mine, but about *other peoples code* that I encounter on a day to day basis. Some choice examples:

When I start aqtime ( a profiling app, ironically), it hangs for about 10 seconds. then when I load a project (the file is under 100k) it hangs for another ten seconds.

There is no discernible network activity during this time, and the CPU is not thrashed either. How is this even POSSIBLE? A quick check shows that my i7 3600 can do 106 trillion instructions per second. (106,000 MIPS). Thats insane. It also means that in this ten seconds, it can do one thousand trillion instructions. To do seemingly…nothing

Also… for my sins I own a Samsung smart TV. When I start up that pile of crap, if often will not respond to remote buttons for about eight seconds, and even then, it queues them up, and can lag processing an instruction by two or three seconds. This TV has all eco options disabled (much though that pains me), and has all options regarding uploading viewing data disabled. Lets assume its CPU runs at a mere 1% of the speed of my i7, that means it has to get buy on a mere 10 trillion operations per second. My god, no wonder its slow, as I’m quite sure it takes a billion instructions just to change channels right? (even if it did, it could respond in 1/10,000th of a second)

These smiling fools would be less chirpy if they knew how badly coded the interface was

I just launched HTMLTools, some software I use to edit web pages, and it took 15 seconds to load up an present an empty document. fifteen seconds, on an i7 doing absolutely nothing of any consequence.

Why the hell do we tolerate this mess? why have we allowed coders to get away with producing such awful, horrible, bloated work that doesn’t even come close to running at 1% of its potential speed and efficiency.

In any other realm this would be a source of huge anger, embarrassment and public shaming. My car can theoretically do about 150mph. imagine buying such a car and then realizing that due to bloated software, it can only actually manage 0.1 miles per hour. Imagine turning on a 2,000watt Oven, and only getting 2 of those watts used to actually heat something. We would go absolutely bonkers.

an intel i7. So much capability, so little proper usage.

There is a VAST discrepancy between the amount of time it takes optimized computer code to do a thing, and the amount of time the average consumer/player/citizen thinks it will take. We need to educate people that when they launch an app and it is not 100% super-responsive, that this is because it is badly, shoddily, terribly made.

Who can we blame? well maybe the people who make operating systems for one, as they are often bloated beyond belief. I use my smartphone a fair bit but not THAT much, and when it gets an update and tells me its ‘optimizing’ (yeah right) 237 apps… I ask myself what the hell is all of this crap, because i’m sure I didn’t install it. When the O/S is already a bloated piece of tortoise-ware, how can we really expect app developers to do any better.

I think a better source of blame is people who write ‘learn C++ in 7 days’ style books, who peddle this false bullshit that you can master something as complex as a computer language in less time than it takes to binge watch a TV series. Even worse is the whole raft of middleware which is pushed onto people who think nothing of plugging in some code that does god-knows-what, simply to avoid writing a few dozen lines of code themselves.

We need to push back against this stuff. We need to take a bottom-up approach where we start with what our apps/operating systems/appliances really NEED to do, and then try to create the fastest possible environment for this to happen. The only recent example of seen of this is the designing of a dedicated self-driving computer chip for tesla cars. very long explanation below: (chip stats about 7min 30 in)

Why I am obsessed with electric cars (esp: Tesla)

If you follow me on twitter you will know I bang on about electric cars a lot, specifically Teslas, and why I get angry at the FUD and nonsense spread about them online. Why do I care?

Lets get the disclaimers out of the way. Yup, I own one (A 2015 85D Tesla model S with autopilot 1) and yup, I own some tesla stock. Obviously I am biased because I don’t want people to criticize my purchase choice (I am human) and because I have some financial interest (although TBH thats a relatively minor concern. I have stock in Microsoft and Nvidia too but I don’t bang on about em…). So given those obvious points, why else do I care?

Climate Change

First up..the obvious one. Climate change is real. Its also predominantly caused by humans, specifically CO2 emissions, and if you actually ‘do not believe’ that, then please think about what other widely accepted scientific conclusions you would like to dispute. Maybe you don’t believe in magnetic forces either? or perhaps even gravity? maybe the earth is not a sphere but flat? There is a wealth of scientific consensus on this, and you should not only accept the fact, but be absolutely terrified of the consequences. Don’t think about ‘it getting a bit warmer’ think about agricultural yield collapse, food price spikes, food-rioting, mass immigration, resource-wars and global upheaval. This should scare the crap out of you…

…and one of the things we as individuals can do is switch to a cleaner form of transport, notably: an electric car. They are not practical for everyone right now, but will be very soon, and once you buy one you dramatically cut the amount of CO2 you personally are stuffing into the atmosphere. Its a great way to do your bit.

Pollution

Secondly…Pollution. EVs not only emit no CO2 at the tailpipe (and electricity grids get greener every day), but also zero fumes or pollutants of any kind. That means cleaner cities, quieter roads (less noise pollution!) and fewer kids with asthma. And the car behind you on the road is no longer sucking up your exhaust fumes and blowing them into the driver & passengers faces. Plus the newer teslas have HEPA filters in that mean the air in the car will be substantially cleaner than the air outside. ideal for polluted cities.

People sometimes repeat some FUD about cobalt, implying its all from congo, and batteries are full of it. Actually its a mere 3% now, and dropping to 0% soon. Plus its dramatically less of a problem than the impacts of oil dependence

Convenience

This is the one people just do not get, and will NOT accept…until they own an EV. The caveat here is assuming you have off-road parking at home, OR you work somewhere that has an EV charging point in the car park. (This is getting much, much more common).

Charging an EV is super-cheap (here in the UK I work it out to be just under £0.04 per mile in ‘fuel’, assuming 100% home charging), and actually MORE convenient than owning a petrol/diesel car. The fact is, with an EV, you have a fuel station *at your house*, and it can fill up while you sleep. In some cases you can set the car to charge during off-peak (cheaper) electricity times! The fact that the car charges while you sleep means every day when you get in the car, it has a full battery, so you can drive maybe 200-240 miles before recharging (real-world range in UK).

That 240 sounds low compared to your petrol car, until you realize that petrol car has to go to a special recharging place to get fuel (which costs a fortune), and where you have to stand there like an idiot holding a trigger to fill it up. Oh BTW that fuel is smelly, environmentally damaging and catastrophically dangerous.

On the average day, you do NOT drive 240 miles, and if you *do*, you are likely on a motorway, where you can stop and charge your car (still cheaper than petrol) while you grab a coffee and a donut. Charging speeds are getting faster than ever:

TBH, like 99% of tesla owners, even though I have access to the amazing supercharger network (which the car auto-navigates me to if it thinks I need power), I hardly use it, unless I drive to London and back with passengers in the car. Even then, I don’t *wait* for it, I just pick up an extra 50-60 miles while I have a coffee that I’d have stopped for anyway. No queuing to pay, no holding a pump, no logging in or barcode scanning, just stick the cable in and go grab coffee…

Technology

Electric cars have phenomenal batteries. These are NOT the same as the batteries in your mobile phone or laptop. They do not noticeably lose any charge (in fact the range of my car has gone UP since I bought it…thanks free software upgrades over the internet!). You do *not* have to give even the slightest thought to replacing your battery. You will likely need several new batteries for your old petrol car in the same time that you would notice even a minor degradation in your EV range over time. Battery tech in 2019 is amazing.

Performance

Holy crap they are fast. You might not care (I only care a bit), but since owning my EV, going back to my wife’s car (lexus CT200H hybrid) feels like driving a horse and cart, even in ‘sport mode’. EVs have instant power, real throw-you back in your seat with some force’ levels of power. For real car-geeks who want something sporty, trade in your petrol-car now, its history.

Maintenance

LOL. Whats that? I’ve owned my car 3 and a bit years now. It had an intermittent screen problem which is being fixed this week (under warranty), but apart from that and a minor thing with one door handle (see above, fixed), nothing has gone wrong. It was serviced once, but TBH it didn’t need it. Annual service? LOL. why? whats going to go wrong? the exhaust (nope)? radiator (no)? the drive shaft? (no)… EVs are actually WAY simpler than petrol cars. They are electric motors, a battery…errr and seats and doors I guess. The maintenance costs on them are *trivial*. Oh and satnav updates are streamed automatically while I sleep. For free, obviously.

The Future

Tech like EVs represent tipping-points. Right now they seem niche, but the sales are accelerating FAST, despite a super-well-funded FUD and bullshit campaign by multiple dying industries. Right now finding a petrol station for your old-tech car is easy, ditto a mechanic but that will crossover soon. The future of cars is undeniably electric, and we aren’t far off the point where the re-sale value of a petrol car starts to drop when people realize their next car will be electric, even if they won’t be able to buy one for a few years.

Safety

The top 3 safest cars on the planet right now? All EVs:

…oh and no engine in front of you means your body is not crushed in a front impact, plus the whole front of the car is a crumple zone. And the battery in the floor makes them bottom heavy, meaning they *do not roll*. Oh and I nearly forgot the complete lack of 50 liters of highly flammable liquid that just isn’t in an EV. You want a safe car? You want an EV.


Oh and BTW all electric cars are automatics. Learning to operate a clutch and a gear stick is so 1970s. This isn’t a skill we need to bother learning soon. I thought I’d hate an automatic but OMG I love it. Assing around with gears feels like being in some costume drama fiddling with cumbersome stupid old technology for a joke. I don’t miss it one bit.

I feel very strongly about electric cars mostly because there are so many lies spread about them. Mine is my favorite purchase of all time, except perhaps my house, and I’m not a car guy. I still don’t really know what torque is or what any bits of a traditional car do, nor do I care. But I like cutting edge tech that is so cool it makes you laugh out loud.

If you ever get an opportunity to try one, do so. Even the harshest skeptics are won over the minute they drive one.

BTW if you do buy a tesla, using this code ( http://ts.la/cliff7605 ) gets you some free supercharger miles. I already have unlimited for buying an early one, but at the time of writing this earns you 1,000 free miles.