10 interesting stories served every morning and every evening.

1 930 shares, 51 trendiness, 1432 words and 11 minutes reading time

David R. MacIver

This is a sys­tem I only some­what tongue in cheek re­fer to as The Fully General System For Learning To Do Hard Things”. It’s a use­ful con­cep­tual frame­work for how to get bet­ter at things that you cur­rently find dif­fi­cult.

I don’t al­ways ex­plic­itly fol­low it, but I of­ten find that when I’ve suc­ceeded my suc­cess comes from im­plic­itly fol­low­ing it, and al­most every time some­one asks me for ad­vice on learn­ing to do things I just de­scribe a spe­cialised ver­sion of the sys­tem to them.

The sys­tem always” works in the sense that eventually” ei­ther you will find out why the ob­jec­tive is im­pos­si­ble for you or you will suc­ceed, but it’s very much the un­help­ful kind of even­tu­ally where there’s no guar­an­tee that it won’t take an in­ter­minably long time. The more likely out­come is that ei­ther you will suc­ceed rel­a­tively quickly or get bored and give up, but that’s OK — the sys­tem is de­signed so that you will have gained ben­e­fit from fol­low­ing it at every step along the way even if you do not achieve your fi­nal goal.

I should also note that this sys­tem is not in any way a short cut. It’s a lot of work. The goal of the sys­tem is not to save you work, it’s to en­sure that the work you do is use­ful.

When you know what suc­cess looks like but can­not cur­rently achieve it, the sys­tem works as fol­lows:

Find some­thing that is like the hard thing but is easy. Modify the easy thing so that it is like the hard thing in ex­actly one way that you find hard.Do the mod­i­fied thing un­til it is no longer hard.If you get stuck, do one of the fol­low­ing: Go back to step 3 and pick a dif­fer­ent way in which the prob­lem is hard.Re­cur­sively ap­ply the gen­eral sys­tem for learn­ing to do hard things to the thing you’re stuck on.Go ask an ex­pert or a rub­ber duck for ad­vice.If you’re still stuck af­ter try­ing the first three, it’s pos­si­ble that you may have hit some sort of nat­ural dif­fi­culty limit and may not be able to make progress. If the orig­i­nal hard thing is now easy, you’re done. If not, go back to step 2.

The rea­son this works much bet­ter than just prac­tic­ing the hard thing is be­cause it gives you a much more di­rect feed­back loop. There is ex­actly one as­pect of the prob­lem at any time that you are try­ing to get bet­ter at, and you can fo­cus on that as­pect to the ex­clu­sion of all else. When you are prac­tic­ing some­thing that is dif­fi­cult in mul­ti­ple ways, you will be bad at it in all of those ways. More, you will be worse at it in all of those ways than you would be if you’d tried them on their own. Additionally, when you fail you have to do a com­pli­cated root cause analy­sis to fig­ure out why.

Instead, by iso­lat­ing one as­pect of the prob­lem that is dif­fi­cult, you will fairly rapidly im­prove, or hit the lim­its of your abil­ity.

If you don’t know what suc­cess looks like, you need to do dou­ble loop learn­ing, where you mix im­prov­ing your un­der­stand­ing of the prob­lem with your abil­ity to ex­e­cute the so­lu­tion.

Apply the sin­gle loop sys­tem to the prob­lem of im­prov­ing your un­der­stand­ing of the prob­lem space (e.g. con­sume lots of ex­am­ples and learn to dis­tin­guish good from bad) in or­der to ac­quire a sense of good taste.Ap­ply the sin­gle loop sys­tem to the prob­lem of do­ing well ac­cord­ing to your own sense of good taste.Get feed­back on the re­sult from oth­ers. Do they think you did it well? If yes, great! You’re good at the thing. If no, ei­ther im­prove your sense of taste or theirs. If you choose yours, go back to step 1 with the new ex­am­ple. If you choose theirs, ap­ply the sin­gle loop sys­tem to the hard prob­lem of con­vinc­ing oth­ers that your thing is good.

Is this all a hor­ri­ble over­sim­pli­fi­ca­tion? Well, yes, of course it is. It is how­ever a very use­ful hor­ri­ble over­sim­pli­fi­ca­tion that is very good for get­ting you un­stuck when prob­lems seem in­tractable.

How To Identify Points of Difficulty

Sometimes it will be ob­vi­ous what you need to im­prove, some­times it won’t. When it does­n’t, here are some things that can help you fig­ure it out:

Try to do the thing as best you can. Don’t worry about fail­ing, fail­ing is ex­pected, but try to pay at­ten­tion to how you’re do­ing it. Write down a list of things you thought you did badly, and things you did ad­e­quately but strug­gled with. Also if at some point you got stuck, note where you got stuck.Look for be­gin­ners ex­er­cises for the area you want to work on and try a va­ri­ety of those. Observe which ones are hard.Talk to an ex­pert on the sub­ject (ideally one who is used to teach­ing) and ask them to help you iden­tify some ar­eas you need to work on.Rather than start­ing from the easy thing, work in the other di­rec­tion. Try tak­ing the hard thing and re­mov­ing one hard as­pect of it at a time un­til you get it to a point where re­mov­ing any hard as­pect would make it easy.

Worked Example: Learning to Write Better

This is par­tic­u­larly good as a mech­a­nism for im­prov­ing your writ­ing (and writ­ing about it is a good lead in to the mech­a­nism on a par­tic­u­lar area, so I’d en­cour­age every­one to work on im­prov­ing their writ­ing).

Writing can be hard in a wide va­ri­ety of ways. Some com­mon ones (in roughly the or­der I think it’s worth tack­ling them) are:

Perfectionism and/​or fear of show­ing oth­ers your work and/​or not be­ing sure what to write about stop­ping you from the process of start­ing to write about it.

And that’s even be­fore you get into spe­cific forms of writ­ing. You could also strug­gle with e.g. di­a­logue, de­scrip­tion, etc.

Set against this is the fact that if you’re read­ing this you def­i­nitely can write. I promise. You might not be able to write a novel (I can’t at the mo­ment), but you can cer­tainly write a tweet, and it’s just a se­ries of in­cre­men­tal steps to get from there to wher­ever you want to be.

Learn to touch type if you can’t al­ready. If you can’t touch type you will get blocked on the ba­sic me­chan­ics of writ­ing. This makes the feed­back loop for every­thing harder. Maybe try ztype, typesy, or Mavis Beacon Learn to write in your speak­ing voice. If you can’t fig­ure out how to write about a topic, try speak­ing about it into your phone (get a recorder app). Once you’ve started writ­ing, try to read it out loud. This is­n’t the only writ­ing voice worth us­ing, but it’s an im­por­tant one.Prac­tice writ­ing with­out any ex­pec­ta­tion of qual­ity. e.g. write in a pri­vate file or google doc, or cre­ate a blog with an ex­plicit dis­claimer that it’s for writ­ing ex­per­i­ments. Some good writ­ing ex­per­i­ments:Ob­ser­va­tional writ­ing. Pick an ob­ject (a lit can­dle is an in­ter­est­ing one) and write down every­thing you no­tice about it.Pick a sub­ject you are rea­son­ably fa­mil­iar with and set your­self a word count of, say, a thou­sand words. You can write what­ever you want as long as you hit that goal. Feel free to write a stream of con­scious­ness.Pick an opin­ion of yours and write a 500 word case for it.Rather than wor­ry­ing about the gen­eral prob­lem of edit­ing, start think­ing about edit­ing with spe­cific goals. e.g.This ties in well with get­ting a good writ­ing voice. Read it out loud, fig­ure out where good pauses are and put para­graph breaks in where nat­ural pauses oc­cur. Fix lan­guage that sounds awk­ward.Try edit­ing purely based on word count. Can you ex­press the same thing with fewer words? What would you do if you had to cut the length of the piece in half?Try edit­ing ot re­move spe­cific words. Can you write the whole thing in up goer five? (Note: The re­sult of do­ing so will be ter­ri­ble, but the goal here is to prac­tice edit­ing more than pro­duce a good piece)

There are plenty of other things to try, but these are some good start­ing points.


Read the original on www.drmaciver.com »

2 755 shares, 41 trendiness, 3650 words and 25 minutes reading time

Jason Atwood

I’m shar­ing the story of a bad sit­u­a­tion I had or­der­ing a new phone through Google Fi. It turned into a two month long or­deal where the ser­vice got worse and worse. At every turn the Google Fi team was pre­sented with a chance to make things bet­ter and every time they blew it. I’m shar­ing this be­cause I hope a long form re­view of the process is help­ful to other po­ten­tial Google Fi cus­tomers.

I’ve been a Google Fi cus­tomer since Sept 2016, when it was called Project Fi. Recently I de­cided to up­date to a new phone, so I or­dered a Pixel3 through their web­site. With Fi you can get a phone up front and then make zero-per­cent in­ter­est pay­ments as part of your bill. Once you’ve paid for the phone, at no more to­tal cost than if you’d pre­paid for the whole thing, it’s yours free and clear. I bought my first Fi-supported phone, a Nexus 5X, this way and it was very sim­ple. I also tacked on $7/month device pro­tec­tion” to my bill. So in to­tal my bill would jump $35 a month.

The de­vice shipped the same day I or­dered it. A few days af­ter ship­ping I no­ticed that my pack­age had not up­dated on Fedex’s web­site. So I be­gan to seek cus­tomer ser­vice help. That’s when things took a turn for the worse.

Google Fi has a chat with cus­tomer sup­port” fea­ture that is in­te­grated into their web­site and Android app. So I chat­ted with a rep about track­ing down my phone. I got a very po­lite an­swer that yes they can con­firm that the last Fedex en­try lists my pack­age on truck to be de­liv­ered. The rep es­ca­lated my case to the shipping and re­turns” de­part­ment and said I should ex­pect an email in a few days.

After a few days I re­ceived no email. So I started up an­other chat had the same re­sponse: email com­ing, wait a few days, we have to com­plete our in­ves­ti­ga­tion about how your pack­age got lost”. This hap­pened three times over the course of a week. Each time I would wait pa­tiently a few days, get no email, and then chat with them. On the third chat I fi­nally got the rep­re­sen­ta­tive to give me a case num­ber. When they again promised an email I start­ing to get a lit­tle up­set so I asked to speak to a cus­tomer re­ten­tion spe­cial­ist. At this point I was­n’t re­ally plan­ning to can­cel my ac­count but I fig­ured some­body in the customer ser­vice of last-re­sort” de­part­ment would surely be em­pow­ered to help me out. The rep told me that they don’t have such a de­part­ment and that if I wanted I could al­ways can­cel my ac­count on­line. At this point I was a lit­tle stunned. I’ve never heard of a busi­ness that was re­ceiv­ing monthly re­cur­ring rev­enue act so quickly throw it away. I then re­al­ized that I could­n’t can­cel my ac­count be­cause I’d be on the hook for the whole $600 for the phone. If I can­celed my ac­count I would also lose all ac­cess to cus­tomer sup­port since Google Fi does­n’t have a pub­lic email or phone. I was ef­fec­tively forced to stay a cus­tomer un­til I had this re­solved.

