Hard Work and the Golden Hours

by Damon Payne 19. April 2013 20:00

I’ve been reading Alex St. John’s blog for a while, and it’s just amazing. His stories of ancient Microsoft history, his tracing popular video game features to fundamental human behavior shaped by evolution, his insistence on the importance of hard work and commentary American Privilege. A couple of his articles lately, though, have kicked me right in the throat. If you have any entrepreneurial aspirations, I highly recommend:

Educated Idiots

Café Easy

I might also throw in this less recent one from Hanselman:

I’m a Phony. Are you?

Over Sharing Inbound

I sometimes feel like these articles were written directly to me, probably because I’ve internalized a lot of guilt. Guilt about not taking action on my ideas. After all, since software is eating the world it doesn’t seemed too far fetched that every competent software developer is sitting on a gold mine. The only thing between me and amazing success is the will to make it so. Yet, I have no idea what I did with my 20s (professionally) and despite often thinking about and working on business ideas, I’m still a wantrepreneur in my late 30s. The Saint’s comments on work-life balance are what really got to me. My week night schedule might be something like:

•    Get up at a questionably late hour, go to my good-paying job.
•    Come home, make an unnecessarily elaborate dinner.
•    Hang out with kids, clean up, etc.
•    Hang out with wife
•    Devote a few pre-bedtime brain cycles to open source projects, blogging, continuous learning, and modeling stuff for one of my business ideas.

Unsurprisingly, I can think of no successful business owners who share my story. Have you ever read an interview with a truly successful individual that sounded anything like “Yeah, we worked 10 hours a week or so on this, no big deal, until it was done and we hit it big.”


I’m doing better than I ever have before in my life, yet it’s still not enough. One of the reasons why I haven’t been participating in community as much is because I’ve been writing huge amounts of code. It’s not enough, it’s not getting done fast enough for my taste. There needs to be more hard work. Some people may find themselves in an existential dilemma trying to figure out what to cut out so there’s time for more productive work. In my case, this has been an evil exercise. I shouldn’t spend less time with my kids! Surely not less time with my wife! I need my sleep and exercise. I need my movies and video games to decompress from the “hard work” and “stress” of my day job. Yet I shed a tear when I think about how much time I played Diablo 3 last year. (Not really, but I should be ashamed!).


This is where The Saint’s words hit home. If you’re content with the overall trajectory of your life and career, there would be nothing wrong with seeking balance between work/sleep/games/movies/wife&children/hobbies.  If you’re not, though, you need to think really hard about how much down time and “balance” you actually need. If you’ve always wanted to be a blogger with a million followers or a successful Micro ISV writing phone apps, or to become an independent consultant,  what value will you place on ‘balance” when you look back and realize you are no closer to those goals than you were years ago?

Golden Hours

The real problem in insisting that a few days of productivity entitles one to some marathon gaming sessions or re-watching all of Battle Star Galactica is the value of the particular hours when most of us are doing our side work or learning projects. I call these the Golden Hours.


Many of us, in our day jobs, are not afforded much focus. We may be committing code on multiple projects, reviewing our peer’s code, and generally participating in various unfortunate unproductive activities. No so during the Golden Hours.


My home workstation setupis slightly better than what my employer gives me. There’s a door I can close and I can play music through my excellent Klipsch PC speakers. The house is quiet, my family is asleep, there’s some red wine on my desk, and the time of night where my mind is most awake and focus approaches. What to do with this time?


If you have the numbers available, take a look at your favorite PC games (or Xbox or PS3) and see how many hours you spent playing your favorite games. Suppose that number was 400 hours last year. (oh, if only it were a mere 400 hours last year) At your day job that 400 hours may represent a fiscal quarter worth of office hours and you may have built a major module or accomplished a similar cog-in-the-machine type of contribution. But now, you’re at home. You’re using only the tools you love, only the libraries and frameworks you love. No architect has told you what you can’t do and how you can’t do it, no scrum master has told you Boring Crud Screen must take priority over Interesting Problem from a later sprint. The Golden Hours where you are awake and in your most productive environment approach. Now what could you do in 400 hours?


This, for me, is the true tragedy of seeking balance with hobbies, entrepreneurial dreams, and the stuff that actually must get done. Many of us have ambitions and skills, but proceed to spend the most productive time we have available surfing hacker news, watching zombie movies, online gaming, engaging in meaningless debates on twitter, or re-connecting with people we hated in high school on Facebook.


