Investing in professional development

There’s some debate still about these 20x developers out there, complete geniuses that gave rise to the “rock-star” moniker that every company seemed to advertise for. I’ve remained a touch skeptical–not that there aren’t amazing software engineers, I know several — but I’m skeptical because we still don’t have a really good, accessible ways to measure human contribution to software. Lines of code, commits and story point velocity are readily available. Regressions, debugging and runtime numbers can be gathered as well, but we know that all this still doesn’t paint the whole picture. Also add in the real-world impact that other factors outside of development have on performance as well: good product management, architecture and QA among them, but also deadlines, poor communication and bad management. With all of these variables, it’s going to be pretty tough to accurate gauge order-of-magnitude differences between programmers in the real world. And frankly, I don’t know that you need to because in your gut you already know.

“The differences arising from individuals in any given study will drown out any differences you might want to attribute to a change in methodology.” — Steve McConnell

Back in 2011 Steve McConnell responded to criticisms of his 10x programmer claim thoughtfully by pointing out what he was seeing in the studies that have already been done, most not even focused on individual contribution. What he found was that “the differences arising from individuals in any given study will drown out any differences you might want to attribute to a change in methodology.” In short, it nearly totally depends on who’s on your team. However, over-emphasis on this leads to ignoring methodology and tooling altogether and focusing instead on individual development and hiring, which would be short-sighted. My point here is that on the balance, the latter should constitute a more significant portion of team building efforts.

The trouble arises when you commoditize development. While there are many software tasks that require no planning or design, there is much more that requires careful thought. As Yevgeniy Brikman said in support of the 10x developer, “It’s not about writing more code; it’s about writing the right code. You become a 10x programmer not by doing an order of magnitude more work, but by making better decisions an order of magnitude more often.”

“It’s not about writing more code; it’s about writing the right code. You become a 10x programmer not by doing an order of magnitude more work, but by making better decisions an order of magnitude more often.” — Yevgeniy Brikman

This is why I prefer the title software engineer. Writing good applications is really about a mind well-suited for building: choices, compromises and the collective wisdom of personal experience and industry best practices. Don’t commoditize development. It’s a highly-talented and highly-compensated profession. It’s not about nuturing a team, it’s about providing the humans working around you with the best possible resources to be successful, innovative and frankly, fun to be around. Yes, tools matter, and methodology matters–they matter a lot and they can have a big impact on the quality and speed of your work, but investing in these while sacrificing investment in the professional development of the individuals on the team… well… that’s as bad as it sounds.

 

Supporting Teaching Principles in K–12

GoReact aids in teaching and learning by facilitating top principles recommended by the Coalition for Psychology in Schools and Education.

The Coalition for Psychology in Schools and Education CPSE, working with the support of the American Psychological Association, identified and validated a set of principles from psychological science as the “most essential for facilitating successful classroom teaching and learning.”

While all of the principles are worthy of review and resonate with great teaching that we practice or have experienced, I wanted to highlight two that jump out as being especially easy when using GoReact to capture performance and provide appropriate feedback. Although these principles were directed at preK-12 specifically, many of our customers have shared their successes implementing these concepts when targeting young adult and adult students both inside and outside of formal education.

Continue reading Supporting Teaching Principles in K–12

Last Night I Missed Broadcast TV

Fresh off the Boat is a new show on ABC. It looked funny so I decided to watch it with my wife. But the Comcast app on my iPhone was having problems streaming the commercials. We watched the first two commercial breaks one and half times each. And for some reason the airplay streaming wasn’t working so I couldn’t watch it on my television. Off to a bad start, but undaunted, I downloaded the ABC app. After spending a minute proving that I had ABC through my Comcast account, the show streamed to my TV just fine. But each commercial break included a promo spot for the very show I was watching. Do they even know what show I’m watching? If they did, shouldn’t they stop advertising the show and just show it to me? When the baby woke up and we had to take a break for minute, we got to watch the commercial break again with another promo, before I could resume.

These apps are very careful to make sure that you see each commercial break at least once. And I wouldn’t mind so much if each commercial break didn’t show the same commercials. The exact same commercials. It’s like the apps are really commercial apps and not show apps. I just want to watch the show. Is there an app for that?

Maybe next week I’ll just watch the show live. Where is my cable box? Wait, isn’t ABC broadcast over the airwaves? In HD? I wonder if it will have better commercials…

Getting to “Know”