After a few days I re­ceived my next monthly bill, the first one to in­clude charges for my new phone. Paying $35 for a phone I don’t yet have is a bit frus­trat­ing, so I de­cided to reach out to Google Fi on Twitter. I as­sumed a bit of pub­lic sham­ing would kick them into gear.

After get­ting strung along with a se­ries of we’ll get back to you in 24 hours” from @googlefi cus­tomer sup­port, they would rather lose my busi­ness en­tirely rather than can­cel a lost-in-ship­ping new phone or­der.

Hi Jason. That’s not the ex­pe­ri­ence we want you to have. We’d like to look into this. Please fol­low us & let us know when you do so we can reach out over DM.

I thought, Ok great now I can get this re­solved.” However once we switched to a pri­vate di­rect mes­sage con­ver­sa­tion I got the same Hang tight we’re work on it”. After check­ing in po­litely for a few days they fi­nally stopped re­spond­ing to my mes­sages.

A week later I fi­nally called them on the phone. It took ex­plain­ing and re-ex­plain­ing my sit­u­a­tion to sev­eral rep­re­sen­ta­tives be­fore I was es­ca­lated to Chris” a su­per­vi­sor. Chris was the first cus­tomer ser­vice rep to go off script”. He was in­cred­i­bly apolo­getic and jumped into ac­tion to, as I asked, Cancel my phone, is­sue a re­fund, then com­plete your in­ves­ti­ga­tion on your own time.” He said No prob­lem. I’ll get back to you in twenty min­utes.” Sure enough, af­ter twenty min­utes he called back. Ok Jason, I’ve worked with my ship­ping spe­cial­ist we’ve got a new phone on the way to you.” I was get­ting up­set at this point. However I re­mained calm and said What I ini­tially told you was that I wanted was to can­cel the or­der. I no longer want this phone. I’ve been a month since you shipped the phone and I can’t wait to get a new phone.”

His re­sponse was that It’s too late. We’ve al­ready processed this or­der. What you can do is just refuse de­liv­ery” when Fedex de­liv­ers the pack­age. It will get re­turned to us and then we can re­fund you.” Wow I was stunned. It took them a month to han­dle this. They never once reached out to me. I al­ways had to call them di­rectly. Now that they are able to han­dle the sit­u­a­tion they acted so fast that they can’t even redact the or­der? If I had known how much worse it would get I would have forced them to can­cel the ship­ment right then and there. It’s not like in the twenty min­utes since my first call with Chris that the pack­age was al­ready on a Fedex truck.

So I waited pa­tiently for the new phone to ar­rive. I stayed home to make sure I was there when it was de­liv­ered. I had to po­litely tell my reg­u­lar Fedex de­liv­ery man that I was re­fus­ing ship­ment. Luckily Fedex au­to­mat­i­cally pro­vides re­turn ship­ment track­ing num­bers. So over the next two days I watches as it was re­turned to Google and who signed for it. I thought that this would fi­nally be the end of the sit­u­a­tion. But no, it gets cra­zier.

Another week passed af­ter they re­ceived my re­turn. I never heard any­thing from them so I again called cus­tomer sup­port. The cus­tomer ser­vice rep ex­plained that they need to in­spect the phone and make sure it’s work­ing/​func­tional be­fore a full re­fund. That sounded a lit­tle silly since it was in the same box. But in a way it did make sense. I’m sure lots of peo­ple scam/​steal phones this way: or­der phone, open the pack­age, re­move phone, re­turn empty pack­age, and get re­fund all be­fore seller re­al­izes phone is miss­ing. So I waited pa­tiently for a few more days.

At this point I got busy and had to travel for work (more on this later). A week went by and I got my next bill. Again with the $35 charge for the phone I still don’t have.

I called them again. This is when my frus­tra­tion level hockey-sticked from I’m mad but I’ll prob­a­bly stay a cus­tomer” to This has to be a joke, right?”.

I talked to one cus­tomer ser­vice rep and ex­plained the whole sit­u­a­tion. They agreed to trans­fer me to a su­per­vi­sor. I then spent twenty min­utes on hold while they waited to track one down. Eventually they said ,”We’ll have su­per­vi­sor call you in ten min­utes”. I said OK. After fif­teen min­utes passed I called them again.

I then talked to Judy” who said they’ve es­ca­lated to ship­ping and re­turns de­part­ment, and that I should ex­pect an email. I had to force her to es­ca­late me to a su­per­vi­sor. This time, af­ter 35 mins on hold the call dropped.

So I called back a third time. This time I talked to Nico” who im­me­di­ately tried to trans­fer me to a su­per­vi­sor. Fifteen min­utes on hold and the call dropped again.

This whole time I was on the phone with head­phones and I was able to keep do­ing work at my com­puter. So I had no prob­lem call­ing/​wait­ing/​call­ing/​wait­ing un­til they put me through. So I called back a fourth time and talked with Alicia” who fi­nally trans­fers me to Steven”, a su­per­vi­sor.

Steven says he’d look at my case and puts me on a brief ten minute hold. He comes back to say he was still hav­ing trou­ble find­ing the track­ing num­bers! I said, No prob­lem I have them right here in front of me.” I read him the ship­ping/​re­turn num­bers and he put me back on hold. I made sure he had my num­ber is case we get dis­con­nected.

I thought Finally, this is it. I’ve reached a su­per­vi­sor, I know they have my phone. I know it’s been long enough to have checked it out. He’ll just type a few lines in his ter­mi­nal and boom I’ll have a credit for $70 (two months of pay­ments).”

Steven fi­nally came back on the line to say he can­not re­fund me my money be­cause the remittance pe­ri­od’ had ex­pired. At first I thought he was jok­ing. I did a half-ner­vous laugh and then he ex­plained that he was se­ri­ous. Apparently Google Fi pro­vides a three week win­dow where cus­tomers can re­turn a phone if they don’t like it for what­ever rea­son. For me, that date was the same day I first reached out to them on Twitter! So I asked Steven, Back when I talked to Chris and asked him to can­cel phone, and he sent me a new one any­ways, that my re­mit­tance pe­riod had al­ready ex­pired? And that as a su­per­vi­sor, Chris should have known that I could­n’t ac­tu­ally re­turn the phone. All of this is in-ad­di­tion to the fact that I had not even re­ceived a phone yet?” He said yes. That is when I fi­nally lost it.

I am proud to say that up to this point in my life, I had never cursed at a cus­tomer ser­vice rep, even over the phone. But I def­i­nitely dropped a few F-bombs and started yelling. In a heated voice I walked Steven through the full time­line:

3/22/2019: Last known Fedex en­try: Friday , 3/22/2019 8:11 am NORCROSS, GA On FedEx ve­hi­cle for de­liv­ery”

Several dates first week in 4/2019: I chat­ted with at least three rep­re­sen­ta­tives. Each one said expect an email in 24 hrs. It’s be­ing han­dled by our ship­ping de­part­ment.” Each time I never re­ceived an email. I had to then reach out to them. The last one fi­nally gave me a case num­ber.

4/9/2019 I re­ceive my monthly bill. First bill with new charges for new phone

4/10/2019 Unbeknownst to me, my re­mit­tance pe­riod has ex­pired. I can no longer send the phone back if I’m un­happy with it.

4/15/2019 I reached out to them on Twitter. They said hang tight, we’ll re­spond ASAP

4/16/2019 I fol­lowed up on Twitter ask­ing for sta­tus, Same hang tight”

4/17/2019 I fol­lowed up on Twitter ask­ing for sta­tus, Same hang tight”

4/18/2019 I fol­lowed up on Twitter ask­ing for sta­tus. No re­sponse

4/19/2019 I fol­lowed up on Twitter ask­ing for sta­tus. No re­sponse

4/22/2019 I called them. I fi­nally talked to a su­per­vi­sor Chris”. They are send­ing me a new phone ASAP (which I did not ask for). Said it’s too late to can­cel, that my new or­der has al­ready been processed, and that I need to just re­turn the pack­age when it ar­rives.

4/26/2019 Return pack­age re­ceived by Google, says Fedex. Signed by XXX

5/1/2019 I called them: They need to in­spect re­turn phone be­fore full re­fund

5/9/2019 I re­ceive my monthly bill. Second bill with new charges for new phone.

5/15/2019 5:15pm On hold for 20 min­utes. I fi­nally have to es­ca­late to su­per­vi­sor. Trying to get su­per­vi­sor, will call­back in 10 min­utes. No phone call. I call them af­ter 15 min­utes

5/15/2019 6:03pm Talked with Judy. Again she kept me on hold for 20 min­utes to then come back and say We’ve es­ca­lated this to ship­ping and re­funds, they will send you an email.” I have to force her to put her su­per­vi­sor on the phone and only then does she ac­tu­ally do any­thing. While on hold (35 min at this point) the phone call just dropped.

5/15/2019 6:40 pm Talked with Nico, im­me­di­ately tried to trans­fer me to su­per­vi­sor. While on hold (12 min at this point) the phone call just dropped.

5/15/2019 7:05 pm Talked with Alicia who trans­ferred me to Steven a su­per­vi­sor.

At this point Steven re­it­er­ated that he did not have the au­thor­ity to re­fund me af­ter my re­mit­tance pe­riod and that he would es­ca­late my case even fur­ther to his su­per­vi­sor and that I should ex­pect an email in a few days. I told him that I need to solve this prob­lem right now and every­one along the way has promised me an email and then not de­liv­ered. I did not ex­pect him to do any­thing dif­fer­ently. He es­sen­tially stoned walled me into hang­ing up.

As you can guess by now, two days went by and I did­n’t re­ceive an email from Steven. So in a fi­nal at­tempt I called one last time. I talked to Rod” an en­try level cus­tomer sup­port rep. I tried to im­me­di­ately get trans­ferred to a su­per­vi­sor but Rod re­quired me to walk through my en­tire case first. I was fi­nally trans­ferred to a su­per­vi­sor Persh”.

I ex­plained to Persch that I had been talk­ing with Steven and had been ex­pect­ing an email from him, that he promised me an email in two days. Her only re­sponse was I don’t know why Steven did that. I never give out a time about when peo­ple should ex­pect an email.”

At this point I’d al­ready de­cided that un­less they were go­ing to fix the prob­lem, now two months long, I was go­ing to can­cel my ac­count. Now that they had the phone, I was only on the hook for $70 plus half a mon­th’s bill of un­used data. So as be­fore, I asked to speak to a cus­tomer re­ten­tion spe­cial­ist. Persh ex­plained that they don’t have a cus­tomer re­ten­tion de­part­ment. She said that Google Fi does­n’t have con­tracts and its cus­tomers are free to can­cel any time. She then walked me through how to can­cel on­line. I thanked her for her time and hung up.

I want to be clear. I’m not look­ing for any sym­pa­thy. My grand­fa­ther al­ways said It’s ei­ther a good time or a good story.” Well this is (I hope) a good story, and maybe a les­son for peo­ple on both sides of cus­tomer ser­vice.