You may in fact reach a point where your brain is Jell-O and you truly need some downtime in order to return to productivity. Most of us probably indulge ourselves way, way too early though. I suspect that, like training your body with a “couch to 5k” program, you can train your mind to expect a life of more and more productive work and less and less Archer or Game of Thrones.


It’s easy for a programmer to do incredibly well in America today. If you want more, though, If you want to be really disgustingly successful, you must evaluate every activity through a simple heuristic: is this simply indulging my entitlement to wealth and leisure, or is this moving a possible revenue stream forward?

Tags:

Personal | Business | Technical Community

Entities Live in Repositories

by Damon Payne 6. March 2013 20:21

Related Articles:
A Different Kind of Entity Framework
Entities Live in Repositories (this article)


Regardless of where your data comes from, or winds up, it's good to have an abstraction around that storage mechanism. While it's unlikely your business is going to throw away it's investment in <<Big Enterprise DB>> any time soon, it's certainly a boon to testability. Much the of the modern development community has decided that the appropriate abstraction is the Repository.
An Entity that can be saved & retrieved by itself (without being part of some bigger object graph) should be fetched & stored using a repository.


For learned DDD people, we will revisit the concept of Aggregate Root another time.


I've seen a lot of simple repository definitions over time, and mine is particularly .NET and LINQ friendly. The only thing you may question is the separation of the Read and Write methods into different interfaces.  While I'm not necessarily dreaming of CQRS, it's wise to separate the read and write channels to avoid Liskov Substitution errors: many entities may not support write operations because they are read-only in your application. You could make the same arguments for Create and Delete, but I find read vs. write is a good place to start.

The Repository:

    /// <summary>
    /// A read-only store for retrieving IEntities
    /// </summary>
    public interface IRepository
    {
        /// <summary>
        /// Current work context
        /// </summary>
        IUnitOfWork UnitOfWork { get; set; }
    }

Repository of T

    /// <summary>
    /// Typed read-only operations for retrieving IEntities with a known Id type
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    /// <typeparam name="TId"></typeparam>
    public interface IRepository<TEntity, TId> : IRepository where TEntity : IEntity<TId>
    {
        /// <summary>
        /// Load & return all
        /// </summary>
        /// <returns></returns>
        IEnumerable<TEntity> Get();

        /// <summary>
        /// Load 1 by Id, or default(TEntity) if none found
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        TEntity Get(TId id);

        /// <summary>
        /// Return all TEntity matching the predicate May require an aggressive load.
        /// </summary>
        /// <param name="predicate"></param>
        /// <returns></returns>
        IEnumerable<TEntity> Get(Func<TEntity, bool> predicate);
    }

Write repository of T

    /// <summary>
    /// Mutate operations for IEntity&lt;TId&gt;
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    /// <typeparam name="TId"></typeparam>
    public interface IWriteRepository<TEntity, TId> : IRepository where TEntity : IEntity<TId>
    {
        /// <summary>
        /// Create a new TEntity with an auto assigned id, or default(TId)
        /// </summary>
        /// <returns></returns>
        TEntity Create();

        /// <summary>
        /// Create a new TEntity with a given Id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        TEntity Create(TId id);

        /// <summary>
        /// Persist these targets
        /// </summary>
        /// <param name="targets"></param>
        void Save(IEnumerable<TEntity> targets);

        /// <summary>
        /// Persist this target
        /// </summary>
        /// <param name="target"></param>
        void Save(TEntity target);

        /// <summary>
        /// Remove these targets from persisted store
        /// </summary>
        /// <param name="targets"></param>
        void Delete(IEnumerable<TEntity> targets);

        /// <summary>
        /// Remove a single target from persisted store
        /// </summary>
        /// <param name="targets"></param>
        void Delete(TEntity targets);
    }

Wait, what's that IUnitOfWork in there? We'll have to save that for another day. This article, like the Entities article, was fairly short and
just establishes a simple baseline. In the next article we'll start to tackle the real substance of what this Shinto stuff is about. You can review these interfaces at https://github.com/damonrpayne/Shinto/tree/master/HandWaver.Shinto/Shinto.RepositoryModel

Tags:

On Stock Options

by Damon Payne 13. February 2013 13:26

