Thursday, March 21, 2019

Performance evaluation

Success of complex projects depends more on effective teams than rockstar programmers. Therefore, performance evaluation should focus more on the team than the individual. An individual's ability to make his teammates better is the highest achievement, his individual contribution is less important. If he does not fit into the team, he should leave. This implies that team members of similar rank should have similar pay. Pay and raise criteria should be made public. This results in less gossip.

Tuesday, March 05, 2019

Teaching English and mathematics to a six year old

My six year old son has learnt reading and writing which opened up a lot of opportunities. While thinking about how I could be more useful to him, I decided to try Duolingo for English teaching and Khan Academy for mathematics. Everyday at 18:30, I sit down with him and he first does Duolingo for 15 minutes, and then Khan Academy for another 15 minutes, for a total of half an hour a day. My role is to make sure that he really does the exercises and not play games or watch YouTube. I only help him when he gets stuck and requests my assistance.

Since both Duolingo and Khan Academy have curriculums that progress according to his level, I don't have to think about what to teach when. Khan Academy videos show me how to explain mathematical concepts to a child. Duolingo, besides training his English, also improves his reading and comprehension skills. Using the English version of Khan Academy also supports the language effort (of course, I have to translate math questions that have too many words in them to Turkish). The exercises show him the importance of paying attention to detail before jumping to conclusions, i.e. conscientiousness. Doing something every day is helpful in forming the most useful habit in life: persistence. And finally, he got rid of fearing failure and started to treat failure as a learning opportunity.

Friday, March 01, 2019

Scrum sprints

I propose the following sprints for software development:.
  1. Implementation sprint (4 weeks): Bugs are fixed, features are implemented. Output is software ready for informal testing, i.e. it can at least be built on the test computer and does not crash immediately when run.
  2. Design review & cleanup sprint (1 week): Review the highest priority and most problematic sections of software. Code is refactored according to design review results and clean code principles. Output is documentation of reviewed sections and cleaner code.
  3. Test sprint (1 week): Team decides on test scope, i.e. definition of "Done". As a minimum software should be built successfully on a clean hardware. Whole team tests the software. These tests are informal and limited to the Done definition. Tests should demonstrate that software is capable of passing the most important/frequent use cases, i.e. software is still in a useable state. Developers only fix bugs during this sprint, no design update is allowed. Output is a tag/snapshot. When you have automated tests with good coverage, you might not need a manual test sprint, because your software will be automatically tested at least once a day.
After these sprints, do a post mortem (1 day) to assess the efficiency of design, implementation and test sprints. Repeat this process until software is at a user acceptable quality level.