These kinds of prob­lems don’t hap­pen on ac­ci­dent. This has to be sys­temic at Google Fi. The first thing I did was con­firm that I’m not alone in my trou­bles with Google Fi:

My beef is with the in­ter­nal busi­ness struc­tures and sys­tems that Fi has built; or rather, not built.”

When I men­tioned that it was not ac­cept­able, and that would leave me no op­tion but to leave Fi, she re­sponded you can can­cel Fi any time” and in­cor­po­rated the how-to-leave” in­struc­tions in her email re­sponse.”

Getting this fixed is ac­tu­ally im­pos­si­ble”

I’ve had my fair share of bad cus­tomer sup­port be­fore. But even­tu­ally you work up the su­per­vi­sor chain and some­body goes off script, re­al­izes the mis­take they’ve made, and in a very hu­man way cor­rects the prob­lem. This did­n’t hap­pen at Google Fi. This is not the prod­uct of a few bad cus­tomer ser­vice reps. There have to be rules/​sys­tems/​met­rics in place that don’t catch these mis­takes or pos­si­bly even en­cour­age them.

Customers don’t dif­fer­en­ti­ate branches of a com­pany when think­ing about brand iden­tity. I had a prob­lem with one branch of Google: Google Fi, but that jeop­ar­dized my en­tire opin­ion of the com­pany. I love Google as a com­pany. Most peo­ple prob­a­bly don’t say that. I pay for Google Fi, Google Fiber, Youtube Red, apps + in-app pur­chases through Google Play, Google Play Music sub­scrip­tion, and Nest prod­ucts. My com­pany pays for cor­po­rate Google apps (Gmail, Cal, Drive, etc.). Then there are all the Google ser­vices where I’m not the cus­tomer, I’m the prod­uct: Search, Chrome, Photos, and Google Home. The cherry on top is that as an Android de­vel­oper, I was at Google’s yearly de­vel­oper con­fer­ence while this was hap­pen­ing. I was lit­er­ally at their head­quar­ters in Mountain View, CA dur­ing some of this. I started look­ing into can­cel­ing some of the lesser-needed ser­vices like Music and Youtube Red.

Escalate early. As soon as some­body in a cus­tomer ser­vice chat or email is not get­ting your prob­lem solved call and talk to a real per­son. I wasted so much time by be­ing a pa­tient help­ful cus­tomer. As soon as the first promised email did not ar­rive, I should have been on the phone get­ting real an­swers. It is so easy for some­one in a chat to read off a script and blow you off.

As soon as a tele­phone sup­port per­son tries to pass you off with a somebody will email you” es­ca­late to a su­per­vi­sor. You goal is not to be pa­tient. Your goal is to find some­one who can solve your prob­lem ASAP.

Document every­thing. Write down dates, times, con­ver­sa­tion points, who will do what and when. Get peo­ples’ names. Then if sup­port drags on you can main­tain some san­ity and hold peo­ple ac­count­able.

Don’t lose your cool. I wish I had­n’t cursed on the phone with that rep. It brought me down to their level. It was cathar­tic in the mo­ment, but in the end I prob­a­bly par­tially jus­ti­fied the bad ser­vice. I know if I’d been spo­ken to like that my re­ac­tion af­ter hang­ing up would have been Screw that guy. He de­serves it.”

You have to be will­ing to walk away from a com­pany. This one is tough but you have to be will­ing to say If you can’t solve my prob­lems I’m leav­ing.” See what they say. If they don’t bend over back­wards to keep you then you know things are not go­ing to get bet­ter.

This is­n’t a big, face­less com­pany prob­lem. The per­fect ex­am­ple of this is Amazon. If you’ve ever in­ter­acted with Amazon cus­tomer ser­vice then you know how great it can be. Their ini­tial reps are em­pow­ered to solve all sorts of prob­lems and their one goal is to get you back to be­ing happy ASAP. Lost a pack­age? No prob­lem; im­me­di­ate re­fund. You don’t like an item and want to re­turn it? No prob­lem; im­me­di­ate re­fund.

Don’t un­der­es­ti­mate the value of a phys­i­cal store. About a year ago I tried to get my par­ents to switch from AT&T to Google Fi. I even made a spread­sheet for my dad (who likes those sorts of things) about how much money he could save. He was­n’t in­ter­ested. His one point was that at any­time he can go in and get help from an AT&T rep. I kept ask­ing Who cares? Why would you ever need that?”. Now I know. He was pay­ing al­most $60 a month pre­mium for the op­por­tu­nity to able to talk to a real per­son, face-to-face! I would gladly pay that now.

The sil­ver lin­ing in all of this is that in­stead of get­ting a year old Pixel 3, the process took so long that in the in­terim the Pixel 3A was re­leased. So I just bought a 3A from where else.. Amazon. I also had to shop for cell plans for the first time in three years. I did­n’t re­al­ize how cheap plans have got­ten. In that time I’ve used calls + text way less and data way more. So data-only plans are start­ing to look more ap­peal­ing. Also $10/ Gb has be­come pretty stan­dard.

All those ex­tra things Google Fi is known for aren’t that great af­ter all. I was ini­tially drawn in be­cause Fi phones au­tomag­i­cally jump car­rier based on re­cep­tion. Being the an­droid de­vel­oper I am, I wrote a lit­tle script to track which Mobile Network Code I’m con­nected to. Turns out I was on T-Mobile’s net­work 90% of the time any­ways. So a T-mobile con­tract-free plan was pretty com­pa­ra­ble.

I also liked that Fi works in so many coun­tries. I of course bought into this, think­ing that I would travel all the time but hon­estly I haven’t. Based on other re­views that I’ve read, it’s easy to spend a bunch on Fi when trav­el­ing. It may work, but it’s go­ing to be very ex­pen­sive. The next time I travel in­ter­na­tion­ally I’ll just pick up a pre-paid burner phone in the lo­cal coun­try.

Having un­lim­ited data al­lowed me to be on my phone all the time. Now that I have to think about my data us­age a lit­tle bit it has re­ally curbed my junk time” on my phone. With all the fo­cus lately about Digital Wellbeing” and dis­con­nect­ing from so­cial me­dia, the eas­i­est way to do that is prob­a­bly just limit your cel­l’s data plan.

It’s been a huge bum­mer that Google Fi screwed up so roy­ally. I hope for other cur­rent and fu­ture cus­tomers that they can get it to­gether.


Read the original on jasonatwood.io »

3 446 shares, 18 trendiness, 2403 words and 19 minutes reading time

A Decade of Remote Work

While still in col­lege (go Broncos!), I teamed up with Alex (@slevenbits) to cre­ate a startup. We were young, in­ex­pe­ri­enced and naive. Our first pro­ject was called YippieMail and it was an email ag­gre­ga­tor. Simply put, YippieMail could dis­play all your web­mail ac­counts (i.e. Hotmail, Yahoo and Gmail etc) in the same web in­ter­face (this was be­fore most email providers sup­ported IMAP, so you could­n’t use an email client). Looking back at it, YippieMail was a pretty stu­pid idea, but it did land us meet­ings with Sequoia Capital and few other VCs on Sand Hill Road. Keep in mind that this was around the time Meebo raised many mil­lions from Sequia and DFJ to do the same thing but for Instant Messaging (IM), so at the time it prob­a­bly did not seem as such of a bad idea.

It was in the early days of YippieMail, which was piv­oted into YippieMove (RIP 2008-2019) my now decade-long re­mote ex­pe­ri­ence be­gan (some of which as a dig­i­tal no­mad).

When we be­gan work­ing on YippieMail, Alex was liv­ing in San Jose, and I was liv­ing in Mountain View. For those of you not fa­mil­iar with the Bay Area, these two cities are not very far apart, but when you fac­tor in the hor­ren­dous traf­fic con­di­tions, it can eas­ily take well over an hour to drive be­tween the two (while it might only take 20-30 min­utes with­out traf­fic). It was then we de­cided to work re­motely rather than get­ting an of­fice some­where in be­tween. Ever since, in all our sub­se­quent ven­tures (Blotter, and then Screenly) have been re­mote-only.

To this day, even though both Alex and I both live in London, we only get to­gether every other month or so in per­son to catch up. Moreover, in my new ven­ture (WoTT), we have adopted this re­mote phi­los­o­phy even if both founders are lo­cated in London.

So what have I learned over this decade of work­ing and run­ning re­mote teams? Let’s dive in.

The first thing that I would like to point out is that re­mote work­ing is not for every­one. Over the years, we have had a few team mem­bers that could not work re­motely. In some cases these peo­ple dis­cov­ered this them­selves and chose to leave, and in some other cases it be­came clear that it was not a match.

Usually, peo­ple who fail at re­mote work tend to ei­ther lack the self-dis­ci­pline it re­quires, or they are sim­ply so­cially ori­ented and thrive be­ing around other peo­ple. In the lat­ter case, work­ing from a shared of­fice can help, but even then, if you lack the self-dis­ci­pline and habits re­quired, you are likely not go­ing to thrive. While there are plenty of ex­cep­tions to this rule, young peo­ple (early 20s) tend to strug­gle more with this than peo­ple who have reach their late 20s and early 30s.

The bot­tom line is that some peo­ple ex­cel while work­ing re­motely, while oth­ers work bet­ter in a reg­u­lar of­fice en­vi­ron­ment. It’s hard to screen for this in an in­ter­view, but it usu­ally be­comes ev­i­dent dur­ing the first year. It is im­por­tant to look out for this in team mem­bers as a man­ager.

Either you’re re­mote-only or you don’t do re­mote at all. Lots of com­pa­nies brag about giv­ing their staff the free­dom to work re­motely. However, the re­al­ity is that un­less it is in your com­pa­nies DNA to be a re­mote com­pany, it will in­evitably fa­vor the team mem­bers that are work­ing in the of­fice (in par­tic­u­lar if this is where the lead­er­ship is). The rea­son for this is largely re­lated to the flow of in­for­ma­tion. People chat over the wa­ter cooler, over cof­fee or over drinks af­ter work. This leads to un­evenly dis­trib­uted in­for­ma­tion, which eas­ily can make peo­ple feel left out or that other team mem­bers sim­ply as­sumes every­one else knows about some­thing de­spite it never made it to the of­fi­cial chan­nels. In a re­mote-only cul­ture how­ever, the in­for­ma­tion flow tends to hap­pen in a more or­ga­nized fash­ion ei­ther over email or in the com­pany chat rooms (or even in Github Issues).

Company sum­mits mat­ter a lot. Even if you’re a re­mote team, hav­ing every­one get to­gether in per­son every year (or twice a year) can make a huge dif­fer­ence. While video chats is a higher con­text medium than email or chat, it still is­n’t a full sub­sti­tute for meet­ing face-to-face. When we did our very first sum­mit for Screenly at the lovely Villa Lava in Croatia (a great place for com­pany sum­mits), it was the first time our team mem­bers got to meet each other in per­son, de­spite hav­ing worked along­side each other for years. In ret­ro­spect, it was a big mis­take of not do­ing sum­mits ear­lier, as we could see a big dif­fer­ence in how the com­mu­ni­ca­tion changed on­line af­ter the sum­mit. Because text based chat is a low con­text medium, it’s very easy to mis­read the in­tent of a mes­sage. However, if you have met this per­son in real life, you have a lot more to work with and can use that con­text to read the same mes­sage in a new light. These days, the de­vel­op­ers at Screenly get to­gether in per­son every quar­ter (roughly) for a one week sum­mit, and the en­tire com­pany gets to­gether an­nu­ally. (You can read more about how we work at Screenly in the ar­ti­cle How we work at Screenly that I wrote a few years ago.)