I have always considered stock options to be Monopoly Money. I came of age in the 80s and 90s and grew up watching the creation of Microsoft Millionairs and .Com millionairs but I never put much stock (pardon the pun) in this as a source of wealth. It's easy to look at successful companies like Microsoft whose stock split so many times and think of stock options as a path to wealth for the average worker bee.

I've spent my career up to this point in the midwest, and I saw some of my friends working heroic hours to make something happen for their company. Their motivation was going public and (at least) paying off their homes with stock sale proceeds. For a long time part of my fear of stock options was due to a bit of small-minded thinking: I couldn't envision any of these small Wisconsin companies making it big, and therefore viewed these stock options as essentially motivating a lot of free effort for the company by promising the moon to employees eager to cash out on a big deal.

My main issue, though, is that I find employees are generally woefully under-educated about exactly what kind of stock they are given and what they can do with their stock options. This Ars Technica article is just the latest in a long stream of examples. Stock Options, and Common Stock in general, often exist at the pleasure of the company. This is not to say that in-writing agreements are discarded at will when it's convienient, but rather that employees are not usually presented with the whole picture. You will happily sign something saying "We are granting you XXXX shares of Common Stock" without knowing there may be so much preferred stock that the likelihood of you getting any money out of a company sale is incredibly small. As Dell employees are now finding out, the bylaws of any company may also allow so many restrictions to be placed on stock options that only the narrowest sequences of events could even lead to an employee exercising & selling in a moderately profitable fashion.

As an aside: this also brings to light one of my personal biases. I'm extremely old-fashioned in that I greatly prefer stocks that regularly pay dividends out of profit. I find this a much more sound concept than the current practice of what essentially amounts to speculation on stock price. So many non-market forces (rumors, etc) can affect the market valuation of publicly-traded companies.

As the article about Dell points out, the higher you are on the food chain the more likely you are to do well with company stock. Call me cynical, but it's hard to look at this situation and call it anything but the top-decision makers fixing the game in their favor. Enron-style practices that allow executives to sell stock while employees are in a blackout period are common. Preferred stock agreements that gaurantee minimum share prices for executives even to the point of employees earning nothing from a sale are common.  The rules are complex and often hidden in secret company charters or in SEC filings that only employees with extremely deep financial knowledge can decipher. While the premise of encouraging the best employee actions by giving them a piece of the pie is a sound one, it's sometimes hard to look at these stories as anything but a case of fraud.

 

Tags:

Business | Personal | Technical Community

A Different Kind of Entity Framework

by Damon Payne 7. February 2013 11:35

Related Articles:

A Different Kind of Entity Framework (this article)

Entities Live in Repositories

 

Before I can get into some of the Machine Learning and Event Sourcing topics I want to discuss I need to establish an Entity Model.

This is not an ORM. While those certainly have their place, and features like code-first in modern frameworks are expanding the number of places where they are appropriate, there are still many places I prefer to use something a little more rustic: hand-coded SQL for example.

If you haven’t read it already, I highly recommend the DDD bible:

There are a lot of reasons why you might choose to use or not use an ORM, for me performance is often a huge concern. You may simply need features not offered my your ORM of choice: specific kinds of change tracking, serialization, UI bindability, inability to use the base classes required by an ORM, specific cache strategy needs, or for other reasons.

Starting with Simple Entities

We’ll start by defining a simple interface and implementation of an Entity. An Entity is an object (representing data) whose lifetime is defined by some kind of Key or Id. Keys will often be a primitive or struct.

    /// <summary>
    /// An Entity has a key(Id) representing its identity. Implementors should consider overriding Equals and GetHashCode
    /// in terms of this key
    /// </summary>
    public interface IEntity
    {
        /// <summary>
        /// Return the Id
        /// </summary>
        /// <returns></returns>
        object GetId();

        /// <summary>
        /// Set the id
        /// </summary>
        /// <param name="value">New Id value</param>
        void SetId(object value);
    }

Since we’re programming in C#, it would be a crime not to provide a generic version:

    /// <summary>
    /// An Entity with a typed key
    /// </summary>
    /// <typeparam name="TId">The id type, often a value type</typeparam>
    public interface IEntity<TId> : IEntity
    {
        /// <summary>
        /// The Entity Id of the given instance. Should be implemented in terms of Get/SetKey()
        /// </summary>
        TId Id { get; set; }
    }

Next Steps

You would be forgiven for thinking this article was not very inspiring. If you’d like the current code, such as it is, check it out on GitHub:

