sekmadienis, lapkričio 18, 2012

Pamokanti istorija apie Summer of Code studentą Wajahatą

Kur yra pinigų, ten atsiranda ir visokių smulkių ar stambių niekšelių, bebandančių juos pasisavinti.

Google kas vasarą organizuoja programą studentams visame pasaulyje: studentai siūlosi programuot opensourcą, o Google jiems už tai sumoka po $4500 (stipendijos dydis fiksuotas vienas ir tas pats visam pasauliui, o tai reiškia, kad, nors dalyvauja daug pirmojo pasaulio šalių studentų, jie taip nagais ir dantimis į programą nesikabina kaip studentai iš trečiojo pasaulio.) Viskas gražu ir visi būna patenkinti: opensourco organizacijos gauna prirašyto kodo ir motyvuotų kontributorių, Google gauna geros karmos bei short-listina kandidatus sau į internshipus ir įdarbinimus, o studentai gauna neblogą įrašą į CV ir pinigų.

Paskutinis punktas ypač įdomus. Taigi pasitaiko krūvos beverčių aplikacijų, krūvos aplikacijų, motyvuotų minties "o gal jie ten visi durniai", aibės e-mailų "sir plz tell me how I get teh moneys", ir dar kelios aplikacijos, kur studentas prisiekinėja amžiną meilę opensourcui ir tuo pat metu nėra niekad su juo anksčiau susidūręs. Dar yra studentų, kurie sugeba parašyti gerą aplikaciją, bet prisidaro problemų vėliau: dingsta, tada atsiranda dvi dienos prieš mid-termą (prie kurio passinimo pririštas $2000 išmokėjimas ir antra programos pusė) ir dievagojasi, kad dabar tai jau tikrai niekur nedings ir dirbs kaip prisukti.

Aš pats dalyvavau kaip studentas prieš šešis metus ir tai savo laiku gana smarkiai padėjo man karjeroje. Dabar, praėjus keliems metams, dalyvauju iš kitos pusės: atrinkinėju aplikacijas ir mentorinu atrinktus studentus. (Opensourcinė organizacija, kurioje šiemet tai darau, yra Drizzle, vienas iš MySQL forkų, taigi man arti mano day-job Percona, žodžiu, man patogu.)

Tokia priešistorė, dabar prie reikalo. Šiemet vienam tokiam projektui, kurį buvau numatęs mentorinti, atsiuntė aplikaciją toks Wajahatas bei papuolė tarp atrinktųjų.

OK, pradedam darbą! Aš jam parašiau emailą, jame pasveikinau tapus atrinktu, koks būtų pirmas projekto žingsnis ir kaip dirbsime toliau. Jis atrašė, kad puiku, ir... dingo. Į emailus nereagavo. Po savaitės su trupučiu aš pradėjau domėtis, ar negalima pakeisti studento (pačioje programos pradžioje tai įmanoma), bet, po dviejų savaičių tylos, jis atsirado. Kaip tik likus dienai iki studentų dokumentų pridavimo termino, prie kurio pririštas pirmų $500 išmokėjimas. Patogu, ar ne. Studentas labai atsiprašinėjo, minėjo visokius "travel due to family emergency", pažada "smooth communication now", na, tebūnie, pasitaiko.

Kelias sekančias dienas iš tikrųjų dirbo, bandė kažką aiškintis. Kol vėl nepražuvo dviem savaitėm. Manęs tai visai nedžiugino, parašiau laišką, kad nuo šiol reikės savaitinių statuso reportų. Jis atsirado, atsiprašė, sutiko su reportais, ir atsiuntė pirmą iš jų. Atidariau, aštuoniolikos lapų Word dokumentas, pilnas nieko: iš interneto atsiųsti paveiksliukai, atsitiktinių kodo funkcijų automatiškai sugeneruoti flowchartai ir kitoks BS. Aš jam parašiau tiesų emailą: reportas nesąmonė, projekto nesupranti, progresas nepatenkinamas, schedulinam Skype pokalbį, reikia daug apšnekėt. Jis su Skype sutiko, tiesa, užsimena apie kažkokias elektros problemas, susiskambinom, porą valandų pašnekėjome, lyg ir viską suprato. Man truputį ramiau, kad per tą pokalbį jis neblogai pasirodė, gal dar išplauks projektas. Porą dienų po pokalbio susirašinėjom emailais, klausimai vietomis atrodo įtartinai durnoki, na bet proto ribose.