Hiring re­mote means a larger tal­ent pool. I’m hardly the first to point this out, but one of the ma­jor rea­sons why it makes sense to be re­mote-only. You are no longer lim­ited to hir­ing in your ge­o­graphic area. The tools for re­cruit­ing have changed a lot over the last decade since I started work­ing re­motely. That said, re­cruit­ing is far from easy. Because peo­ple from around the world are able to ap­ply to your open­ings, the sec­ond you post a job ad, the flood­gate opens. The re­al­ity is that 99.9% of the ap­pli­cants for re­mote jobs are peo­ple who uti­lize the spray and pray” ap­proach. Filtering them out is fairly easy, but in best case sce­nario, you’ll have a hand­ful of de­cent can­di­dates for every 100 or so ap­pli­cants.

The fil­ter­ing process that tend to work well is to have rig­or­ous screen­ing ques­tions that ac­tu­ally re­quires a lit­tle bit of work and is unique. This will help you weed out all the can­di­dates that sim­ply put Call me to dis­cuss” in all the boxes (or worse).

Yes, this screen­ing process will take a fair bit of time, but tools like Upwork make it fairly quick to re­ject can­di­dates that fail to put in the ef­fort (or are clearly poor fits).

From ex­pe­ri­ence I am also very re­luc­tant to work with agen­cies and pre­fer hir­ing team mem­bers di­rectly. The rea­son be­ing that a num­ber of agen­cies we’ve run across over the years have a small amount of tal­ented en­gi­neers that will do the screen­ing process and per­haps the first few weeks, and then they grad­u­ally shift the work over to a more ju­nior per­son, while charg­ing the same rate.

It’s also worth men­tion­ing that with the raise of the dig­i­tal no­mad move­ment, there are a lot more job boards that are remote friendly,” in­clud­ing Angelist and a plethora of (IMHO over­priced) re­mote-fo­cused job boards.

A fi­nal word of warn­ing for peo­ple hir­ing re­mote team mem­bers: don’t hire peo­ple who want to join your com­pany just be­cause you of­fer them to work re­motely and sub­se­quently have more flex­i­bil­ity. While not al­ways true, it is some­times an in­di­ca­tor of peo­ple who want to coast along with min­i­mal su­per­vi­sion (while per­haps get­ting their own busi­ness off the ground). What you re­ally want is peo­ple who be­lieve in the vi­sion and prod­uct, and where re­mote is a perk, not a the rea­son why they want to join.

Remote work is likely eas­ier for en­gi­neer­ing than for other roles. In all my ex­pe­ri­ences, we have al­ways been en­gi­neer­ing heavy or­ga­ni­za­tions. Yes, we’ve had a num­ber of other roles too, but in terms of head count, the en­gi­neers al­ways out­num­bered all other roles. What I have no­ticed how­ever is that it tends to be eas­ier (in gen­eral) to man­age en­gi­neers re­motely com­pared to other roles (such as sales). This is likely re­lated to a num­ber of vari­ables, but in gen­eral, I’ve found en­gi­neers to be more self-mo­ti­vated and re­quir­ing less hand­hold­ing. There is of course a large cor­re­la­tion with se­nior­ity too. Regardless of po­si­tion, more se­nior peo­ple tend to re­quire less hand­hold­ing and thus work bet­ter re­motely.

Remote work saves a lot of time. First, it should be said that re­mote work does not nec­es­sar­ily equal work­ing from home. We’ve had plenty of team mem­bers over the years that pre­ferred to work from a shared of­fice (including my­self for a pe­riod). To each and their own. If how­ever you work from home, you can save a big chunk of time (and money) every day. When I had an of­fice in Shoreditch, it took me 30-40 min­utes each way. That adds up top a lot of time every week. These days I have a ded­i­cated room as my home of­fice (something I strongly rec­om­mend if work­ing from home). This means that my morn­ing com­mute is roughly 60 sec­onds, and that in­cludes a de­tour to the kitchen to fetch my­self a cup of joe. What you do with this time is up to you, but I usu­ally ded­i­cate this 1-1.5h every day to ex­er­cise.

Habits will make or break you as a re­mote worker. As men­tioned ear­lier, re­mote work is not for every­one. It re­quires a lot more self-dis­ci­pline than a reg­u­lar of­fice job where you’re con­stantly supervised.” Over the years, I’ve ex­per­i­mented with a large num­ber of habits, and at this point I’ve de­vised a set of habits that work pretty well for me (but they are likely to change as I keep ex­per­i­ment­ing). The most im­por­tant habit when work­ing re­motely from home is to men­tally trig­ger a be­gin­ning and an end of the work day. It’s easy to sit in your PJs or sweats all day just be­cause you can, but it will likely back­fire in the long-run.

To make this more con­crete, here’s my cur­rent daily sched­ule:

* 07:05: Reading (Sharpen the saw from The 7 Habits of Highly Effective People)

* 08:00: Check in with the team

Clarification: This does not nec­es­sar­ily mean I work 10 hours per day every day (sometimes I do). I do take a lunch as well. Also, I am per­fectly happy to wrap my day at 17:30 af­ter a pro­duc­tive and sucess­ful day. The 19:30 hard stop, not as hard re­quire­ment for me to work to it every day.

As my good friend Milos (@milosgajdos) pointed out while read­ing a draft of this post, an early start is­n’t for every­one. Shifting your day is per­fectly fine too. The point is not when you start your day and when you wrap it, but build­ing and stick­ing to habits that make you pro­duc­tive.

If you want to learn more about the im­por­tance of habits, I strongly rec­om­mend read­ing The Power of Habit by Charles Duhigg. Also, a word of warn­ing, don’t get ob­sessed with read­ing all about pro­duc­tiv­ity. I’ve been a vic­tim of pro­duc­tiv­ity-porn my­self, but I can tell you first-hand that you’ll waste far more time read­ing about it than you’ll ever save.

Perhaps not re­lated to re­mote work it­self, but more the startup cul­ture. VC used beat it in to young and naive early 20-something kids that it was cool (and even ex­pected) to fre­quently pull all-nighters and sleep un­der their desk. I feel like the tide has fi­nally turned on this. Yes, you still have the Gary Vaynerchuk-wannabees out there with their hus­tle-porn, but I think (and hope) they are a dy­ing breed.

What is how­ever re­lated to re­mote work is the the im­por­tance of wrap­ping up your day. As you may have no­ticed above, I end my day at 19:30. After that I’m not al­lowed into my of­fice (unless there’s an emer­gency). I also try to keep my screen time to min­i­mal in the evenings. In my younger years, I fre­quently worked late into the night. Yet, even if I clocked more hours, I got less done.

Switching off very is im­por­tant, and it is a lot more chal­leng­ing when you’re work­ing re­motely.

If you want to learn more on this, I rec­om­mend the book Why We Sleep by Matthew Walker.

Kill the dis­trac­tions. Working from home is chal­leng­ing for a lot of peo­ple. It’s easy to get dis­tracted by var­i­ous things around the house, but for me the biggest dis­trac­tion has al­ways been the dig­i­tal kind. Cal Newport nails this in his lat­est book Digital Minimalism, where he talks about how dis­tract­ing mo­bile phones and so­cial me­dia can be. I’ve found this first hand. For a long time, I kept my phone next to me on the desk. However, every time the phone buzzed, I lost my fo­cus. Even if I did not check the phone, it still got me dis­tracted. The rem­edy for me was to sim­ply move all my dis­trac­tions to the liv­ing room (i.e. my phone and Apple Watch) and just check them pe­ri­od­i­cally through­out the day. Alternatively, Airplane mode on your de­vices is an­other great way to kill noise.

For the hack­ers out there, I’ve found that run­ning some­thing like i3 is also great for cut­ting out noise on your desk­top. I use this on my developer work­sta­tion” (which is dif­fer­ent from my other work­sta­tion).

While hav­ing good equip­ment is al­ways im­por­tant, you tend to have more con­trol over your equip­ment when work­ing re­motely than when you work in an of­fice where every­thing is pro­vided to you on your first day. You are go­ing to spend a lot of time in front of your work­sta­tion. Your body will thank you for spend­ing a bit more money and get:

* A large 4K screen (they have crawled down a lot in price re­cently) on a mon­i­tor arm

* A stand­ing desk (I use this one from Ikea)

That’s it. At least for now. I’m sure there are things that I have missed, but it should hope­fully be use­ful for other (new and old) re­mote work­ers out there.

If you are ea­ger to learn more, I would rec­om­mend the fol­low­ing ad­di­tional books:


Read the original on blog.viktorpetersson.com »

4 435 shares, 18 trendiness, 843 words and 8 minutes reading time

Google suspends some business with Huawei after Trump...

NEW YORK (Reuters) - Alphabet Inc’s Google has sus­pended busi­ness with Huawei that re­quires the trans­fer of hard­ware, soft­ware and tech­ni­cal ser­vices ex­cept those pub­licly avail­able via open source li­cens­ing, a source fa­mil­iar with the mat­ter told Reuters on Sunday, in a blow to the Chinese tech­nol­ogy com­pany that the U. S. gov­ern­ment has sought to black­list around the world.

Holders of cur­rent Huawei smart­phones with Google apps, how­ever, will con­tinue to be able to use and down­load app up­dates pro­vided by Google, a Google spokesper­son said, con­firm­ing ear­lier re­port­ing by Reuters.

We are com­ply­ing with the or­der and re­view­ing the im­pli­ca­tions,” the Google spokesper­son said.

For users of our ser­vices, Google Play and the se­cu­rity pro­tec­tions from Google Play Protect will con­tinue to func­tion on ex­ist­ing Huawei de­vices,” the spokesper­son said, with­out giv­ing fur­ther de­tails.

The sus­pen­sion could hob­ble Huawei’s smart­phone busi­ness out­side China as the tech gi­ant will im­me­di­ately lose ac­cess to up­dates to Google’s Android op­er­at­ing sys­tem. Future ver­sions of Huawei smart­phones that run on Android will also lose ac­cess to pop­u­lar ser­vices, in­clud­ing the Google Play Store and Gmail and YouTube apps.

Huawei will only be able to use the pub­lic ver­sion of Android and will not be able to get ac­cess to pro­pri­etary apps and ser­vices from Google,” the source said.

The Trump ad­min­is­tra­tion on Thursday added Huawei Technologies Co Ltd to a trade black­list, im­me­di­ately en­act­ing re­stric­tions that will make it ex­tremely dif­fi­cult for the com­pany to do busi­ness with U. S. coun­ter­parts.

