About being self-sufficient and not lazy

Looooong time ago I posted a couple of things that were somewhat related

first one was About Time and Space in Indie Software Development (2017)

then second one about programming languages and how it can influence failure
in Learning from Failures (2018)

so here somehow the 3rd part


About being self-sufficient

what else do you need to work ? who else do you rely upon to work ?
and what do you do when those are not available anymore ?

all that triggered by this

let me quote it in case this tweet vanish into thin air

Scenario

Google, Stack Overflow and GitHub are down.

How far can you get when building an application without these?

it is a shit posting account but the question is real

simply put, what do you do when other stuff fail ?

So I came from a freelance background, and one of the first thing I learned is you can not come back to a client with “sorry I can not deliver the thing today because my computer broke”

even if it’s true, no way they would believe you, they just gonna think you didn’t the work on time and now you’re using an excuse.

To counter that, as a freelance, after yet another apple hardware broke on me exactly 3 months after the warranty expired (tell me about obsolescence by design to have a fun convo), I decided to plan for that, plan for hardware failure.

For example, if you use a desktop combo like an iMac or a laptop, if any one important element fail you are fucked up.

Screen fail? you have to replace the whole thing
Motherboard fail? you have to replace the whole thing
Hard drive fail? ahem you might get away with it but you will mostly waste a lot of time getting back to a working setup

If you don’t use an all-in-one solution, sure you can not be all hype and work from some coffee shop like a a hipster doofus but you can plan for that kind of failure, so let’s sue a goddam desktop computer.

That’s the whole point of a desktop, if one screen fail, just replace it, either you got a spare or you can a new one delivered within 2 days or so, same for a motherboard failure, etc.

For HDD, ideally you would do backup like your life depends on it but most people do not bother, so at least do that: use an external HDD and save your projects/assets/sources there and monitor it regularly

  • at best, only the main HDD fail, just use another computer around and just reconnect your external HDD
  • at worst, you hear some clicking on the HDD? or something is slow? just clone the whole external HDD to another brand new external HDD

the goal in all those backup plans is to not be stuck more than few hours, really a couple of days max, to keep working on whatever you are working.

And one single rule: NEVER EVER TRUST HARDWARE, it fails, it will always fail at the worst possible moment.


And you have to plan the same for your daily usage of Google, Github, etc.

if you dev something in ActionScript 3, then do have a local copy of the docs (see plurals) on your external HDD, it is as much valuable as your source code.

One link I visit the most is “AS3LCR Flash Platform” which point to this
help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/

and sure it is always online, but you can get a local copy going here
https://www.adobe.com/devnet/actionscript/documentation.html

ActionScript 3.0 Reference for the Adobe Flash Platform (ZIP, 66 MB)

but don’t just download that in the corner of your HDD and forget about it, learn to use it for when the shit hits the fan

see that’s what you get if you open it locally in a browser
file:///Users/zwetan/Desktop/PlatformASR_Final_en-us/index.html

yeah it does not work, in fact most of local HTML doc will not work when viewed directly through file://

you have to use a local web server
for example: $ python -m SimpleHTTPServer 1234
(see Big list of http static server one-liners)

that work, that will even work if you got no internet

no-internet

but that’s not the only doc you would need for AS3
(also it is not perfect as those local files cover only till AIR 15.0 but hey better than nothing)

you will need also

And that would be the same for any programming language you use to build your app, get the local documentation.

In fact, anything that help you build your app should get a local copy you can get to if something breaks.

So it doesn’t stop here, if you use a server, a REST API maybe? with your app?
then have a VM, a docker, whatever, where you can run it locally

If you use 3rd party services, like Firebase or whatever, either have a way to disable the need for this 3rd party thing as “huh ho does my app still works if [service name here] goes down ?”

For a simple thing like Google Analytics a simple toggle would work

