Sunday, January 31, 2016

Follow technology dream, slightly un-break the world , accept some regret

Over 15 years , I made a few sacrifices to follow my tech dream to make the world slightly better place. After 4 years of reflection, I have some satisfaction and some selfish regrets. Click bait but true, the selfish regrets probably aren't what you'd think.

DISCLAIMER: There are at least 20 people I don't acknowledge here. Without you accepting the legal responsibility of board membership, making generous, sometimes sacrificial contributions of resources and/or providing the political and fund-raising advice I needed to keep our nose above water, this work wouldn't have happened. You deserve acknowledgement. However, I took 3 years to write what is here. Any more delay and this note will never be finished. I hope you know who you are and know that that I am grateful for your help.

Confirmation bias is a thing. If you repeat, over and over: "At least I tried", you can tell yourself: "yes, it was worth it."

If you believe:

 "Do not store up for yourselves treasures on earth, where moth
  and rust destroy, and where thieves break in and steal. But 
  store up for yourselves treasures in heaven, where neither 
  moth nor rust destroys, and where thieves do not break in 
  or steal; for where your  treasure is, there your heart 
  will be also.

...Earning about $7,000 per year for 15 years of tech support, system administration, cat herding, tutoring and software engineering is just fine.

So that's me with a spouse that paid the rent so I could be holier-than-thou for 15 years. Compared to the quiet guy who has run a good after school program in the same notorious low income neighbourhood for 40 years, I have few, legitimate self-righteous points.

Not maximizing my income was a means to the end of my dream of using technology to make a better world at the Community Software Lab (RIP). However, being (somewhat) low income had interesting side benefits. For example, these last 4 years at market rate, our income more than doubled. However, it ***feels*** like we've only been living only slightly large. Dinner and drinks a few times a week vs just coffee at the local shop. Running outside in the winter vs Yoga 5 days a week. Perhaps, the feeling of living large these past 4 years is muted by paying debts and starting to save toward old age.

Again, confirmation bias, but past an income floor of < some number of $ >, limiting desires is probably a better strategy for material happiness than increasing income. We still have credit card debt, but instead of paying to attend funerals on the other side of the country, we're paying off a winter beach vacation.

In my limited experience, subjective perception is better predictor of satisfaction than empirical measurement. Surrounded by middle income family, acquaintances and in-laws the expectations of our peers was always a greater pressure than the cost of adequate housing, food or medical care.

When I was a practising Catholic, I did informal tech support for the Oblates of Mary Immaculate. If lunch-time came in the middle of work, we had lunch together. I have a sense for how these guys live. Everyone has health care, an allowance for new uniforms, meals, a computer a bed room and a bathroom to themselves and a spot in the retirement home when the time comes.

The rooms were a little smaller than your average Motel 6, but a little less shabby. I think they got $20 per week in spending money. If they needed a car for work they submitted a budget. Oblates working over seas live even simpler, closer to the people they serve.

The Oblates have infrastructure and a supporting culture. It didn't seem like honouring the Oblate vow of poverty was a significant struggle. My spouse and I struggled in our unstructured time of relatively simple living. I think our struggle was more about being embedded in the culture of money than it was being able to pay our bills.

Considering only the money issues, for at least me, autonomy and the chance to make a difference, were worth not maximizing our income. However, for different selfish reasons, given a do over, I would do things differently.

The last 8 of 15 years, my focus was using novice programmers to build useful software for low income people in a organization I started called the Community Software Lab. Three lab alumni work at Google, Amazon and Microsoft. More significantly, three different people explicitly credit the Community Software Lab for significantly better opportunities and lives than they would have had otherwise.

Despite occasional flashes of student brilliance and the many personal indulgences granted me by teachers and educational bureaucrats, I've long considered the industrial/educational complex ineffective and unjust. The lecture system was created in medieval times because it is quicker to read a book aloud to 50 people than it is to hand-write 50 copies. Adjunct professors do almost all the revenue producing teaching but those without independent means are eligible for public assistance. (about 25% of them)

Writing software that people use, following a modern process is a better way to learn to program than listening to lectures or copying your roommate's homework. Requiring 100% test coverage for new code, creating detailed engineering documentation, tools , standards and processes and (most important) re-re-doing line by line code review, allowed people starting with only the ability to write a FOREACH loop to contribute production code and gain real skill. By unanimous testimonial, working with me was hugely more educational than undergraduate computer science education.

This is all anecdotal, but I challenge any CS dept to provide better outcomes with their standard program than I could locked in a room with five CS 101 grads and their tuition for 4 years.

The problem is that most people don't have the drive to write software. They want a paycheck or the entitlements accorded to the coder caste. They don't want to stay up until 3:00am, failing again and again, debugging for joy or compulsion. I helped hundreds of people confirm that they really didn't want to be engineers. The educational industrial complex has the advantage of not investing much emotional energy helping people accept their failure.