On Friday, the U. S. Commerce Department said it was con­sid­er­ing scal­ing back re­stric­tions on Huawei to prevent the in­ter­rup­tion of ex­ist­ing net­work op­er­a­tions and equip­ment”. It was not im­me­di­ately clear on Sunday whether Huawei’s ac­cess to mo­bile soft­ware would be af­fected.

The ex­tent to which Huawei will be hurt by the U. S. gov­ern­men­t’s black­list is not yet known as its global sup­ply chain as­sesses the im­pact. Chip ex­perts have ques­tioned Huawei’s abil­ity to con­tinue to op­er­ate with­out help from the United States.

Details of the spe­cific ser­vices af­fected by the sus­pen­sion were still be­ing dis­cussed in­ter­nally at Google, ac­cord­ing to the source. Huawei at­tor­neys are also study­ing the im­pact of the black­list, a Huawei spokesman said on Friday.

Huawei was not im­me­di­ately reach­able for fur­ther com­ment.

Chipmakers in­clud­ing Intel Corp, Qualcomm Inc, Xilinx Inc and Broadcom Inc have told their em­ploy­ees they will not sup­ply crit­i­cal soft­ware and com­po­nents to Huawei un­til fur­ther no­tice, Bloomberg re­ported bloom.bg/​2VLT5QK late on Sunday, cit­ing peo­ple fa­mil­iar with the mat­ter.

Intel, Qualcomm, Xilinx and Broadcom did not im­me­di­ately re­spond to re­quests for com­ments on the Bloomberg re­port.

Representatives of the U. S. Commerce Department did not im­me­di­ately com­ment.

Huawei will con­tinue to have ac­cess to the ver­sion of the Android op­er­at­ing sys­tem avail­able through the open source li­cense, known as Android Open Source Project (AOSP), that is avail­able for free to any­one who wishes to use it. There are about 2.5 bil­lion ac­tive Android de­vices world­wide, ac­cord­ing to Google.

However, Google will stop pro­vid­ing Huawei with ac­cess, tech­ni­cal sup­port and col­lab­o­ra­tion in­volv­ing its pro­pri­etary apps and ser­vices go­ing for­ward, the source said.

Huawei has said it has spent the last few years prepar­ing a con­tin­gency plan by de­vel­op­ing its own tech­nol­ogy in case it is blocked from us­ing Android. Some of this tech­nol­ogy is al­ready be­ing used in prod­ucts sold in China, the com­pany has said.

In an in­ter­view with Reuters in March, Eric Xu, ro­tat­ing chair­man of Huawei, struck a de­fi­ant note in an­tic­i­pa­tion of re­tal­ia­tory ac­tions by U. S. com­pa­nies. No mat­ter what hap­pens, the Android Community does not have any le­gal right to block any com­pany from ac­cess­ing its open-source li­cense,” he said.

Popular Google apps such as Gmail, YouTube and the Chrome browser that are avail­able through Google’s Play Store will dis­ap­pear from fu­ture Huawei hand­sets as those ser­vices are not cov­ered by the open source li­cense and re­quire a com­mer­cial agree­ment with Google.

But users of ex­ist­ing Huawei de­vices who have ac­cess to the Google Play Store will still be able to down­load app up­dates pro­vided by Google. Apps such as Gmail are up­dated through the store, un­like op­er­at­ing sys­tem up­dates which are typ­i­cally han­dled by phone man­u­fac­tur­ers and tele­coms car­ri­ers, which the black­list could af­fect, the source said.

The im­pact is ex­pected to be min­i­mal in the Chinese mar­ket. Most Google mo­bile apps are banned in China, where al­ter­na­tives are of­fered by do­mes­tic com­peti­tors such as Tencent and Baidu.

In Beijing, for­eign min­istry spokesman Lu Kang said the min­istry had no­ticed the re­port and would look into it and pay at­ten­tion to de­vel­op­ments.

At the same time, China sup­ports Chinese com­pa­nies to use le­gal weapons to de­fend their le­git­i­mate rights,” he added, but did not elab­o­rate.

Huawei’s European busi­ness, its sec­ond-biggest mar­ket, could be hit as Huawei li­censes these ser­vices from Google in Europe.

Having those apps is crit­i­cal for smart­phone mak­ers to stay com­pet­i­tive in re­gions like Europe,” said Geoff Blaber, vice pres­i­dent of re­search, CCS Insight.


Read the original on www.reuters.com »

5 417 shares, 63 trendiness, 381 words and 3 minutes reading time

Matthew Prince 🌥 on Twitter

Skip to con­tent

A lit­tle bit geek, wonk, and nerd. Repeat en­tre­pre­neur, re­cov­er­ing lawyer, and for­mer ski in­struc­tor. Co-founder & CEO of Cloudflare.

You can add lo­ca­tion in­for­ma­tion to your Tweets, such as your city or pre­cise lo­ca­tion, from the web and via third-party ap­pli­ca­tions. You al­ways have the op­tion to delete your Tweet lo­ca­tion his­tory. Learn more

Public · Anyone can fol­low this list

Private · Only you can ac­cess this list

Here’s the URL for this Tweet. Copy it to eas­ily share with friends.

Add this Tweet to your web­site by copy­ing the code be­low. Learn more

Add this video to your web­site by copy­ing the code be­low. Learn more

Hmm, there was a prob­lem reach­ing the server.

By em­bed­ding Twitter con­tent in your web­site or app, you are agree­ing to the Twitter Developer Agreement and Developer Policy.

Why you’re see­ing this ad

Not on Twitter? Sign up, tune into the things you care about, and get up­dates as they hap­pen.

» See SMS short codes for other coun­tries

This time­line is where you’ll spend most of your time, get­ting in­stant up­dates about what mat­ters to you.

Hover over the pro­file pic and click the Following but­ton to un­fol­low any ac­count.

When you see a Tweet you love, tap the heart — it lets the per­son who wrote it know you shared the love.

Add your thoughts about any Tweet with a Reply. Find a topic you’re pas­sion­ate about, and jump right in.

Get in­stant in­sight into what peo­ple are talk­ing about now.

Get more of what you love

Follow more ac­counts to get in­stant up­dates about top­ics you care about.

See the lat­est con­ver­sa­tions about any topic in­stantly.

Catch up in­stantly on the best sto­ries hap­pen­ing as they un­fold.

Oh Paul, you know bet­ter. I had to bor­row money from my mom to pay my taxes when we were start­ing Cloudflare. But I cer­tainly came from a rel­a­tively priv­i­leged back­ground, and so did the AirBnB founders. It’s hard to take risks if you don’t have a safety net. be­real

Thanks. Twitter will use this to make your time­line bet­ter.

Loading seems to be tak­ing a while.

Twitter may be over ca­pac­ity or ex­pe­ri­enc­ing a mo­men­tary hic­cup. Try again or visit Twitter Status for more in­for­ma­tion.


Read the original on twitter.com »

6 316 shares, 26 trendiness, 669 words and 5 minutes reading time

The Sealed Garden That Was Only Watered Once in 53 Years

In 1960 David Latimer got cu­ri­ous and de­cided to plant a glass bot­tle with seed. He would have never guessed it would turn into a beau­ti­ful case study of a self-sus­tain­ing sealed ecosys­tem.

In fact, more than a cen­tury has passed and David’s sealed bot­tle gar­den is still thriv­ing and ro­bust as can be. With thriv­ing plant life, de­spite not wa­ter­ing it since 1972.

David planted the ter­rar­ium back in 1960 by plac­ing a quar­ter pint of wa­ter and com­post in the ten gal­lon bot­tle. He then low­ered in spi­der­worts seed­ing with a wire. Finally seal­ing it and plac­ing it in a cor­ner filled with sun. Letting mother na­ture do its thing through pho­to­syn­the­sis.

Photosynthesis puts mois­ture and oxy­gen in the air through the plants.  The mois­ture then starts to build and be­gins to rain back down on the plants.  Leaves will also fall and rot which pro­duces car­bon diox­ide that the plants need for nu­tri­tion.

It’s a beau­ti­ful ex­am­ple of how na­ture can sup­port it­self.

Larimer did open the bot­tle in 1972 to wa­ter the plant. But, since then it has re­mained sealed with­out fresh wa­ter or air.

This is pos­si­ble be­cause the gar­den makes its own ecosys­tem through the magic of the sun (photosynthesis) that is self-suf­fi­cient.

It’s 6ft from a win­dow so gets a bit of sun­light. It grows to­wards the light so it gets turned round every so of­ten so it grows evenly.  Otherwise, it’s the de­f­i­n­i­tion of low-main­te­nance. I’ve never pruned it, it just seems to have grown to the lim­its of the bot­tle.”

The sealed gar­den has been placed in the same ex­act spot for 27 years in the Latimer’s home.  Located in Cranleigh, Surrey.  First ex­posed to the world through Radio 4’s Gardeners Question Time on BBC by Chris Beardshaw.  Chris is not only a tele­vi­sion host, but also a gar­den de­signer.  Saying that he felt David’s sealed gar­den was in­deed the per­fect cy­cle of life and a great ex­am­ple of plants re­cy­cling abil­ity.   Also adding that it is the same method that NASA is in­ter­ested in bring­ing plants into space. Saying:

”Plants op­er­ate as very good scrub­bers, tak­ing out pol­lu­tants in the air, so that a space sta­tion can ef­fec­tively be­come self-sus­tain­ing,’ he said. This is a great ex­am­ple of just how pi­o­neer­ing plants are and how they will per­sist given the op­por­tu­nity.”

As stated ear­lier a bot­tle gar­den works by cre­at­ing a ecosys­tem that is self-sus­tain­ing.  Through plant pho­to­syn­the­sis and re­cy­cling nu­tri­ents.

Light is the only in­put needed ex­ter­nally.  Providing en­ergy for food and growth.  The light shines on the leaves and is taken in by pro­tein con­tain­ing chloro­phylls (green col­ored pig­ment).  The plant stores a por­tion of the light as ATP (adenosine triphos­phate) for en­ergy.  The re­main­ing amount is used in the plant roots to get rid of elec­trons from wa­ter.

The elec­trons then are free to re­lease oxy­gen by con­vert­ing car­bon diox­ide to car­bo­hy­drates through chem­i­cal re­ac­tions.

To de­cay or­ganic ma­te­r­ial like deal leaves the ecosys­tem em­ploys cel­lu­lar res­pi­ra­tion.  Which is done by bac­te­ria that takes in waste oxy­gen and re­leases car­bon diox­ide that helps the plant grow.

The plant will also use a sim­i­lar process of cel­lu­lar res­pi­ra­tion to break down nu­tri­ents it has stored when there is no sun­light (nighttime).

Many are skep­tic of this be­ing true and some like Bob Flowerdew (organic gar­dener) thinks that It’s won­der­ful but not for me, thanks. I can’t see the point. I can’t smell it, I can’t eat it,”.

Shockingly David Latimer feels the same.  Saying that the sealed bot­tle gar­den is pretty bor­ing.  Not re­ally do­ing much, but it does in­ter­est him enough to see how long it can sus­tain it­self.