https://github.com/damonrpayne/Shinto/tree/master/HandWaver.Shinto

Over the course of the following articles, I will lay out useful features that resurrect some of my more popular Silverlight articles.

Tags:

How Badly Do You Really Need Talented Developers ?

by Damon Payne 22. January 2013 15:34

Software developers, more specifically talented software develoeprs, are unicorns according to a recent venture beat article. (0)

 I am fond of quoting the "Software is eating the world" article. Salaries, benefits, environments, and creative signing bonuses are constantly in flux as the startup communities of Boston, New York, Silicon Valley, and Seattle compete with each other and with more established companies for software development talent. Scopely went so far as to offer $11,000 wrapped in bacon as part of an over the top signing bonus/publicity stunt as they sought out the Most Interesting Engineers in the World.

I think, indeed, it would be hard to overstate the need for skilled software engineers these days. Given this urgent need it's surprising that a huge, energetic, hard-working and incredibly skilled pool of software developers is being ignored by these talent-hungry organizations. I am speaking of course about all the software developers who do not live in one of these recognized technology meccas. To be sure, startups along with established technology giants like Amazon or Microsoft are always willing to interview qualified developers from a flyover state. It is nearly always a requirement, however, that one relocate to one of the coasts. No matter what developers, housing, or Bacon costs in Seattle, you can not work remote.

It's the Collaboration, Silly!

The inability to work remotely for the most talent-starved companies has long perplexed me. I asked a friend who works at a very successful Silicon Valley startup if she could provide more perspective on this topic. She look at me, and, apparently unaware she was stating something so obvious it bordered on cosmic absurdity, she stated "Well, it's just so much easier to work together when people are co-located."

Of course it's easier. The Currents of Information that flow around the office, the impromptu water cooler conversations that lead to a breakthrough, the ability to pull the right few people into a room to whiteboard a difficult problem: these can all be marvels of productivity and problem solving. Not only is this an obvious boon to driving business value, but software developers like it! Gone are the days of the software geek in a dark room littered with pizza boxes and empty cases of Mountain Dew, we like interaction with other skilled developers and (gasp!) business stakeholders too. Yes, it's clearly better to be under the same roof, but we're talking about escalating salaries(1), offices that look like entertainment complexes, and bacon-wrapped cash.

How many trips from Kasas City to Seattle could $11,000 plus the cost of bacon(2) finance for a talented software developer? What is the conversion ratio between attractive relocation packages versus plane tickets, hotels, and food? Given ever improving technology and bandwidth, can US companies figure out how to collaborate across the country? The world? There are certainly precedents. Skype, for example, allows its engineers to live whereever they want and often features customer success stories on its blog. Vertigo has remote people in several states. My friend Steven Murawski lives in Wisconsin and just started work for Stack Exchange. These high profile companies are the exception that makes the rule look extremely odd. 

Cultural Bias?

While I can't precisely put my finger on it, there are also some Vibes of Bias I've sensed when talking to people in other areas of the country.

According to my friends in California, there appears to be no sane reason why you'd want to live in a fly over state. You must clearly value fishing and binge-drinking over technology to live in a cultural wasteland like Wisconsin, Ohio, Missouri, Indiana, or Montana. You must appreciate less than optimal weather to opt for tolerating a cold Minnesota winter every year instead of the superior climated of Sacramento. If you took technology seriously, or if it was more to you than just a way to fund your deer hunting habit, you'd move.

The fact is, there are literally millions of people living in the fly over states, many of them brilliant software developers. Some of these people may have gotten married to people with less yearning for a fast-paced lifestyle on the coast. Some of these people may have close family ties to the area, kids in school, or are anchored to a bad real estate situation. I even know people who have commited the ultimate act of apostasy: left the West Coast to return to the Midwest.

Shortage?

For whatever unfortunate and misguided reasons an enormous percentage of the American population cannot, or choose not, to relocate to a hot technology area on the East or West coast. Yet both attention and Venture Capital flow so much easier to these areas than to a fly-over state. Is there a shortage of Talented Software Developers, or is there a a shortage of Talented Software Developers who had the foresight to establish no roots in a flyover state?

There is a huge opportunity here for the businesses who make this work.

Footnotes:

(0) I'm a fan of Pluralsight and not picking on them. That writeup did inspire me to write this article though.