We spend too much of our lives in ambiguity. So many outcomes, so many possibilities! Even an enumeration of the combinatorics would be a staggering waste of time and so we consent to let things play out. But we don’t completely let go – of course not! We make decisions in the moment, we strive to utilize consistent tactics, even strategies as well as we can. And when we have successes they are the result of our efforts, and yes, some luck. And when we have failures they are bad luck, and yes, maybe poor planning. We can press forward in uncertainty but Sir Arthur Conan Doyle’s Sherlock tells us, “It is a capital mistake to theorize before one has data. Insensibly one begins to twist facts to suit theories, instead of theories to suit facts.”

Bricks-without-Clay-copy
“Data, data, data! I cannot make bricks without clay.”

Certainly, the exploration of risk is rewarding and I don’t mean to take the fun out of it! But making data-driven decisions removes the worst outcomes. And less negative risk means less unpredictability and this is a good thing for business. It is predictability that allows us to make wise investments, to outmaneuver the competition, and it is the predictable inflow of money that keeps the lights on. This is why getting to “know” is so vital. Reorganize your processes to identify and weed out the worst variables first. Answer every question amounting to “why this won’t work.” You need not wait until all questions have been answered, but there is a critical mass that should be addressed before safely riding the long tail of uncertainty. But knowing where you stand on the most key factors of success puts you on the threshold of good decision making. If you decide to stop, you can do so early and with good reason. If you need to pivot, you have the wisdom of understanding just how it should be done. And if you should indeed continue on, do it with confidence that comes from really knowing where you stand. The earlier you know, the less risk you take on and the less time you spend

The decision to move forward in light of the data is much more sound than the decision to move forward despite the risks. Get to “know” then make the call.

Rapid Design Prototyping

I’ve enjoyed listening to the Startup Podcast over the past couple of weeks. It’s encouraging to listen in on seemingly normal guys as they put together a brand new company. In episode #13 they talk about rapid design prototyping with Google Venture’s design team. The team walks them through a design sprint to discover what their mobile app should be.

Fake it ’till you make it… or don’t.

In Gimlet’s case they should not build a mobile app, and I can’t tell you how many months of development time I’ve saved by NOT BUILDING an idea that we’ve had. In a relatively short amount of time you can design out a website or app and see if it’s going to really meet your needs or if it’s just a cute idea. The world is full of cute ideas – I don’t want those. I want a great idea that can work.

Save yourself some time, developer. Don’t build it until you’ve seen it.

 

Schmuhl Potato Salad

This recipe has been passed from my Oma to my father to me and is a family favorite that will always remind me of July barbecues and Schmuhl family parties and funerals. It’s not a traditional German potato salad, but where it lacks in pedigree it makes up in flavor and texture. Serves about 15.  Enjoy!

Ingredients

  • ~3/4 jar of mayonnaise
  • 1 medium onion
  • 5lbs potatoes
  • 10 boiled eggs
  • Squirt of mustard
  • Salt and pepper to taste
  • Onion powder
  • Garlic powder
  • Minced garlic

 

Directions

  1. Boil small pieces of peeled potatoes until soft (smaller and longer means creamier)
  2. Drain the potatoes and dump them in a large bowl
  3. Dice the onion and add to the potatoes
  4. Stir in about 1/2 of the jar of mayonnaise
  5. Mix in the seasonings to taste
  6. Peel and dice 7 of the eggs and softly stir them in
  7. Let sit overnight.
  8. Add the rest of the mayo and season again to taste
  9. Slice the remaining 3 eggs and lay them out across the top of the bowl
  10. Sprinkle the top with paprika for color

The key to this dish is that that it always tastes better the next day.  Prepare it at least a day before so that you can add more mayo and seasonings as the potatoes suck in that flavor over time.  The texture and creaminess is determined both by how long you cook the potatoes and how much mayonnaise you end up adding.  I generally push it close to the boundary of mashed potatoes with good results.

Ownership

Screen Shot 2013-12-23 at 10.32.56 AM

I’m learning Python and needed a decent IDE to get my work done – I’m so spoiled! I installed PyCharm and have found it sufficient. Today, after several days of using it, I finally noticed that the tip of the day is blank! This is fine, I unchecked the box, but what I wanted to point out was the missed opportunity: the tip of the day is your chance to educate the user on helpful functionality, to increase product retention through brand loyalty. And what is done with this opportunity?

Tips not found. Make sure you installed PyCharm Community Edition correctly.