He plans on pass­ing on this ex­per­i­ment to his kids when he passes.  Which if they don’t have an in­ter­est in it at that time it will then get passed on to the Royal Horticultural Society in London, England.

If this sounds in­ter­est­ing to you we sug­gest search­ing around the web.  There are many tu­to­ri­als like the video be­low that will help you make a bot­tle ter­rar­ium.

It’s a sim­ple al­most zero main­te­nance, fas­ci­nat­ing ex­per­i­ment that just about any­one can do.


Read the original on biologicperformance.com »

7 277 shares, 26 trendiness, 772 words and 6 minutes reading time

Project History

Documenting the re­cov­ery and restora­tion of an IBM System 360 Model 20 and po­ten­tially an IBM System 370 Model 125

In late April of 2019 Adam Bradley and Chris Blackburn were sit­ting in a pub on a Monday night when Chris hap­pened across a some­what un­usual eBay list­ing for an IBM 360 Model 20. This eBay list­ing was un­usual mainly be­cause it did­n’t ac­tu­ally list the com­puter as an IBM 360, but rather as an seltene Anlage Puma Computer IBM 2020” which roughly trans­lates from German into rare plant Puma Computer IBM 2020”.

The con­tent of the ad­vert text was sim­i­larly odd:

Sehr geehrte Damen und Herren,

wir bi­eten Ihnen eine rel­a­tiv sel­tene Anlage Puma Computer IBM 2020 wohl aus den 1980er Jahren in Rot mit Zubehör, Regal mit Rollen u.a. an. Einzelne Teile sind gekennze­ich­net mit den Nummern: SYSTEM 360, IBM 29, 3504, 2020, 1403, 3125, 5471, 2415, 2311, 2203, 2501, 2560, 2152. Da diese Anlage schon län­gere Zeit in einem äl­teren Haus steht, wis­sen wir nicht, ob diese kom­plett ist. Ob alle Teile da sind, ist für uns als aus­führende Firma im Auftrag des Hauseigentümers nicht bekannt. Einzelteile sind im schlechteren Zustand und möglich ko­r­rodiert. Die Maße sind un­ter­schiedlich, max. Höhe 1,7 m ca. Insgesamt sind sechs Teile in den Maßen ca. 1 x 1 m, Tiefe ca. 60 cm.

Bedingung für die Abgabe: Abholung in Nürnberg eben­erdig (2 Stufen) in­ner­halb von 14 Tagen.

Viel Erfolg und Spaß beim Bieten!

Am 08.04.19 hat der Verkäufer die fol­gen­den Angaben hinzuge­fügt:Um­fang: ein Mercedes-Benz Sprinter voll.”

we of­fer you a rel­a­tively rare plant Puma Computer IBM 2020 prob­a­bly from the 1980s in red with ac­ces­sories, shelf with rolls u.a. on. Individual parts are iden­ti­fied by the num­bers: SYSTEM 360, IBM 29, 3504, 2020, 1403, 3125, 5471, 2415, 2311, 2203, 2501, 2560, 2152. Since this sys­tem has been in an older house for some time, we know that not, if this is com­plete. Whether all parts are there is not known to us as an ex­e­cut­ing com­pany on be­half of the home­owner. Items are in worse con­di­tion and pos­si­bly cor­roded.

The di­men­sions are dif­fer­ent, max. Height 1.7 m ap­prox. In to­tal, six parts in the di­men­sions of ap­prox. 1 x 1 m, depth ap­prox. 60 cm.

Condition for de­liv­ery: Collection in Nuremberg at ground level (2 lev­els) within 14 days.

On 08.04.19 the seller added the fol­low­ing in­for­ma­tion:

Scope: a Mercedes-Benz Sprinter full.”

Luckily, there were pho­tos. The pho­tos be­low are the only ones that the ad­vert had on it:

As you can prob­a­bly tell, these aren’t the clear­est pho­tos, but they gave us enough of an idea of what was there… a once in a life­time find. We de­cided we had to have it. Adam put in a bid of around 500 Euros and we waited. The ad­vert fin­ished the fol­low­ing day around mid­day. Luckily, Chris and Adam work to­gether and as such the next morn­ing in the of­fice was rather tense! There was quite a flurry of bid­ding ac­tiv­ity right at the end of the auc­tion and with sec­onds to go and an ex­cla­ma­tion of Screw it!” Adam en­tered a bid of 4500 Euros. The ham­mer fell on 3710 Euros! We were now the proud own­ers of one IBM 360… or so we thought!

Read the blog to learn the saga that un­furled fur­ther and how we even­tu­ally tack­led the prob­lems we dis­cov­ered. The core parts of the ac­qui­si­tion story are de­tailed in these posts:

There are 3 main peo­ple in­volved in the restora­tion and preser­va­tion of the IBM 360 Model 20 sys­tem:

Adam Bradley — Adam is multi-tal­ented en­gi­neer who’s been in­volved in the com­puter his­tory field for over a decade at The National Museum of Computing. Adam is a Railway Software Engineer day to day, and when he’s not play­ing with com­put­ers he’s prob­a­bly un­der the bon­net of a car or mak­ing some­thing ve­hi­cle re­lated.

Christopher Blackburn — Chris is an en­gi­neer with a strong back­ground in Electronics. Chris has been in­volved in many in­ter­est­ing pro­jects in the past, mostly fo­cused around the UK Railway sys­tem. Chris has also been in­volved with The National Museum of Computing for some time.

Peter Vaughan — Peter is an en­gi­neer cur­rently work­ing in the Medical in­dus­try. He also looks af­ter the IBM 1130 which can cur­rently be seen in op­er­a­tion at The National Museum of Computing. Peter vol­un­teers at the National Museum of Computing where he’s been a core vol­un­teer for well over a decade.


Read the original on ibms360.co.uk »

8 251 shares, 29 trendiness, 1553 words and 13 minutes reading time

Getting my personal data out of Facebook

In January 2019, I closed my Facebook ac­count be­cause it was no longer of any pro­fes­sional use to me. As a European cit­i­zen, the di­rec­tive gives me the right to re­quest the data Facebook has about me, and ask for its dele­tion. Unsurprisingly liv­ing up to its rep­u­ta­tion, Facebook re­fuses to com­ply with my Subject Access Requests in an ap­pro­pri­ate man­ner. This page is track­ing my com­mu­ni­ca­tion with Facebook and their re­sponses, with the aim of at­tract­ing at­ten­tion to their un­law­ful prac­tices and fix­ing the process for every­one. It pro­vides in­ter­est­ing in­sights into the cu­ri­ous legal” ma­neu­vers by Facebook, and would at times even be funny—if only it was­n’t so sad.

On this page, you will find links to the full text to all emails sent by Facebook and by my­self. There is quite some sar­casm and cyn­i­cism in my replies, which hope­fully makes the dull le­gal stuff a tiny bit en­ter­tain­ing.

If you’re a Facebook user, you might like to know that Facebook con­sid­ers you too stu­pid to un­der­stand your own data. If you’re a lawyer, you’re prob­a­bly go­ing to cringe at their very pe­cu­liar bend­ing of European law.

Facebook’s strat­egy is dis­sua­sion. They will pur­posely over­load you with a lot of tech­ni­cal, le­gal, or other non­sense, with the aim of mak­ing you give up. They bet on you giv­ing up. They will send you wrong, con­fus­ing, and con­flict­ing in­for­ma­tion, and will re­ply as late as they think they can get away with, even out­side of le­gal bound­aries.

Understand that the whole thread be­low comes from a com­pany that has had a de­part­ment for years, so their lack of ap­pro­pri­ate ac­tion should be at­trib­uted to ma­li­cious in­tent rather than in­com­pe­tence. Note how even some of their canned re­sponses con­tain ty­pos and gram­mar mis­takes, as if they some­how were not pre­pared.

The lat­est email I re­ceived from Facebook con­firms that they are with their ear­lier state­ment that—and I para­phrase—they can­not give me my data, be­cause the av­er­age per­son is too dumb to un­der­stand sim­ple things like their lo­ca­tion his­tory.

I of course dis­agree and am await­ing a re­sponse to a very con­crete fol­low-up re­quest.

In yet an­other at­tempt to fur­ther spread con­fu­sion, Facebook’s fa­mous phil­an­thropist and hyp­ocrite Mark is call­ing for more reg­u­la­tion on the Internet. The irony of course is that Facebook does not even re­spect ex­ist­ing leg­is­la­tion— in my case. So Mark call­ing for more leg­is­la­tion is like a 3-year old ask­ing for more Brussels sprouts: if you know you’re not gonna eat them, it’s only show. Whereas he surely would like shed­ding some re­spon­si­bil­i­ties (I would like him to do that, too), we should con­sider his strat­egy to be one of smoke and mir­rors. People re­mem­ber Facebook ask­ing for more reg­u­la­tion; they tend to for­get the ton of leg­is­la­tion Facebook con­ve­niently ig­nores.

For me, it’s sim­ple: I want my data back. Every sin­gle piece of data Facebook has about me, I want it. I want to un­der­stand what they know about me and how they (potentially) use it. And when I have it, I will ask them to delete all of it. No hard feel­ings: I had some al­right times on Facebook, but time has come to move on, and just like when mov­ing places, I’m tak­ing all of my stuff with me. After all, it is my le­gal right.

I am not a lawyer—I am a com­puter sci­en­tist spe­cial­iz­ing in Web data. So I can per­fectly imag­ine and un­der­stand the kind of data Facebook has on me. I am also in­volved in an ini­tia­tive to sep­a­rate data from apps, so Facebook seemed like a very good test case.

Facebook has a Download Your Information tool, which is part of their afore­men­tioned smoke and mir­rors strat­egy to give peo­ple the feel­ing that they can al­ways ob­tain their data (and to fake good­will to­ward the to make it seem they re­spect ).

Unfortunately, that tool only gives me all of the data I put on there my­self. So noth­ing I did­n’t al­ready have. After all, why would I leave my only copy of a photo on Facebook? So no, this tool does not al­low me to ex­er­cise my rights.

I send an of­fi­cial sound­ing email to datare­quests@sup­port.facebook.com us­ing a tem­plate I found on­line, which pre­sum­able con­tains the right legalese. Even though they do not need a copy of my pass­port, I did not want to give them any grounds for re­fus­ing my re­quest af­ter 30 days (which is their dead­line).

Some min­utes prior, I sub­mit­ted the same re­quest through the form on their web­site, which they are hid­ing deeply in their sup­port sec­tion. This form is not ac­ces­si­ble by every­one, and in par­tic­u­lar does not seem to work from within the . Not valid, since ap­plies to cit­i­zens every­where, re­gard­less of where they live.

Facebook au­to­mat­i­cally replies to my form sub­mis­sion (but not to my e-mail). They ask me to en­sure I have pro­vided suf­fi­cient de­tail, which my re­quest in­deed con­tains.

I am slightly sur­prised by their slop­pi­ness when it comes to lan­guage and spelling.

