*(2008)*
Continuation of [[Joel on Software]]
# 1. My First BillG Review
> [!quote] The *Fuck Count*
> In my BillG review meeting, the whole reporting hierarchy was there, ... , and a person who came along from my team whose whole job during the meeting was to keep an accurate count of how many times Bill said the F word. The lower the f*** count, the better.
>
> ---
>
> He was flipping through the spec! \[Calm down, what are you a little girl?\]
> ...and THERE WERE NOTES IN ALL THE MARGINS. ON EVERY PAGE OF THE SPEC. HE HAD READ THE WHOLE GOD- DAMNED THING AND WRITTEN NOTES IN THE MARGINS.
> He Read The Whole Thing! \[OMG SQUEEE!\]
>
> ---
>
> “Four,” announced the f*** counter, and everyone said, “Wow, that’s the lowest I can remember. Bill is getting mellow in his old age.” He was, you know, 36.
# 3. A Field Guide to Developers
## Private Offices
This idea did not take off. Everyone hates [[Open Office]]s.
- Cannot afford private offices both financially and planning-wise (open offices are more elastic with capacity planning)
- During COVID, everyone had their private offices, but that didn't drastically improve productivity / happiness
- People want collaboration, belonging ... which is hard to get by in private offices.
- Nowadays developers are engaged in so many meetings / interviews. Offices (open or private) tend to not matter.
Reference to *Peopleware*. Another 2000s management book. This is the book that pushed for the idea of the *Flow Time*.
**Cultural References**
* Praising gears - reference to the Aeron chair. Not sure whether this is utilitarian or virtue signaling.
* 21" is considered a "large" screen (I had double 19" monitor when I was a student, now thinking about it).
## Social Hierarchy of the Programmers
> [!quote] **How are programmers treated inside the organization?**
>
> Are they hotshots or typists? Is company management made up of engineers or former programmers? When developers go to a conference, do they fly first class? (I don't care if that seems like a waste of money. Stars go first class. Get used to it.) When they fly in for an interview, does a limo pick them up at the airport, or are they expected to find their own way to the office? All else being equal, developers are going to prefer an organization that treats them like stars.
now this is the interesting part; developers (as a class) was still fighting tooth and nail for more position in the corporate social hierarchy.
> [!quote]
> Basically, if you're going to hire smart people, you're going to have to let them apply their skills to their work.
autonomy is important, but developers (or "smart people") are not free from any balance of power.
## No Politics / Meritocracy
> [!quote] **No Politics**
>
> Programmers have very well-honed senses of justice. Code either works, or it doesn't.
> ...
> strict [[Meritocracy]] where you can win any debate simply by being _right_.
This one is very idealistic and it goes against the modern [[Titles and Staff Engineer]] ideology of balancing between different teams, orgs, and requirements.
> [!quote]
>
> Nothing is more infuriating than when a developer is told to use a certain programming language, not the best one for the task at hand, because the boss likes it.
It's pretty funny when the choice of [[Programming Languages]] is the **ultimate form of self-expression**. PG talked about this too (In praise of Lisp, In praise of web development before JS). However, the choice of programming language is so fundamental to the long-term success of a software organization that it's not an easy choice to be given out to individuals. Also, the mainstream programming languages have matured significantly. Finally, if you don't want to code in Java, you wouldn't even apply to a place that is coding in Java.
> [!quote] **What am I working on?**
>
> To some extent, one of the best ways you can attract developers is to let them work on something interesting.
>
> Finally, many developers are going to look at the social values of the company they're working for. ==Jobs at social networking companies and blog companies help bring people together and don't really pollute==, it seems, so they're popular
On Mission-drivenness. "Social networks don't really pollute". Ah, this has aged well (This aligns with [[Techno Utopia]] also)
> **Let the top recruits pick their own project**
Talks about FB bootcamp-ish thing that happened in Oracle.
> **Use cool new technologies unnecessarily**
>
> programmers are very distinct third-class citizens, while the testosterone-crazed apes who actually sell and trade financial instruments are corporate royalty, with $30,000,000 bonuses and all the cheeseburgers they can eat (often delivered by a programmer who happened to be nearby).
> ...
> Now, I'm not telling you not to use the best tool for the job, and I'm not telling you to rewrite in the hot _language-du-jour_ every two years, but if you can find ways for developers to get experience with newer languages, frameworks, and technologies, they'll be happier.
## Mission-drivenness
> **Can I identify with the company?**
More on mission-drivenness. Talking about 37signals. Ironic how this company imploded with culture problems. But the company was built with strong, opinionated, directed culture from the first place.
> But 37signals is still new at this identity management campaign thing. They don't hold a _candle_ to Apple Computer, which, with a single Superbowl ad in 1984, managed to cement their position _to this day_ as the countercultural force of freedom against dictatorship, of liberty against oppression, of colors against black and white, of pretty women in bright red shorts against brainwashed men in suits.
> **One thing that programmers don't care about**
> They don't care about money, actually, unless you're screwing up on the other things. If you start to hear complaints about salaries where you never heard them before, that's usually a sign that people aren't really loving their job.
lol. In the era of [[levels.fyi]] and people signing their blind post with "TC 400k"... how idealistic.
and now programmers get paid *way more* than similar job functions that are fresh out of college (and beyond).
# 33. Making Wrong Code Look
The Baking analogy to Code Style.
> [!quote]
> The first time I walked into the bakery I couldn’t believe what a mess it was. The sides of the ovens were yellowing, machines were rusting, there was grease everywhere.
> “Is it always this messy?” I asked.
> “What? What are you talking about?” the manager said. “We just finished cleaning. This is the cleanest it’s been in weeks.”
> Oh boy.
>
> It took me a couple of months of cleaning the bakery every morning before I realized what they meant. In the bakery, clean meant no dough on the machines. Clean meant no fermenting dough in the trash. Clean meant no dough on the floors.
>
> Clean did not mean the paint on the ovens was nice and white. Painting the ovens was something you did every decade, not every day. Clean did not mean no grease. In fact, there were a lot of machines that needed to be greased or oiled regularly, and a thin layer of clean oil was usually a sign of a machine that had just been cleaned.
>
> The whole concept of clean in the bakery was something you had to learn. To an outsider, it was impossible to walk in and judge whether the place was clean or not. An outsider would never think of looking at the inside surfaces of the dough rounder (a machine that rolls square blocks of dough into balls) to see if they had been scraped clean. An outsider would obsess over the fact that the old oven had discolored panels, because those panels were huge. But a baker couldn’t care less whether the paint on the outside of their oven was starting to turn a little yellow. The bread still tasted just as good.
However, I believe that this analogy is a good one against many things, but more on [[Technical Debt]]. I still like this example; that "superficial" dirtiness and real cleanliness may be different.
Joel's example of solving XSS via coding convention (Hungarian notation for safe and unsafe string) is weird. Nowadays, this is done via types - unsafe and safe strings are explicitly typed, and unsafe string are automatically converted to typed strings (Example: Django's treatment of safe and unsafe string in templates).
[App Hungarian vs System Hungarian](https://en.wikipedia.org/wiki/Hungarian_notation). Joel goes through the history, on how App Hungarian (original variant of the Hungarian notation where the name encodes the *kind* of data) got superseded by the *System Hungarian* (which duplicated the type information into the variable names). System Hungarian was replicated everywhere and became extremely unpopular as it simply duplicated information.
Finally, Joel makes an argument against exceptions in C++. This is a reasonable argument (especially in C++; [Scott Meyers](https://en.wikipedia.org/wiki/Scott_Meyers) have discussed this extensively). However, I find some of the arguments weak. Namely, they are "effectively GOTO". It's unfortunate that Dijkstra's [[Dijkstra#GO TO Considered Harmful]] has been translated to the "GOTO BAD" cargo cult. GO TO Considered Harmful is about promoting [[Structured Programming]]. Additional control flow structures (and many of them allows for powerful control flow modifications) are not categorically harmful.
# 34. Camels and Rubber Duckies
An introduction to software pricing.
* Maximize Profit (not revenue or units sold)
* Market segmentation, *capture the customer surplus*. Many examples of these.
* Backlashes against the market segmentation.
* Big Corporations may be more skilled at buying (and negotiating down) than you at selling (and negotiating up).
* The demand curve may not even slope downward due to price signaling.
* "The more you learn about pricing, the less you seem to know."
> 1. **Free**. Open source, etc. Not relevant to the current discussion. Nothing to see here. Move along.
> 2. **Cheap**. $10–$1,000, sold to a very large number of people at a low price without a sales force. Most shrink-wrapped consumer and small business software falls into this category.
> 3. **Dear**. $75,000–$1,000,000, sold to a handful of rich big companies using a team of slick salespeople that do six months of intense PowerPoint just to get one goddamn sale. The Oracle model.
>
> Notice the gap? There's no software priced between $1,000 and $75,000. I'll tell you why. The minute you charge more than $1,000, you need to get _serious_ corporate signoffs. You need a line item in their budget. You need purchasing managers and CEO approval and competitive bids and paperwork.
This is the famous ==don't price your software between 1k and 10k==. This still resonates true.