(1) Salaries really only seem to be escalating in certain areas of the country, which I will address in a future article.

(2) Obviously over time the travel costs could start to outweigh a signing bonus. Regional salary differentials due to lower cost of living in non-coastal states likely provide enough room to negotiate a better salary for the employee and cover regular travel costs.

 

Tags:

Could We Promote Software Developers Like Nurses?

by Damon Payne 10. January 2013 14:45

The difficulties of finding, hiring, and retaining great software developers does not end with filtering out the non programming programmers during your interview process. Any career minded individual must also be constantly thinking about the future. Am I learning enough here? Am I being recognized for what I'm contributing? Is this organization actually incenting the kind of behavior it claims to value? Do I need to try to get a different title that represents my contributions in order to sell myself to my next employer?

Does your organization have a universal and transparent system for evaluating title changes? Is it clear to you what you'd need to do in order to Level Up ? Unfortunately, it's likely not the case where you work. In fact, many people may find themselves with titles (and therefore salary ranges, recognition, and opportunities) that are unhinged from their contribution relative to other employees. Why is that slacker over there a Senior Software Engineer III while I languish as a mere Entry Level Software Grunt II. Your may not have titles, as many titles, or such boring titles, but keep reading.

My wife is a Registered Nurse. The hospital system where she works uses the odd title of 'Staging' as a rough descriptor of skill and therefore salary bands. A nurse can be from Stage 1 through Stage 5. Leveling up is done through the process appropriately called "Staging". The organization has guidelines around staging. When you are a student nurse in training you should be a Stage 1. A nurse who's recently graduated and passed the state Boards (examinations) should be a Stage 1 or 2. Once you have some work experience you will be invited to Stage again, and after a year you ought to be about a Stage 3.

The requirements for successfully Staging at each level are published and transparent. While there is some subjective evaluation: talking to people who have observed your work, etc. there are also various objective requirements, written work, and an oral interview with a small panel that evaluates your fitness for whatever Staging level you are seeking. If you successfully Stage Up, you get a merit increase outside the annual cycle and are more or less considered more of a Senior nurse (in terms of ability, not age) than people of a lesser Staging level.

This carries appeal for a lot of reasons. For one, the process seeks to be evidence based rather than purely due to putting in your time, hanging out with the right people, or job hopping to get a new title. The fact that Staging to a new level requires a significant amount of effort on the part of the nurse also resonates with me: I'm not going to promote you just because it was time. Rather than wondering how your co-worker got to Stage 4, it should be very clear to you what you'd need to do in order to get to Stage 4. If you want to.

I'm not sure what the hospital would do if a nurse tried to stage three times in the same year, but presumably a failure would be accompanied by strong evidence of what was lacking.

In software development, one sought-after title by some is "Software Architect"; to some this is distinct from and superior to being a mere Developer. I happen to agree quite a bit with Joe Duffy on the role of the Software Architect, but in my own way I try to also provide an objective path to anyone who approaches me and says "I'd like to become more of an Architect..." There are things I think you should understand. There are seminal works I think you probably ought to have read. Ultimately, though, in our field, you become a Software Architect by hanging a sign outside your door that says "Damon Payne: Software Architect". (You may want to consider replacing my name with yours) You may succeed, you may fail, but if you're paying attention and you're open to thinking about why you've failed you will learn a lot. You'll keep those things in mind and ask better questions next time. One day you'll leave work and think to yourself "Hey, I really am a Software Architect".  Does "fake it till you make it" work sometimes?

In our world of fakers, pretenders, non-programming programmers, and job-hopping, could we promote software developers more like nurses?

 

Tags:

Personal | Technical Community | Career

Can Windows Phone Survive?

by Damon Payne 3. January 2013 21:08

I recently traded in my Samsung Focus for a shiny new Nokia Lumia 920. I like the hardware very much, and generally Windows Phone 8 is nice. I appear to be among those afflicted with what appears to be a poor Bluetooth stack, but I’m hoping that gets patched soon so I’m willing to suspend judgment on that facet.

I continue to be frustrated by the adoption and market perception of Windows Phone. I mean, really frustrated.Nest

My wife got me a Nest learning thermostat for Christmas. Not only does this thing tickle my interest in machine learning but it’s wicked useful in its own right. One selling point, for her, was that “we” could control it remotely. Except the nest app is available for iPhone and Android only. Not only this, but IE10 is the black sheep of the mobile browser world and no amount of rotating or failed resizing makes the mobile version usable on my WP8.