In an un­in­ten­tional at­tempt at a self-ful­fill­ing prophecy, Javier from Privacy Operations refers to my re­quest as a .

I tell Javier I don’t ap­pre­ci­ate his stalling of my re­quest and re­quest to be put in touch with his su­per­vi­sor.

It’s Valentine’s Day and I’m of­fi­cially in a com­pli­cated re­la­tion­ship with Facebook. They did not an­swer within the le­gal term of 30 days, so I re­minded them of their oblig­a­tions.

A late Valentine’s Day pre­sent ar­rives from Sam. True to their tested smoke and mir­rors strat­egy, Facebook sends me a list of all data they have about me, and then hap­pily pro­ceed with not giv­ing me any of it. The au­dac­ity.

It took them over a month to send me a bad copy and paste of the in­for­ma­tion on their own web­site. The email in­structs me to Go to the top right of Facebook and click, which is what you get if your im­age does not have an alt at­tribute.

I call out Sam on their lack of ac­tion, and use their own list to tell them ex­actly what data I want. That seems clear and sim­ple enough.

Disappointed about the lack of ap­pro­pri­ate ac­tion, I de­cide it’s time to di­rectly con­tact Stephen Deadman, Facebook’s fresh Data Protection Officer (). I also send it to some other promi­nent Facebookers, just to en­sure it ar­rives well.

How did I ob­tain their email ad­dresses? Turns out that the European Commission some­times in­cor­rectly cen­sors doc­u­ments in re­sponse to in­for­ma­tion ac­cess re­quests.

In their most fas­ci­nat­ing move yet, Facebook comes up with a lot of ridicu­lous le­gal non­sense. They are ob­vi­ously try­ing to over­load me by giv­ing the im­pres­sion that they know what they are do­ing. Did they re­act on April Fools’ Day for plau­si­ble de­ni­a­bil­ity?

On the one hand, they list a ridicu­lous amount of le­gal cases that have noth­ing to do with my re­quest. I did not ask for raw data, but they reckon that mis­rep­re­sent­ing my re­quest will make me doubt my­self. They even go as far as re­defin­ing .

On the other hand, they make a very in­ter­est­ing legal” argument”. con­tains pro­vi­sions to en­sure that com­pa­nies re­turn data in an ac­ces­si­ble for­mat, to avoid that they would over­load peo­ple with mean­ing­less data dumps. However, one of the cre­ative le­gal ge­niuses at Facebook came up with this gem:

* Facebook says that re­quires their re­sponse to use clear lan­guage.

* This means that their re­sponse should be un­der­stand­able by the av­er­age per­son.

* But they con­sider their data is too com­plex for that av­er­age per­son.

* Hence, they feel they are not obliged to give any data.

In other words: you are too stu­pid to un­der­stand your own data, and this in­cludes things like your lo­ca­tion and which de­vice you have used when. You know, sim­ple things you would­n’t un­der­stand. Or how they turn their oblig­a­tion to sim­plify what they need to send into an ex­cuse for not send­ing any­thing at all.

Interestingly, they also ac­knowl­edge that mul­ti­ple peo­ple from their have re­ceived my for­wards. That was­n’t very smart of them. You would al­most think these peo­ple don’t know what they’re do­ing.

I send Alex a flam­ing re­ply in which I call his supreme leader a hyp­ocrite for beg­ging for more reg­u­la­tion, while at the same time in­struct­ing his in­terns to bla­tantly vi­o­late ex­ist­ing leg­is­la­tion like . I’m act­ing a bit snubby. I’m call­ing him out on all of his pseudole­gal non­sense and de­mand my data—again.

Of course Stephen Deadman and his friends are in , now that I know they are re­ceiv­ing my mails. I would send them a Facebook mes­sage, but I closed my ac­count.

Facebook is sat­is­fied. They are re­peat­ing them­selves and act an­noyed that I am still ask­ing them con­crete ques­tions, even though they made it abun­dantly clear that they will not ful­fill their le­gal oblig­a­tions. Why am I both­er­ing them? They are Facebook, they are above any law.

In my un­sat­is­fied re­ply, I re­mind Alex that . To avoid him com­ing up with loads of ex­cuses, I make him a very con­crete re­quest: give me my Network and Connections data, which clearly can be un­der­stood by .

I am pas­sion­ately cu­ri­ous how they will try to get out of this one.

I’m sure they’re cre­ative, but Alex might need his man­ager here.

This will only end with me get­ting my data, ob­vi­ously.

And thereby giv­ing you a clearer path to get yours.


Read the original on ruben.verborgh.org »

9 250 shares, 15 trendiness, 634 words and 5 minutes reading time

Mystery meat OpenJDK builds strike again

gil at azul.com


Lumpy.local-43% docker run -it –rm open­jdk:8 java -version open­jdk ver­sion 1.8.0_212” OpenJDK Runtime Environment (build 1.8.0_212-8u212-b01-1~deb9u1-b01) OpenJDK 64-Bit Server VM (build 25.212-b01, mixed mode) Lumpy.local-44% date Wed May 15 11:41:12 PDT 2019

Look at the build num­ber care­fully… This was pop­u­lated no later than March 27, 2019. 3 weeks be­fore the ac­tual 8u212 was re­leased on April 16, 2019.


Lumpy.local-46% docker run -it –rm open­jdk:11 java -version open­jdk ver­sion 11.0.3” 2019-04-16 OpenJDK Runtime Environment (build 11.0.3+1-Debian-1bpo91) OpenJDK 64-Bit Server VM (build 11.0.3+1-Debian-1bpo91, mixed mode, shar­ing) Lumpy.local-47% date Wed May 15 11:43:12 PDT 2019

This one was pop­u­late dno later than April 3, 2 weeks be­fore the ac­tual 11.0.3 was re­leased on April 16, 2019

If any­one was won­der­ing about the im­por­tance of hav­ing ver­sion strings say EA (or some other THIS IS NOT a RELEASED VERSION warn­ing) on any and all OpenJDK builds that are not an ac­tual re­lease build, the above shows you how bad things get when that prac­tice is not fol­lowed.

