Skip to content

Instantly share code, notes, and snippets.

View sizovs's full-sized avatar
🌴
Mentoring software developers @ principal.dev

Eduards Sizovs sizovs

🌴
Mentoring software developers @ principal.dev
View GitHub Profile
@sizovs
sizovs / JBrains.md
Last active June 6, 2023 14:48
JBrains.md

A talk on Dec 7th

The Economics of Software Design or The Well-Balanced Programmer

I want to have one of these talks again because our new (online) audience is not familiar with them, and both talks are among the most highly rated at DevTernity. So the question is, which talk makes you feel more enthusiastic?

A workshop on Dec 8th

Evolutionary Design: Beyond the Basics

Here are a few ideas from my side:

  1. Revisted talk "X More Ineffective Coding Habits of Many Programmers". In one of your interviews, you mentioned that you do a lot of code reviews. I'm sure you've noticed recurring code smells. I am also sure our audience is not immune from them. If you could compile a list of "the worst habits" and provide solutions, the attendees would be happy.

  2. You pay a lot of attention to words and language. I've watched all your talks, and whenever you show the code, it "speaks for itself," and has a high signal-vs-noise ratio. A talk that shows developers how to write code that speaks human/domain language and gives a good reason for doing so can make developers rethink how they see and write code.

Ideas/suggestions are welcome.

I see that the conversation has taken an emotional direction, so I'll try to get it back on track, hoping that logic and love will win:
1️⃣ The original statement of the author is: "Software development isn't like building a house. The effort, uncertainty, and risks are the main particles of it!"
2️⃣ My response: "Contrasting software development vs. construction to emphasize the extreme difference in the effort, uncertainty, and risk is a delusion. It's plain wrong."
@sizovs
sizovs / velocity.md
Last active August 24, 2022 09:11
velocity.md

❌ Velocity is not a sum of individual work hours multiplied by work days:

3x full-time engineers = 240 hours of work (40h x 3ppl x 2-week sprint).

Because Velocity must account for for meetings, interruptions, onboarding, rework, waiting, handoffs, uncertainty, productivity fluctuations, pair programming, it's impossible to calculate it in advance by just counting heads.

✅ Velocity is determined empirically, by running a number of sprints, and then seeing how much the team can actually accomplish. Comfortably, without cutting corners, on Wednesday or Thursday. Not on Friday 6pm.

💥 Velocity determined by counting individual hours is a recipe for disaster. Empiritally determined team's velocity will always be less than total work hours. And because velocity is less than sum of individual work hours, that leads to conflict, pressure, and micro-management.

@sizovs
sizovs / Principal.md
Created January 22, 2022 07:27
Principal TrueLayer Jan 20-21

Good morning, team!

Below I'll share some "the missing parts".

  • The idea of "Behind every request, there is an unsatisfied need" comes from the Nonviolent Communication book by Marshall Rosenberg. It's the best communication book ever written and it has helped me understand people better, and build the family I always dreamed of.
  • Other 5 forces of influence are:
@sizovs
sizovs / Solutions.java
Last active December 5, 2024 16:49
Solutions.java
// 1. Fix bad naming.
class ShoppingCart {
UUID id();
boolean isEligibleForFreeShipping();
remove(OrderItem item);
add(OrderItem item);
Collection<OrderItem> items();
}
@sizovs
sizovs / Playtec Nov 11.md
Last active November 12, 2021 18:43
Playtech Nov 11-12 2021
// 1. refactor the code so it's at the same level of abstraction (SLAP).
int from = 8000;
int to = 9000;
int availablePort = IntStream
.rangeClosed(from, to)
map(Port::new)
.filter(Port::isAvailable)
.findFirst();
class Port {
@sizovs
sizovs / Playtech.java
Last active May 28, 2021 07:39
Playtech May
// 1. refactor the code so it's at the same level of abstraction (SLAP).
int from = 8000;
int to = 9000;
IntStream
.rangeClosed(from, to)
.mapToObj(Port::new)
.filter(throwingPredicate(Port::isFree)) // sneakily throws the original exception (faux-pas)
.filter(wrap().predicate(Port::isFree)) // wraps unchecked exception (noexceptions)
.findFirst();