Over 8 years, of the approximately 200 people who I setup development environments for, 10 people created more value (useful code) than I could have created by spending the setup/ tutoring/ code review time just writing code myself. More people personally benefited from the experience, than contributed more than they took, but wasn't the greatest good for the greatest number.

Given only 1 chance to repeat the last 8 years of volunteer experience, (previous 7 are another matter) I'd ignore everyone else and lock myself in a room to code. Crappy as it was, our software did refer tens of thousands of people to the social services they needed. Not-crappy software would have been a far greater good for a far greater number. Certainly more the (at best ) 25 people who got to be better coders from their work with the Lab.

Compounding the uncertainty is my suspicion that most of our "successful" alumni would have made it anyway. The MIT dropout, yes. The guy with 10 years industry experience waiting out a recession, yes. The driven, angry, smart kid who'd lived half his life in foster care, probably.

Despite our best efforts, most of the people we gave practical experience to weren't especially dis-advantaged. Our usual admissions test was "Use Javascript to prompt the user for a positive integer, print the numbers between 1 and that integer". In theory this bar is low enough for anyone pass, in practice only 2 of the 10 productive people came from a low income background or with a label like "at risk youth" We probably accepted a good number of people without advantages, but subjectively, the big service we provided most of them was helping them accept that they didn't like coding.

Selfishly, given 8 years of effort, I wouldn't be the mediocre programmer I am today. If instead of explaining the same things over and over, I'd written and re-written code, I'd be pretty good, or at least better. It felt horrible to blow the recruiter level phone screen at Facebook. It felt worse to be completely oblivious to the sql INNER JOIN syntax on a web dev interview for a spot on a team full of people as smart or smarter than me. (FWIW, I am still reasonably employable at a few levels below elite. )

In both interviews, I missed things because I'd been focused on explaining existing code and making it hard for people to screw up new code instead of writing new code or updating code myself. Building skill is a different than helping other people learn. Also, usually being the most knowledgeable person in the room is not a recipe for personal growth.

For example in 2006, it was an acceptable practice to connect database tables in the SELECT clause. By my interview in 2013, modern databases supported JOINs and modern programmers used them.

This strong regret was obvious only in hind-sight, after I'd been away from the lab for a few years. In the moment, it was mostly great. I like Yoga a lot partly because the instructor usually feels compelled to thank the class for the privilege of sharing the skill. It feels very, very good to contribute to other people's ah-ha moments.

People talk about engineering education a lot like they talk about baseball. At the little league level there is lots of fun, but eventually the grind sets in. Maybe the grind is the price of greatness. Maybe the grind is yet another black mark for the educational/industrial complex. Having 3 people get jobs at famous companies, was OK. More satisfying than alumni success was watching a women, a serious A+ student, pound her heels, shake her fists and giggle after fixing a complicated bug.

Overall, these moments of joy didn't add up to what might have been with a more selfish approach.

--- or maybe a more effective approach ?

It's kinda obvious, but the reason only about 10 people gave more than they took and (guessing) only about 25 people benefited from the practical experience was that not many people put the needed time in.

Without exception, people who dabbled, trying to fit our work in between school or other jobs or being a mom, were a net loss. Some of those people were quite talented but just couldn't find the time.

The people that succeeded put in at least 20 hours a week and most of those people got paid a small stipend, --Often below minimum wage, but something.

Most of the people who succeeded, were Americorps/VISTAs, The government paid them 16K per year and basic health benefits. The program was created by President Kennedy to fight poverty through (almost) voluntarism and required a full time commitment. Other people got funded through Google Summer of Code. We got some contracts. I was able to fund-raise to pay other people. I did other completely unrelated contract programming work that paid relatively well.

This is an insight for other groups trying to skill-up low income or disadvantaged people. "Work for free" is not perceived as a survival skill by low income people or entitled feeling middle class people. There is an almost infinite distance between "almost nothing" and "free" for both producers and consumers. Many people needed the stipend to pay their rent. Other people just felt exploited working for free ---Even if the "work" was mostly training that they'd otherwise have to pay for.

The ideal would have been to have a summer camp with computers , Internet access, showers, a silo of rice and a silo of beans. Given that I spent about half my time trying to fund-raise as a charity and barely kept the doors open with an annual budget of around 20K , this was probably not a reachable ideal.

Given more than (1) chance for a do-over, I might just have worked as a market rate programmer, banked the money for 8 years and retired early to spend the banked money on stipends. ( Assuming my wants didn't expand to match my earnings )

The biggest sacrifice wasn't money, but personal growth. The biggest barrier to most people's personal growth was a little money. There is a difference between something and nothing. So there it is. Money isn't important, except when it is.

I've covered the major regret ( lack of personal growth). A minor regret is lack of measurement. If I'd taken the time to better define success in advance, I might have changed course earlier and I might have fewer doubts now

Disclaimer: The first version of our (MVHub) software was written by DS and EA in about 8 months working by themselves. During their work I was mostly focused on system administration. ---providing email, web hosting and databases to non-profit organizations.