Right now, any­one us­ing the *Official* Docker im­ages for OpenJDK 8 and 11 (https://​hub.docker.com/​_/​open­jdk) is prob­a­bly think­ing that they are run­ning 8u212 or 11.0.3, when what they are ac­tu­ally run­ning is an in­terim work in progress build”, with sev­eral bugs un­ad­dressed, sev­eral up­dates miss­ing, and (critically) CVE vul­ner­a­bil­i­ties that were fixed in the ac­tual 8u212 and 11.0.3 un-ad­dressed.

The me­chan­ics of how this sit­u­a­tion came about seem to be:

The docker file for open­jdk:8 (https://​github.com/​docker-li­brary/​open­jdk/​blob/​b8ce9­ef­f38451de3282b2e­b2bcd8b520f­b95e1ce/​8/​jdk/​Dock­er­file ) was up­dated on March 27, 2019, 3 weeks be­fore the ac­tual re­lease of OpenJDK 8u212 (see changes in https://​github.com/​docker-li­brary/​open­jdk/​com­mit/​b8ce9­ef­f38451de3282b2e­b2bcd8b520f­b95e1ce#diff-fe­f076ee1e5f270f2c5a93d075150919), and is set to use a spe­cific Debian stretch build ver­sion (8u212-b01-1~deb9u1) that was avail­able at that time, pulled via apt-get from de­bian stretch re­pos.

Similarly, the docker file for open­jdk:11 (https://​github.com/​docker-li­brary/​open­jdk/​blob/​178c542f­b­b93a8f8a42e331b73a1214c9d8ba81d/​11/​jdk/​Dock­er­file) was up­dated on April 3, 2019, two weeks be­fore the ac­tual re­lease of OpenJDK 11.0.3 (see changes in https://​github.com/​docker-li­brary/​open­jdk/​com­mit/​178c542f­b­b93a8f8a42e331b73a1214c9d8ba81d#diff-c338262eaf0fd203322a06702be174e0), and set to use a spe­cific Debian stretch build ver­sion (11.0.3+1-1~bpo9+1) also pulled via apt-get from de­bian stretch re­pos.

Why Debian pop­u­lated their re­pos with these builds is their busi­ness, and why docker chose to use those spe­cific de­bian builds can be spec­u­lated about all we want. the de­tails don’t mat­ter. The end re­sult of these cu­mu­la­tive reasonable” (according to some peo­ple) choices is that the de­fault open­jdk runs done by mil­lions of peo­ple on docker right now are us­ing mystery meat”, in­com­plete, and ex­posed builds while seem­ing to re­port (to the lay per­son) a Java ver­sion that would sug­gest a real 8u212 or 11.0.3 (which one would ex­pect has the se­cu­rity vul­ner­a­bil­i­ties in the April up­date ad­dressed, the bug fixes in­cluded, etc.).

Making sure OpenJDK ver­sion string only show non-EA con­tents in ac­tual re­lease builds (which is the prac­tice we had re­cently moved to for both 8u and 11u) will not nec­es­sar­ily pre­vent such un­for­tu­nate de­ci­sion chains from get­ting in­terim builds to un­sus­pect­ing end users, but will at least (assuming no mal­ice is in­volved and no man­ual re­moval of EA la­bels hap­pens) make it clear to the end user that what they got is not an ac­tual re­leased ver­sion.

— Gil.

More in­for­ma­tion about the jd­k8u-dev

mail­ing list


Read the original on mail.openjdk.java.net »

10 238 shares, 12 trendiness, 1978 words and 16 minutes reading time

The Software Developer's Framework to Robust & Maintainable Code [with Examples]

From the up­com­ing free ebook, SOLID - An in­tro­duc­tion to soft­ware ar­chi­tec­ture and de­sign prin­ci­ples with Node.js and TypeScript.

Writing code can be like pour­ing con­crete.

If what you’ve writ­ten in the past does­n’t suit your needs to­day, it can be ex­pen­sive to change.

So if we’re writ­ing code, we need to write code that can be changed.

That’s a lot harder than it sounds.

My ini­tial ap­proach to writ­ing code was that if I get enough time to do it, I can hack it to­gether and make it work”.

I re­al­ized that mak­ing things work the first time was easy. It’s just brute force, re­ally.

But adding fea­tures to ex­ist­ing code? Making it work the sec­ond time, the third time and the fourth time? Multiple it­er­a­tions on some­thing can be hard to do with­out in­tro­duc­ing bugs.

I should have changed it to if I get enough time to do it, I can hack it to­gether and make any­thing work [once]”.

In 180k-line JavaScript pro­jects, I found it hard to it­er­ate fast. Iterations and in­cre­men­tal im­prove­ments are what ag­ile is all about.

Eventually, I got tired of push­ing out bugs to users and get­ting stuck in messes that I made my­self. I re­al­ized some­thing needed to change.

When we first start out cod­ing, we of­ten have lit­tle re­gard for soft­ware de­sign.

Why should we? After we achieve dex­ter­ity with a pro­gram­ming lan­guage, we fo­cus our ef­forts on fight­ing un­de­fined er­rors, what this means and sev­eral other an­noy­ing things.

Not to men­tion, it’s pretty chal­leng­ing to en­ter the JavaScript work these days.

JavaScript de­vel­op­ers have a lot on their plates to fig­ure out as is (browsers, tran­spi­la­tion, build tools, and now TypeScript).

The learn­ing roadmap for JavaScript de­vel­op­ers can be a lot less stream­lined than it can be for Java and C# de­vel­op­ers.

So to­day, I’m here to bring aware­ness on the sub­ject of de­sign to JavaScript de­vel­op­ers who won’t tol­er­ate the thought of writ­ing an­other flimsy Node.js back­end.

We’ve all done it, and it hurts… slowly.

In or­der to go fast, we need to go well

I think the an­swer is Uncle Bob’s SOLID Principles.

The SOLID prin­ci­ples are a set of soft­ware de­sign prin­ci­ples that teach us how we can struc­ture our func­tions and classes in or­der to be as ro­bust, main­tain­able and flex­i­ble as pos­si­ble.

The SOLID prin­ci­ples are a mnemonic acronym that were pop­u­lar­ized by Robert C. Martin (Uncle Bob) in 2004-ish. They stand for:

If you ask me, the pri­mary ben­e­fits of be­com­ing well ac­quainted with the SOLID prin­ci­ples are that you’ll learn how to:

* write code where things are where they’re ex­pected to be

* write code where classes nar­rowly do what they were in­tended to do

* write code that can be ad­justed and ex­tended quickly

* write code that can be ad­justed and ex­tended quickly with­out pro­duc­ing bugs

* write code that al­lows for im­ple­men­ta­tions to be swapped out (think swap­ping out Email APIs, ORMs or web server frame­works)

So let’s go through em!

A class or func­tion should only have one rea­son to change.”

So, in­stead of think­ing that we should split code up be­cause it would look cleaner in a sin­gle file, we split code up based on the so­cial struc­ture of the users us­ing it. Because that’s what re­ally dic­tates change.

If we had an HR de­part­ment, an Accounting de­part­ment and an IT de­part­ment in an en­ter­prise ap­pli­ca­tion that cal­cu­lates pay, and re­ports and saves hours, we’d bet­ter make sure that we’ve split up (or ab­stracted) the op­er­a­tions most likely to change for each each de­part­ment.

This is bad, very bad. The al­go­rithm for each de­part­ment is lo­cated in the same class. If one de­part­ment were to re­quest a change to one of their re­spec­tive al­go­rithms, it has the in­creased po­ten­tial to rip­ple into an­other de­part­men­t’s al­go­rithm.

Making this work would re­quire some nasty if or switch state­ments.

Design Tip: If we see lots of code in switch state­ments, that should be a sig­nal to us of a po­ten­tial refac­tor­ing from a switch state­ment to sev­eral classes.

Much bet­ter. Each em­ployee in this so­cial struc­ture has a sin­gle place where we can go to in or­der ad­just their re­spec­tive al­go­rithm that is most likely to change.

The key thing is to sep­a­rate re­spon­si­bil­ity based on the so­cial struc­ture of the users us­ing the ap­pli­ca­tion.

Intially writ­ten about by Bertrand Meyer in the 1980s, Uncle Bob calls this the most im­por­tant prin­ci­ple of ob­ject-ori­ented de­sign”.

A soft­ware ar­ti­fact should be open for ex­ten­sion but closed for mod­i­fi­ca­tion.”

Generally, this prin­ci­ple is all about writ­ing your code in such a way so that when you need to add new func­tion­al­ity, it should­n’t re­quire chang­ing the ex­ist­ing code.

That’s what we strive for in soft­ware ar­chi­tec­ture 😤. Being able to de­sign your soft­ware so that the min­i­mum amount of code needs to change in or­der to take it from point A to point B.

To do this, we write in­ter­faces and ab­stract classes in or­der to dic­tate the higher-level pol­icy that needs to be im­ple­mented, and then we im­ple­ment that pol­icy us­ing con­crete classes.

Let’s say that our boss told us that he wanted us to use SendGrid for send­ing emails.

So we went and coded out a con­crete SendGridService class, con­nect­ing to the Sendgrid API.

3 months later he tells us that he wants us to use MailChimp in­stead be­cause SendGrid is too ex­pen­sive.

So we go and code a con­crete MailChimpService. But in or­der to hook it up, we’re go­ing to have to change and po­ten­tially break a lot of code.

How could we have de­signed that bet­ter?

Following OCP, we could de­fine an in­ter­face that spec­i­fies what a mail ser­vice can do, and leave the ac­tual im­ple­men­ta­tion to be fig­ured out sep­a­rately.

The main idea is to keep the pol­icy sep­a­rate from the de­tail in or­der to en­able loose cou­pling.

Higher level-com­po­nents are pro­tected from changes to lower level com­po­nents.

This goes hand-in-hand with the Dependency Inversion Principle of de­pend­ing on an in­ter­face in­stead of con­cre­tions, and closely with Liskov Substitution Principle in terms of be­ing able to swap out im­ple­men­ta­tions as long as the same type/​in­ter­face is be­ing de­pended on.

This prin­ci­ple still makes a lot of sense when we think about the larger pic­ture of soft­ware ar­chi­tec­ture.

Imagine that this is some generic app where there’s a con­troller that han­dles re­quests, passes it off to Use Case (something that ac­tu­ally ex­e­cutes the busi­ness logic) and then maps the re­sponse into two dif­fer­ent views for a Web App and a Mobile App.

It’s the Use Case!

If the Use Case were to change, it would likely af­fect the data­base, the con­troller and the data map­pers which cre­ate views passed to web and mo­bile.

But if the Web or Mobile View were to change, it’s a lot less likely that that re­quire­ment will trans­late into some­thing that af­fects the Use Case be­cause the Use Case con­tains the busi­ness logic and the en­ti­ties.

Higher level-com­po­nents are pro­tected from changes to lower level com­po­nents.

Introduced by Barbara Liskov in the 1980s, she said:

Let Φ(x) be a prop­erty prov­able about ob­jects x of type T. Then Φ(y) should be true for ob­jects y of type S where S is a sub­type of T.

The eas­i­est way to ex­plain it is that we should be able to swap one im­ple­men­ta­tion for an­other.

In Uncle Bob’s Clean Architecture”, he says:

To build soft­ware sys­tems from in­ter­change­able parts, those parts must ad­here to a con­tract that al­lows those parts to be sub­sti­tuted one for an­other.”

He’s talk­ing about us­ing in­ter­faces and ab­stract classes.

I think the Mail ex­am­ple we gave a mo­ment ago is the best way to think about this.

We can im­ple­ment var­i­ous email ser­vices, as long as they im­ple­ment the IMailService in­ter­face and the re­quired send­Mail(email: Mail) method.

And then we can Dependency Inject” it into our classes, mak­ing sure we re­fer to the in­ter­face it be­longs to rather than one of the con­crete im­ple­men­ta­tions.

Now, all of these are valid.

Because we can in­ter­change which im­ple­men­ta­tion of an IEmailService we pass in, we’re ad­her­ing to LSP.

Prevent classes from re­ly­ing on things that they dont need

In or­der to pre­vent this, we should make sure to re­ally split up the unique func­tion­al­ity into in­ter­faces.

And we should be de­pend­ing only on in­ter­faces or ab­stract classes as per the the Dependency Inversion Principle.

Let’s say we have 3 dif­fer­ent User classes, that use 3 dif­fer­ent meth­ods on the same Operations class, and for each User class, we’re de­pend­ing on 2 ad­di­tional op­er­a­tions that we don’t need.

For this, it might not seem like a big deal. But it could be a big deal if the con­struc­tor for the Operations class re­quired us to in­ject all dif­fer­ent kinds of de­pen­den­cies in or­der to sat­isfy the other 2 op­er­a­tions that we did­n’t need.

That’s when it’s re­ally a blar­ing no-no.

This does oc­ca­sion­ally end up with ser­vices in CRUD-first de­sign, but to fix it, we can start by mak­ing sure that we rely on ab­strac­tions to the things that we need.

And then, if it were cum­ber­some to cre­ate the Operations class be­cause it de­pended on so many things, tak­ing User1 for ex­am­ple, we would be able to cre­ate a class that ONLY im­ple­ments U1Ops.

Now User1 can only needs that class and not all the other junk from Operations.

Abstractions should not de­pend on de­tails. Details should de­pend on ab­strac­tions.

What’s an ab­strac­tion again? An in­ter­face or ab­stract class.

Abstractions should never de­pend on de­tails. Ok, so that means, try not to do this:

But in­stead, do this.

You can nor­mally tell when I’m us­ing an in­ter­face (at least in my code) from the Microsoft code style, which rec­om­mends that we pre­fix in­ter­faces with an I”.

And this is al­ready what you’ve bee­ing see­ing through­out this ar­ti­cle so far! We’ve been re­fer­ring to ab­strac­tions (interfaces and ab­stract classes) in­stead of con­crete ones.

We can’t never ref­er­ence con­crete classes. That’s how we ac­tu­ally hook things up to get stuff to hap­pen.

Like hook­ing up an ex­press.js router.

We need to ref­er­ence those con­crete CreateUserController and MailGunEmailService classes in or­der to hook them up.

But we only do this to hook them up. Uncle Bob calls these Main com­po­nents. They’re messy but they’re nec­es­sary.

However, we should­n’t re­fer to con­crete classes from an­other con­crete class di­rectly.

This is what gives us the abil­ity to test code, be­cause we leave the power to the im­ple­men­tor to pass in a mocked de­pen­dency if we don’t want to make API calls or rely on some­thing we’re not cur­rently in­ter­ested in test­ing.

Therefore, do this.

And def­i­nitely not this.

If hook­ing up de­pen­den­cies to classes like this gets out of hand where there are po­ten­tially hun­dreds of de­pen­den­cies, we can look to a Dependency Injection Framework to help re­solve de­pen­den­cies auto-mag­i­cally.

Although I haven’t tried it, Inversify seems to be the most pop­u­lar one at the mo­ment.

If you’re in­ter­ested in a deeper dive, check out the wiki page on this prin­ci­ple.

We just went through all of the SOLID prin­ci­ples.

If you’re us­ing TypeScript, for you to re­ally get the most out of your ob­ject-ori­ented soft­ware de­sign ef­forts, I rec­om­mend re-read­ing this ar­ti­cle a few times and re­fer­ring back to it as you write TypeScript code, ask­ing your­self is this SOLID”?

And if you’re in­ter­ested in hav­ing some­thing you can down­load, I’m putting to­gether an ebook (that’s free be­fore its re­lease) on ap­ply­ing the SOLID prin­ci­ples in Node.js and TypeScript.

Definitely grab that if you’re in­ter­ested in hav­ing some­thing you can print out.

Wow, we re­ally talked a lot about in­ter­faces, did­n’t we?

And you know what the sad part is?


Read the original on khalilstemmler.com »

To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".

10HN is also available as an iOS App

If you visit 10HN only rarely, check out the the best articles from the past week.

If you like 10HN please leave feedback and share

Visit pancik.com for more.