Nope I won’t. If you can’t take ownership of this problem (first take: don’t show the tip by default if it isn’t working) at least in the tone of the presentation, then I know enough able you to move forward.  Disable the feature and wait for the functionality to be proven in the future.  This is a very matter-of-fact approach that could be softened by different messaging:

Woah.  I can’t find any tips!  Click _here_ if you have some time to help diagnose what happened with your install.  In the meantime we’ve disabled this feature, you can get to it again from the Help menu.

See, I already want to buy whatever software would give me this kind of lip service!

Four Not-So-Secret Ingredients of Moab

Today I was reviewing the Moab documentation for an upcoming training and I ran across several feature gems that I thought were worth calling out. I’ll call them some of the “not-so-secret ingredients” that makes Moab great.

Scheduling with Partitions
Moab uses partitions to logical divide available resources in your environment. This allows you to separate geographically or by hardware configuration. For example, because a given job can only use resources within a single partition, you may want to create a partition to group nodes on the same local switch so that you can guarantee the fastest interprocess communication speed. Another cool benefit of partitions is the ability to set partition-specific policies, limits, priorities and scheduling algorithms, though this is rarely necessary.

Green Computing
In an effort to conserve power, Moab can automatically turn off idle nodes until they are needed again. This can be a significant savings if you’re not maxing your capacity all the time. To save on time, Moab can keep a pool of nodes on standby so that there is no delay when additional resources are needed. Moab comes with reference scripts for IPMI, but can be configured to work with iLO, DRAC and xCAT as well.

Fairshare
Using configured targets, you can use historical resource utilization as a factor for job priority. In essence, this would prevent a user with relatively infrequent workload to get buried in the backlog of jobs from much busier users. This kind of thinking extends to groups, accounts and other groupings as well. There are a number of configuration settings for fairshare that allow you to tweak performance to your needs, such as caps, evaluation timeframe, and consumption metrics.

Reservation Groups
You can associate multiple reservations through reservation groups. This allows each reservation to share the same variables. These variables can then be used in job triggers to automate tasks like email notification, script execution and internal Moab actions, such as creating another reservation. Of course, you can always override the inheritance by setting a variable locally on an individual reservation in the group.

Of Watts and Volume

There is an equation for watts to decibels, given a sensitivity of x decibels, (1w/1m)!  Wattage must double for each increase of 3db.  See here and here for more info.  So that sensitivity (SPL) score is a pretty crucial starting point for a speaker.  Not that adding more amplifier watts is not impossible, just moderately costly.  But then again, in the case of an amplified PA speaker with 700 watts peak (and 350 RMS) then you’ve a lot of power.  By my calculations, taking a 98db SPL woofer up north of 122db, and a 110db SPL tweeter up past 134db – past the threshold of pain!  Also, I’ve read that perceptively, humans believe +10db makes one sound twice as loud as another.

BUT distance from the speaker matters!  On a ratio of 1/d^2, the sound gets softer the further away you are!  If pumping 350 watts through that woofer gets us 122db, standing 52 feet away from it, it will sound just like it we only pumped in 1 watt at 1 meter = 98db.  That’s still plenty loud.

It makes sense to me now why stage monitors are always like 100-150 watts.  Even with all the noise on stage, you’re pretty close which means they’re pretty loud.

Here’s what that speaker system sounds like as the watts are increased:

Watts Woofer Tweeter
1 98 110
2 101 113
4 104 116
8 107 119
16 110 122
32 113 125
64 116 128
128 119 131
256 122 134
512 125 137
1024 128 140
2048 131 143

 

Contrast that with another system with a higher SPL:

Meters Woofer Tweeter
1 122 134
2 116 128
4 110 122
8 104 116
16 98 110
32 92 104

 

For reference, here is a reference table for decibels:

Source Intensity Level (db)
Threshold of Hearing (TOH) 0
Rustling Leaves 10
Whisper 20
 Quiet bedroom at night 30
 Quiet library 40
 Average home 50
Normal Conversation 60
Busy Street Traffic 70
Vacuum Cleaner 70
Busy road 80
 Diesel truck, 10 m away 90
Large Orchestra 98
Walkman at Maximum Level 100
Front Rows of Rock Concert 110
 Chainsaw, 1 m distance 110
 Threshold of discomfort 120
 Threshold of pain 130
Jet aircraft, 50 m away 140
Instant Perforation of Eardrum 160