public function trackSomething():void
{
    if( config.enableAnalytics )
    {
        // ...
    }
    else
    {
        // maybe log something ...
    }

In other more complex cases you might want to plan for the worst with a middle-man,
as you don’t connect directly to the 3rd party service, but your own server use it
and so you can disable/enable it on your own server config, and by extension allow you to replace it with another 3rd party service with similar features, or even implement the service on your own server, etc.

And yeah I know the answer “but we don’t have time to …”
OK then when this 3rd party service goes down or get bought and/or shutdown be ready to cry and panic.


Same for Github, yeah yeah yeah I know it is very popular and everyone uses it …

But I’m not telling you to not use Github, I’m saying to have a backup way to be able to build your app or simply work with it without github being there.

For example, if when you build your app you depends on a package manager that go fetch those dependencies, so then the app can be build, you are done.

Github goes down, for 1h or a day, and you have no way to build from scratch.

And it is very silly, because the whole purpose of using git in the first place, at least one of the reasons, should be “hey I can work on my local branch without an internet connection”.

Also, do not ever think that something like Github will be alive forever

About hosting ActionScript open sources code:

  • OSFlash shut down, then everyone moved on to Google Code
  • Google Code shut down, then everyone moved on to Github
  • when Github will shut down?

hopefully Github will not close doors anytime soon, but anything can happen so you should plan for it if you depend on it.

Although while writing this I got that little alert


So the basic rule is to have a clone, a backup, a spare part, of whatever you depends on either hardware or software.

And that lead to another basic rule of not being lazy, or put another way: do the hard work.


Ah laziness a vast subject to explore in the realm of development, so what is it to not be lazy ?

If you worked in an office, you know those kind of open workspace, where anyone can just hop to your desk and ask a question ? oh yeah if you’re a dev you must know about that

the little tap on the shoulder to signal you to remove your headset (because off course you code stuff and you want to isolate every background noise around you) to ask you trivial little things that the person could have spend 5mn googling on their own time …

that has evolved, now it is also happening online

why would someone even read the doc or the manual, or do a bit of test on their own time when they can simply go to stackoverflow, or any forum somewhat related to their problem and simply dump the problem (“it does not work”) on someone else ?

OK I might be a little too harsh here, and no I did not forget how it was when I was a young dev and needed to ask for help around, and sure you can see me as this old grumpy dev or even old dinosaur that is such a fanatic (hey asshole you wil reckonize yourself) that he is still working with ActionScript after its death got announced 100x times around, but still …

Time is still important
TIME is the very reason why this forum exists
I do not have time to talk to every single person 1 to 1 and repeat the same thing over and over
a forum, in general, is the best way to communicate stuff once so it can spreads to more than one person, provided they do all those things first

  • they search the damn archives of that forum
  • they search on google for their problem
  • they search on other bigger forum for their problem
    like stackoverflow or whatnot

Let be clear here, if you see yourself as a developer, to me your main job, your main activity is to solve problems

it is not about writing code the right or the wrong way, it is not about writing code in AS3 or not, it is not a tons of other things …

it is about finding a solution, a workaround, a fix, whatever … about something that is seen as a problem, and it does not always involve code

and for that you should rely on yourself first, and ask questions only second

That’s OK to not find a solution in 10 seconds from the top of your head, but then do the work to put you in such a situation you can find a solution and that starts by helping yourself like spending some amount of time searching online for that solution, doing some tests, doing some exploration or experiments etc.

and then, only after you’ve done all that, then you can go ask a question on some forum

that’s why I wrote that Announcement: If you ask for help about code

if you don’t do that, you are lazy
and I see no reasons why anyone should even spend 2 minutes of their time to help you

see, when you’re developing stuff that’s a solo journey
you might be in a team, at work, etc. but it is still an alone time
you want to get into the flow, so you can abstract all those variables and stuff in your head and tackle the problem, in general, by writing code

that flow is extremely precious, anything or anyone that get you out of this flow will slow you down no matter what you do

I was talking about headset earlier, even when I work solo at home I use a headset and there’s no one to come tap my shoulder to distract that flow, but the street can get distracting sounds like mopped etc. and that distract my flow so I use that headset still

the more you get ouf o that flow the more you are slow

so sure you can no think, not do some research in books, docs, google etc.
and just dump your question about any problem on any forum

wait a couple of weeks and come back see the answers of some people

to me, you just wasted 2 weeks for someone else to look into those details for you
if you’re lucky enough for someone else to have looked into it in the first place

what do you do if after 2 weeks nobody answered ?

that’s what I mean by doing the work and not being lazy
it is bit like the same thing as having a backup, but on another level

there’s always gonna be things you don’t know
and worse you don’t know the things you don’t know

but if you do the work, not only you can minimize those things you don’t know
but you can also cope faster with them

there doing the work is about learning

let’s say your app need to play a sound

if you don’t read the doc, you don’t know about the Sound class

The Sound class lets you work with sound in an application. The Sound class lets you create a Sound object, load and play an external MP3 file into that object, close the sound stream, and access data about the sound, such as information about the number of bytes in the stream and ID3 metadata.

and then you don’t know about the sound architecture

The ActionScript 3.0 sound classes support sound files that are stored in the mp3 format. They cannot directly load or play sound files in other formats, such as WAV or AIFF. However, starting with Flash Player 9.0.115.0, AAC audio files can be loaded and played using the NetStream class.

and then you don’t know about MP3

MP3 (or mp3) as a file format commonly designates files containing an elementary stream of MPEG-1 Audio or MPEG-2 Audio encoded data, without other complexities of the MP3 standard.

and then if you original assets are WAV files, you don’t know about converting MP3 to WAV

ffmpeg -i audio.wav -acodec libmp3lame audio.mp3

and then if you are under Windows, you don’t know how to install ffmpeg on the command-line because you don’t know you can install WSL

etc.


You can learn all that by yourself and only depending on yourself and a bit of reading the doc and google search

that is doing the work

lazy: going on a forum and asking “how do I play a sound in AIR ?”
not lazy: doing all of the above, no need to ask any question on a forum

and more importantly you will not waste other dev time by forcing them to remove their headset (aka get out of the flow) to answer your trivial question

but that is just doing the work, doing the hard work is a level above

doing the work is the basis, but it is a weak position, you’re waiting for problems to arrive to then solve them, and eventually even with all the efforts and all the learning etc. you will still be stuck somewhere at one moment or another (and yes there you can ask your questions)

so doing the hard work is about learning but before you need it
it is more active position to be in, that’s what people call pro-active

In organizational behavior and industrial/organizational psychology, proactivity or proactive behavior by individuals refers to anticipatory, change-oriented and self-initiated behavior in situations.Proactive behavior involves acting in advance of a future situation, rather than just reacting. It means taking control and making things happen rather than just adjusting to a situation or waiting for something to happen. Proactive employees generally do not need to be asked to act, nor do they require detailed instructions.

so I could make a long list of “good things to learn” while programming
but let’s go with the the single one that will never get old

divide and conquer

being self-sufficient and not lazy is all about being in control
you control other things failing by planing for it
you control the direction of your software by learning
and on and on and on

but off course it is different for everyone, there is always that one thing where you really gonna get stuck, no matter what you learn what you plan, nah … you’re still stuck

and it’s not because nobody answering your forum question, it’s just you’re in too deep in the rabbit hole that no one else can help you but you, and then you don’t know what you don’t know

the perfect catch 22

now dividing is simply splitting up your main problem in a series of smaller problems
and the more granularly you divide it the more chance you will solve some of them
then gain some control, then learn some more, and finally solve the big problem eventually
the conquering part

that, applied to pro-active learning

programming and information technology in general got so much more complex over the last decades that it is basically the one true thing you can be sure to never know it all, you would not have enough of a lifetime to learn it all (ask Donald Knuth and if you have ~1h46 to kill in those times of confinement watch Algorithms, Complexity, Life, and The Art of Computer Programming)

but, that said, in your own little journey to write code, build software, etc.
that’s not really your goal to know it all, you just want to know enough to not get stuck
you want progress and if possible regular progress

aka “today I know a bit more than yesterday and I can keep doing it”

so that pro-active learning is about getting a slice of something new to learn
but not too big (so it end up being something impossible to achieve in your lifetime),
and not too small (so you can get some value from it)

so let’s take some extreme

you’re just beginning to learn programming, being pro-active learning about Artificial Intelligence and machine Learning … that’s wayyyyyy too much to chew

or

you’ve been programming for 10+ years, you already know 5 or 6 different programming languages, being pro-active reading from A to Z the whole jQuery documentation and applying every single little examples is maybe a waste of your time

you know yourself, so only you can know how big or small that new thing to learn can be

1 Like