Ir tada jis vėl dingo. Laukiau laukiau, kol beliko kelios dienos iki midtermo ir jis vėl atsirado su eiline BS rezultatų porcija. Aš juos peržiūrėjau, įvertinau likusį laiką, supratau, kad nieko čia nebus. Tada vietoj praignoruotų "kur dingai" laiškų parašiau jau visai kitokį laišką:

This progress is unacceptable and there is no time to improve it. It took you two weeks to send this status update. I have asked you for weekly status updates and for immediate contact if there are any roadblocks. All in all, the current state of the project is greatly behind the schedule and currently you are doing what you were supposed to do during the community bonding period, i.e. before the coding start.

Thus I'm very sorry but I don't have any other choice but to give a failing midterm evaluation for your project.

Please do not get discouraged and consider participating in the next year's program if you are still a student by then, after learning what could be improved the next time.
Šitas laiškas kažką užtrumpino ir kaipmat išsprendė visas vėluojančios komunikacijos ir studento pradingimo problemas. Atsakymas atėjo ne už savaitės ir ne už dienos, bet už trijų valandų:
I agree with your about the progress that is is unacceptable.
In fact, I wasn't even expecting that you will ever respond to my email.
It presents me like I am not at all interested in the project and the project
can, in no way, be completed if it continues on current speed.
That is not entirely true. The reason why I submitted a proposal for this project was
because it is in fact a very interesting project.
Although I have been very unfortunate that I couldn't utilise my time and I am not an 'excuse' person so I didn't want to discuss/mention the family issues and electricity problems that had affection the project progress, but I guess I should have had done that so that at least you were aware of my situation.But the kind of problems that were effecting me , you wouldn't ever believe them. I know communication has been also poor for the same reasons.

The reason why I may want to request you to reconsider your decision is based on the following;

Thing have changed since last Thursday.
- I am in UK (arrived Thursday last week) and glad that there is no electricity problem here.
- The reason for the last of communication for the last two weeks was that, I was busy resolving tickets, visa related issues.
- I am glad that there is no electricity problem here.

It will take no more than 10 days to finish off the project as I can work all day through.
I would like to continue to work on this. I can assure you that by the end of next week, I will finish this work off!
This is a challenge to myself and if I am unable to do this, I will consider myself a failure, but just so you know
I have never failed any project in my entire life and have dealt with projects of relatively much greater complexity.

I am working daily on it (without anything else on the plate/ no interruptions) and I can assure you I will
complete the project within two weeks (by the end of next week).

I can even update you daily with regards to the progress.


I will provide you the next update very shortly.
Kitą dieną (nei aš dabar jau kur nors skubėjau su šituo projektu, nei dar buvau spėjęs priprast, kad mes susirašinėjam dažniau nei kartas į dvi savaites) parašiau dar kartą "ne", pasiūliau dalyvauti kitąmet, ir kad, jei turi kažkokių techninių projekto klausimų, mielai atsakysiu, bet projektas jau nebebus Summer of Code. Gavau kelis laiškus, daugmaž va tokioj dvasioj (nieko neparyškinu, nes reiktų ryškinti viską):
Please let me know if you are willing to help me further with this. I know you have a good reason not to, but this is not in the interest of the project either. I am sincere with getting this project finished and I am sure you are as well. Although it is not intuitively apparent that the project will succeed, given the progress, but I believe it is still very much 'possible' and I am willing to work , no matter how many hours a day it takes. At the end, it's about the quality of work and I can promise you that you will be convinced with my results within the given timeframe.

I am not trying to change your decision based on my intensions. I will show you results. I will give you progress and given that there are still 4 days until the 13th of July, which is very challenging for me if we see from that point of view, but I want to try my best to utilise the remaining time to try and get a convincing result to you by the 13th of July.

At least this is not an unreasonable request?
Dar kartą parašiau, "ne, bet su techniniais klausimais padėsiu". Tada atėjo:
At this time, I am purely concerned about completing the project. I am not asking you to change you mind, since that is a different matter. This is purely intended to complete the project and has nothing to do with me requesting you to change your mind.
Lygiagrečiai atėjo dar viena status reporto iliuzija ir techniniai klausimai, pilni absoliutaus projekto nesupratimo. Laiškai dabar ateidinėdavo po kelis po dieną, kartais su pakartotais laiškais už poros valandų "aš vis dar laukiu atsakymo!" Aš neskubėdamas į juos atsakinėjau, nors reikalas žlugęs.