Of course it’s not just Nest. Fitocracy, Pinterest, my bank, and nearly everything else I have interest in is an exclusive club where membership is available only to those who know the secret handshake of the Ancient Order of the Not-Microsofts. Of course it would be great if all these folks started making Windows Phone apps, but why should they? Android continues to sell one trillion phones per millisecond and the iPhone is still considered cool. I can’t even claim to be a part of the solution myself. I am involved in a side project/startup with some folks right now, and the question of a Windows Phone app has never come up. Although it’s entirely my decision and my time I simply cannot justify it. Maybe when absolutely everything else is done I’ll circle back and build one for the home team, but when I put my Business Owner hat on it’s easy to see why the decision to not build a Windows Phone app is so easy.

Microsoft has some of the smartest people in the world working for it. I have to wonder, though, if any of them are in marketing? I’m tired of not being able to participate in Mobile because I bet on the wrong platform. I’ve had well-meaning Microsoft folks ask me which apps are missing: the intent is to contact these companies and try to educate them on the opportunity. Sadly this merely kicks the can down the road a little. When the next new mobile app hotness comes out the overwhelming likelihood is that it will come to Windows Phone last, if at all.

Until it is a must that companies also release their software for Windows Phone, they won’t, and their users will feel the sting of second class citizenship.  Microsoft needs to Fix It, or lose mobile entirely.

Tags:

Technical Community | Personal | Windows Phone

Braised Beef Short Ribs with Malbec Gravy

by Damon Payne 28. December 2012 12:13

As I continue my introspective end of the year thoughts I am reminded of a request from a buddy: start blogging my recipes. If you’ve ever looked at the Flickr stream over on the right hand side of the current blog layout, you may notice that a lot of the pictures are of food. I assure you I’m a much better cook than photographer. While many of the things I make come directly from Cook’s Illustrated or Food Network, some are my own creations. While this hardly fits with the technology focus of my blog, it’s who I am.
So, my amigo in Nashville, this is for you.

Braised Beef Short Ribs with Malbec Gravy

This recipe uses classic French techniques to produce tender meat and flavorful sauce.


* 4-7 beef ribs, trimmed of excess fat
* Two tablespoons of unsalted butter
* Two medium onions, diced
* Four cloves of fresh garlic, minced
* Fresh thyme
* 1 heaping tablespoon of unbleached all-purpose flour
* 1 tbsp tomato paste
* Kosher salt
* Fresh-cracked pepper
* 4 slices of thick cut bacon
* Two celery stalks, sliced thick
* Two large carrots, peeled and sliced thick
* Two bay leaves
* 14-20 ounces of crimini or button mushrooms
* 2 cups of beef broth
* 1 bottle of Malbec

Pre-heat your oven to 300.


Allow the beef ribs to come up to room temperature and sprinkle with Kosher salt. If possible, allow them to rest on a wire rack for up to 1 hour before cooking. While the beef rests, pour the Malbec into a saucepan and reduce until it’s about 1 cup; this may take around ten minutes.


 Cut the bacon into ¼” pieces and brown in an oven safe saucepan or searing pan, a Dutch oven will do in a pinch. If your culture forbids the eating of delicious swine, skip this step and use 2tbsp of vegetable oil instead. When the bacon is browned, remove it from the pan with a slotted spoon and set aside. Depending on how fatty the bacon was you may wish to remove some of the rendered fat from the pan at this point. Season the beef ribs with pepper and sear on each side for about 1 minute over high heat. Remove the ribs and set aside.


Add the onions and brown until soft and translucent, this make take up to 8 minutes. Add the garlic and briefly cook until fragrant, around 30 seconds, be careful not to burn the garlic. Now add the flour and mix with the onions. Cook until the flour is browned, maybe as long as 2 minutes or so.


Side note: Why add the flour at this point and brown it? Many soups & sauces start with a base mixture called a roux, pronounced “roo”. A roux is often as simple as vegetable oil and flour cooked until the flour is copper colored. When flour is manipulated in this manner it forms gluten proteins, and some of it will stick to your pan. This is the good stuff that will make for thick, hearty sauce later on. This will also mean you won’t have to add flour later or do as much reducing to get the sauce to the consistency you want. You can skip this step and use a little corn starch later to make this gluten free.