Studentas, supratęs, kad aš savo nuomonės nekeisiu, ėmėsi sekančio žingsnio: įtikinti kitus Drizzle Summer of Code mentorius. Pradėjo nuo Stewarto, šito projekto komentoriaus, mano kolegos:
To: Stewart, Laurynas
Subject: Urgent!
Hi Stewart,
               Hope you are well.
I am writing to you because Laurynas seems to be away (aš jam neatrašiau kelias valandas) and this is urgent.
Laurynas has informed me that he will fail me by mid-term evaluation.
Even despite explaining the reasons behind the lack of communication and providing reassurance that the project will get back on track, Laurynas seems to have not considered my circumstances. However, I am not complaining about the fact that he is unhappy.
If there was any other person in his place, even I myself, probably I would have done the same.

However, what I am unhappy about is the fact that, I am trying to recover the project from the last 6 days , I have literally worked 20hours / day and in the last 5 days I have worked over 100 hours, at least this should be given some degree of consideration .With this the progress has been achieved and now I am at the stage much much ahead of where I was five days ago and even very close to what I committed in the initial project plan.I have developed great understanding of the code.

I am making a small request to you.

1 - Please evaluate the work which I have submitted today, and also for the sake of a neutral evaluation, by ignoring the past and considering the actual work I have done, please provide me with feedback.
The progress can be found at
http://blahblahblah

2 - If you are happy, then please allow me to continue with the project. However if you are unhappy with current progress, there is an option to delay the evaluation by a certain timeframe, although I am not sure what the allowance for that. But If you would consider delaying the progress for a few days, and provide me with a target, I will try my best to meet that target. Because there are no more issues I am facing that would hinder the progress. The main issue was the electricity problem which no longer exists.

While I am writing this email to you, I am still working and hope to come up with an even more considerable progress.
Stewartas sąžiningai peržiūrėjo jo progresą ir priėjo tokių pat išvadų kaip ir aš:
This work is woefully inadequate. A bzr tree created on the same day as all three commits to it, two of which are documentation in the wrong format.

The documentation that is there is what I'd expect in the first week of SoC, possibly even within the first couple of days.

I very much doubt this is the result of 20h work, let alone 20h/day for 5 days. For that amount of effort, I'd expect some actual code, possibly even a proof of concept implementation using the execute API.
Nepavyko. Bet nepasiduokime! Atkreipkite dėmesį į paryškintą dalį prieš pabaigą. Aš taip neparašyčiau. Na, aš ir kitais atžvilgiais ribotas esu: tikrai nesugebėčiau dirbti penkias dienas po dvidešimt valandų per parą.
To: Laurynas
Subject: Important!
I am making progress through the project. In the last 5 days I have worked over 100 hours by working 20 hours / day, so that I can bring the project back on track. I have developed a decent understanding of the project and I have prepared a deliverable (A report) which demonstrates my understanding of the underlying code routines. This will be submitted to you by no later than tonight or tomorrow morning first thing. And this is exactly as I promised to achieve by the mid-term.
However, I am even trying for a working prototype for at least the basic functionality, which I didn’t initially promise to submit by the midterm, but I hope to complete that by the end of tomorow but  more time, since although the underlying problem is clear, this is a considerably complex project but it is very much achievable at the same time.
I am wondering, if it will be possible for you /Stewart to consider delaying my mid-term evaluation until Wednesday (18th July). I am very confident that I will be able to submit a working solution for at least partial/basic functionality by then. As I mentioned, all the issues I was having in the past, that were causing communication and progress delays, have now been resolved and I am working like crazy to make up for this.
If not anything else, at least, in the essence and sprits of open source community, my effort can be considered. We are all here to contribute and collaborate with each other. Things don’t always go according to plan and thing were completely not in my control. However, you can still make this work since it’s all down to you. But in all fairness it will not affect my long term goal of completing the project very much within the time. And again, as I said, I will give you results to back myself up.
And also please guide me further with the project,.
I will appreciate your understanding at this point.

Atrašiau, "ne", "nebedirbk po 20 valandų per dieną", "rezultatai nekažką kaip už 100 valandų darbo." Tęsėsi techninis susirašinėjimas.

Tada mid-termas praėjo oficialiai ir studentas gavo oficialų išmetimo iš programos laišką. Iškart po to jis pasigavo mane Google Talk su pokalbiu dėl "kodėl mane failinai", į kurį man nereikėjo veltis. Tuo pat metu jis skundėsi visiems iš eilės Drizzle Summer of Code mentoriams ir programos administratoriui, žodžiu, bet kam, ką tik sugebėjo rasti. Galiausiai jis apeliavo į Google.

Šitoje vietoje atsitiko šis tas netikėto. Stewartas gavo laišką iš nepažįstamo žmogaus, kuriame parašyta "sveiki, esu laisvai samdomas programuotojas. Neseniai čia laimėjau va tokį projektą: elance.com/blablabla. Jis man pasirodė kiek panašus į vieną iš jūsų Summer of Code projektų, ar nėra čia kažkokios problemos?"

Mes atsidarėme tą elance projektą, ir pamatėme savais žodžiais perrašytą, bet akivaizdžiai mūsiškį projektą. Užtat nuo savęs pridėtos norimos kontraktoriaus savybės: "Experience of working on complex projects.", "I need a sharp minded person, really smart who can understand complex functionality fast, and code fast.", "Expert C++ skills (over 10 years experience with C++ and multi-threading)". Projektas fiksuotos kainos, $1500 – palyginkite su studento gaunamais $4500 .

Mes netekę žado visa šitą persiuntėme į Google. Tada, pažiūrėję, kad kontraktas jau sudarytas ir jo apmokėjimas yra escrow (kaip tai lietuviškai vadinasi?), nusprendėme studentui nieko nesakyti, o kontraktoriui atrašyti, kad viskas OK, tegu dirba. Pradėjome planuoti, kaip studentą įdėsime į Drizzle sponsorių puslapį, šalia Google ir Rackspace.

Ėjo laikas. Google ilgokai tvarkėsi su apeliacija, aš ir toliau studentui po truputį padėdavau su techniniais klausimais. Galiausiai vienas iš techninių klausimų išvirto į projekto sėkmės aptarimą:
So, can we say, you would reconsider your decision, if I am able to implement this before in a couple of weeks?
Since I believe it is very much possible to attain this.

Please let me know if there is any good news for me.
Norėtum.
On the SoC side the decision has been made and, sorry, I won't reconsider it.
Norėčiau!
Hi Laurynas,
I am delivering what was expected from me. I am even ahead of my mid-term commitments now. So in a way I managed to do three months of work in just less than three weeks. And that you are now even considering my conclusion acceptable.
I explained there were reasons for lack of progress, but the progress has now come back on track and I am in full grip of the issue.
I am sure your deliverable would be ready before 24th August.

I have suggested a reasonably acceptable solution. Given the complexity of the project, I think it is an achievement to finish it off within the time frame I have actually left until the 24th of August.

The extenuating circumstances are not self-inflicted, they were beyond my control, why is that so hard to believe or why is that you just don't want to consider it.
I am working day night on this. This will be a contribution for open-source community, we are all working here for that.

The decision you previously made was on the basis of progress, now I have the plan and I have done the analysis too. I am just in the implementation phase and I will soon be able to finish this.

I would very much appreciate if you can consider this. I think, we just need to look from the interests of the project here.  I have brought the project back to life, which was initially thought to be over.
Kurį laiką pasvarstęs, ką čia atsakius ("No."), nusprendžiau tiesiog išvis nebevargti.

Dar po savaitės, rugpjūčio viduryje, atėjo Google atsakymas, kad apeliacija nepatenkinta, mid-term failinimas buvo teisingas. Studentas žaibiškai paklausė, vos ne vienodais žodžiais kaip manęs mėnesiu anksčiau, kokie tokio sprendimo motyvai. Google administratorė, be kitų dalykų, paminėjo ir elance projektą.

Nuo to momento iš studento daugiau nebeišgirdom. Po kurio laiko paklausėm kontraktoriaus, ar jis vis dar dirba su savo klientu, atsakė, kad ne. Gaila, mūsų planas papildyti Drizzle sponsorių puslapį neišdegė.