With the flour browned, pour in the beef broth to deglace the pan. Make sure to scrape the pan diligently to remove anything that’s stuck to it: that’s the goodness. Turn the heat to high and add the carrots, celery, bay leaves, thyme, reduced Malbec, bacon, tomato paste, and bay leaves. Once the mixture is simmering, nestle the beef ribs in the pan, cover with foil, put in the oven and cook for a long time. I suggest at least four hours, but you can check for desired tenderness at any point after an hour.


Once the ribs have reached the desired tenderness, remove them from the sauce, turn off the oven and let them rest in there on a pan. Pour the sauce mixture through a strainer into a bowl to remove all the solids. Wash the mushrooms, halve or quarter them, and sear them briefly in the original sauce pan.  Add the strained sauce back in and cook over high heat until the mushrooms are tender and the sauce is reduced to your desired consistency. Add the butter and whisk to combine. You can pour the sauce right over the ribs, I myself tend to serve this with mashed potatoes and parsnips.

Tags:

Personal | Food

The Future of Retail

by Damon Payne 27. December 2012 15:40
TL;DR – The retail industry should look closely at current and future reality. Many retail businesses should accept that consumers like “kicking the tires” at brick-and-mortar locations, but want the prices and service of etailers like Amazon.com. Create a hybrid model where you go try that TV out at a Best Buy a few miles away, but it nearly always ships from a warehouse rather than you taking it home that instant.
Over the past 15 years I have watched industry after industry fight the advance of technology.

Let's think about some industries in the age of the Internet:

Newspapers
Music.
Movies.
Real Estate.
Publishing.
Retail.

The way we’re doing things now are profitable, proven, known, safe, comfortable.


Some of these battles are still going on; some of them are clearly over. I’m sure I’m not the first person to observe that each of these industries faced a challenge, a choice, and an opportunity. The challenge is that old models are clearly going to be attacked. Consumers want something new. Consumers can see that the technology exists for them to get what they want in the way they want it. The choice and opportunity is to either fight the new way, or to own it. The music industry could have owned digital content distribution. They chose to fight it instead, and now Apple is eating their lunch. I have a few contacts in all areas of the music business and related fields including artists, studio owners, and electronics manufacturers. They all live in fear of Apple. Apple says how high to jump. Apple owns it, because they waited too long and fought too hard.

Listing your home, inexpensively, using the Internet works. Your local Realtor would surely rather you pay them a 6% commission to do the same job. In my state and others, they spend a lot of money lobbying state legislatures to craft incredibly ridiculous laws that make some parts of the business models of Zillow, Trulia, or our own BuyHomes.com, illegal: under the guise of “protecting consumers” of course. The truth is these are all distortions of reality. It is reality that consumers want and can get music electronically: one way or another. It’s reality that when I sold my last house I paid BuyHomes.com $500 and a real estate attorney $400 and saved a fortune in commissions. When you tell consumers to ignore the man behind the curtain so you can keep doing what you have always done, you eventually lose.

What Year Is It?

 

I have, many times, been standing in a Best Buy needing help. For a long time. Maybe I need an employee to scan this iPad to tell me if it’s the new retina display model (it’s not indicated clearly on the box). Maybe I need to know if this TV is in stock. I’ve also had a 16 year old who doesn’t realize they’re talking to a life long Audio/Video nut try to tell me what this amazing Monster Cable is going to do for my sound system. I feel like Best Buy is practically pushing me out of their stores towards online sellers.
 As I consider myself an ethical person, I feel downright slimy on the (extremely few) cases where I have “kicked the tires” on an item in a store and simply bought it for less online. In other cases, like Best Buy, I feel they had a chance to earn my business and failed miserably. In still other situations, I went to Kohl’s to buy a pair of shoes and they didn’t have my size in stock. The salesperson dutifully offers to order them and they’ll be in in a week. A week? What year is it? Amazon will have these to me in two days, thank you very much. Now Amazon is even working on Same Day Delivery!

So What Should Retail Do?

 

Admit to reality and work witin reality?
There are obvious benefits from being able to walk into a brick and mortar location and kick the tires on electronics, clothing, etc. The cost of having a big enough store to have hundreds of TVs and 300 of the latest Xbox in stock is huge. The models for how the stores are ran and laid out are ancient. Amazon.com is just going to undercut you anyway. Consumers want to kick the tires and then buy online, so embrace this model.
I can envision a future where I walk into an Amazon.com branded electronics store. They have ONE of various models of TV, ONE BluRay player, etc. I can kick the tires. Only the most obvious new release movies & music are there for me to carry out of the store. Only the most current game releases are in stock. They have close to zero shipping/fulfillment because there’s essentially no inventory, no more in the back. There are kiosks positioned throughout the store where I can sign in and order the TV I was just looking at. I get my Amazon points, my Amazon Prime shipping, and everything else I’ve grown accustomed to since first becoming a customer in 1997 or so.
Best of all, I have not a shred of guilt. The store manager isn’t looking at me sideways, knowing I’m going to go home and shop around for the best deal on that wine ‘fridge. Retail will only exist in its current form in Boutique settings.

Tags:

Business | Technical Community

On Silverlight and the Dangers of Over-specialization

by Damon Payne 26. December 2012 17:45

It’s been quite a long time since I’ve written any new Silverlight code. Reduced solely to its core suite of technologies, Silverlight is certainly still as cool as it was two years ago. I am probably not alone, though, in claiming that I see less and less interest in Silverlight as time goes by.
In my opinion, Steve Jobs killed the browser plugin ecosystem overnight with his anti-Flash rants and refusal to give Flash a place on the iPad. We are living in the renaissance of the front end web developer. To a large degree, I don’t mind this. It’s been years since jQuery took a way a great deal of the pain of Javascript, and projects like Foundation are taking away the pain of CSS. No, we’ve come a long way since my days of pre-Ajax hacking with posting-back hidden iframes. Sure, a type system would be a huge boon to larger in-browser efforts, but maybe TypeScript will save us.

Assimilate or Perish

There are other reasons why people began to drift away from Silverlight, of course. Microsoft, too, didn’t help matters. Microsoft has a lot of means by which it interacts with people and companies using its products in interesting ways: The MVP program, TAP programs, early-access programs, Insider Programs, Metro (not the UI framework) programs, and I’m probably forgetting at least six others. The companies and people that participate in these programs gain the ability to influence products but also a huge head start at building knowledge which is a nice competitive advantage. If your company decides to use a new feature of SQL Server, would you rather hire a consultant who’s been influencing the product under an NDA for a year, or someone who just got access at the same time you did? For this reason, there’s a very large community of people and companies for whom it pays big to align with Microsoft, lock step.

An investment in Silverlight may not quite seem like it belongs in the same category as, say, betting your business on SQL Server, but there are some additional factors. As I am fond of saying, when you choose a technology platform, you are also choosing the community behind that platform. If something like Silverlight is perceived as being on its way out, will you attract career-conscious engineers to work with you by espousing it? If you depend on your relationship with a giant vendor like Microsoft and they are shifting their direction in a particular area, hadn’t you better shift as well or risk losing their attention and good will?

Is that my cheese over there?

My programming career has seen me through BASIC and Pascal, through Solaris, Windows NT, and Mac OS X, through C# and PERL and, SQL. I never considered myself a “Silverlight guy” but rather a lifelong polyglot and ever-learning student. My public identity, though, was very much tied to things like Silverlight.  This is, in great part, responsible for my “dropping off the grid” for the latter part of 2012. True, I was also growing weary of the type of sessions user groups and code camps seem to want, but more on that later.

While the technical merits of Silverlight remain true, the marketplace of ideas seems to have moved past it. In fact, if I had to explain why I think a technology gets adopted, I think I’d say something like this:

TechAdoption

Many of these aspects are related yet distinct. Marketing can include things like Hype (Everyone is on GitHub and StackExchange writing Python now!) Mandates may mean something like forcing developers to learn Objective-C to take advantage of the Opportunity represented by the iOS marketplace.

The small glimpse of the obsolescence that comes with betting on the wrong horse left me in a funk for a while. I went into maintenance mode and didn’t innovate much for quite a while as I cast about looking for where I would invest my energies next. More on that later too, but I believe I’ve found a basket of things to start talking about. While for a while it seemed there was nothing in Microsoft DevDiv with so much momentum as Silverlight, life goes on. Software is still eating the world. It’s a great time to be a software developer, adapt and carry on.

I’m having as much fun as I ever have.

Cheers,

Damon

Tags:

About the author

Damon Payne is a Microsoft MVP specializing in Smart Client solution architecture. 

INETA Community Speakers Program

Month List

Page List

flickr photostream