Some things never die, and you shouldn’t force them to.

Standard

Or maybe this post should be called “how to keep your contacts alive” or “how to build bridges instead of burn them”.

Today I had a strange thing happen.  I had a question about something I wrote over three years ago come back to me.  I no longer even work in the same org as when I wrote the original thing.  And truthfully this thing has had a trickle of questions over the years.

The truth is in some ways I remember almost everything about what I do.  But also I remember almost nothing.  In that I remember very few specific details, but I remember the threads of thought that lead me to conclusions I made.  The reason this matters is that the question was about a logging component I wrote and the person was asking about a performance problem.  I could remember the general problems that I had solved, and the other problems that I had very little control over directly (I couldn’t control where the component was used, though I could suggest possible solutions to alter that environment).

Even though I was actually quite busy today (I’d already had 3 bug fixes waiting to be checked in, an alarm that day, was prototyped a fourth fix and was investigating a new feature) I went back, looked at the code I’d written.  Asked the person a few questions and then suggested the couple of things I was aware of.

I don’t know that I’ve fixed their problem.  If not, likely I’ll spend another hour or two talking them through what’s happening and seeing if we can’t get to the root of the issue.  And ultimately I don’t have the ability to fix their problem once it’s fully understand since I don’t have the access needed to make the fix.  But they’ll remember that even though it’s no longer “my” problem, I helped them solve their problem.  I’ll have reaffirmed in their mind that not only do I care about that things I make, but that I care about them (the person). I don’t think you can ever evaluate how valuable little things like this are, but I suspect that I may be building foundations for the future just waiting to be built upon when I need them.  I may never need them, or they may help me build an escape route just when I need it.

Some things never die, and while you can’t always solve everyone’s problem.  At least try to show them you care that they have a problem and you’ll try to help them get to their solution as much as you reasonably can.

You’re going to Fail.

Standard

You’re going to fail.  Grin and bear it.  Jump into failure with a smile plastered on your face.  Smash yourself over and over as you make your impossible attempts.  You’re going to Fail and you’re going to like it.

No one ever said these words to me as a child, or if they did I wasn’t listening closely enough.  When I was growing up it was always “you can succeed if you just put your mind to it.” While they’re both true I sometimes wonder if my life would have been easier if I’d been told both sides of this coin.

Because you’re going to fail.  You’re going to stumble.   You’re going to make mistakes.  But by the same token, if you continue to fail, eventually you’ll succeed.  There’s no failures in life, there’s people who have had some success in the past, those working towards success, and those who’ve taken a break before making another attempt, we may be one or all of those.

Lately I’ve been thinking about my life and about the life I want in the next 10 years.  I have several things I see on the horizon, my daughter is about to reach one soon, I know that I’m going to have to play an active role in her life if I want to leave some of myself with her.  But also I look at my career and in some ways I’ve reach a pinnacle in the sense I’ve achieved something beyond what I even dared to believe I could do.   I’ve been part of something extraordinary and yet there’s a part of me that still believes I’m nobody from nowhere (and maybe I am).

I honestly don’t know what the next ten years are going to be.  I’m sure I’m going to screw up, I’m not perfect, and I’m certainly not at the pinnacle of who I can be.  I can always be better at writing code, faster cleaner code.  I know that I’m not leading those around me as effectively as I should be.  I think to move forward I’m going to have to elbow my way into decision making.  I see so many things going on around me and I’m often unable to do something to make them better.

“You’re going to fail”  Those words are what drove me to where I am though.  I had a dark period in college where I stopped just being able to “work hard” (by an admittedly bad definition of ‘hard’) and had to actually fail to move forward.  We don’t really learn our lessons and become better until we’ve been crushed.  We don’t move beyond who we are until we’ve been shown undeniably that we can be better.  After I took my break from school I had a rough year.  I honestly was just scraping by trying to figure out what to do with my life and how to get it in order.  Partly I simplified it by getting married.  As crazy as that might sound it put to rest one of the biggest stresses I was facing.

I’m not by any means saying I thought I was unlovable, but there was always a doubt in my mind that once someone “found out” who I really was they would think I was pathetic, weird, stupid or just naïve. But after actually getting married, having that sort of affirmation that not only did the person I care about me see me as I was but that they were willing to really truly commit to spending their foreseeable future with me.  That was crack in my self doubt that helped me start to get things back in order.

It was okay that I wasn’t perfect.  It was okay that I had failed and was utterly useless financially.  I was still acceptable.  I had failed and life wasn’t over.  So it was time to start building again.  And I did build.  I stopped trying to succeed at everything be perfect at everything.  I started focusing on where I needed to be.  I still failed at times, but it was okay because with my new focus I was learning from those failures.  I was moving forward.

And then as I was coming to the end of my college time and I had all of the scary possibilities and none of the assurances of a good future.  I interviewed at one place.  A place I thought I could start a reasonable career at.  I was so certain I had the foundation and I was going to get the job.  I knew someone at the company was a friend’s parent.  It was nearby, safe, an easy success.

I drove to that interview full of promise and I left broken.  A failure.  I’d stumbled badly on a few questions, they wanted someone with “experience” which I lacked. And they offered as a sort of consolation prize a possible position in “support” because of my success and experience from working in tech support at and ISP.

I failed.  The safe thing would have been to take that support job.  But that’s not what I worked so hard to do.  I was going to be a developer, I was going to write code.  I drank my failure and shame and I moved on.

And so I kept at it.  And then something crazy happened.  Microsoft called me and was interested in my resume.  I didn’t believe it.  Why would Microsoft consider me?  I’m nobody from nowhere.  But I thought “why not”.  I’d already failed badly, what’s the worse that could happen.  They’d fly me to Seattle, I’d interview, fail to get a job again, but maybe I could talk to them while I was there.  Maybe I could learn something that would help me get my foot in the door.  And at least then I could say I’d interviewed there.

And so I went into my second set of interviews a different person.  A better person.  I wasn’t there just to get a job, I was there with a mission to learn what I could about what they did.  I opened up, asked questions, talked about my love of software and my hope to write more code.  I got excited about being shown how I’d screwed up and could do it better.  I was interviewing for something close enough to my “ultimate” goal of writing software that I was really into it.  And apparently I nailed it.  The best of who I am shined through and all three of my interviewers marked me with a “hire and for my team please”.  I had my pick of the three.  My failure turned to success.

If I hadn’t failed that first interview, or I had take then safer option of less ideal position, I’d probably live in Coeur d’Alene Idaho today.  I would have been happy probably, but I’m not sure I would have been as happy.  Certainly I would never have gotten to where I am today.

So yes.  You’re going to fail.  Lick your wounds.  Get used to the taste of blood in your mouth, the pain of bruises, the humility of defeat.  Failure makes you a stronger, better you.  And even when you’re succeeding look for ways to fail as spectacularly as you can.

Shoot for the stars.  Keep learning and pushing yourself.  Never stop, rest maybe, but don’t stop.  Stopping is stagnation, death.  Hope isn’t about success, hope is about overcoming your failure.  Realize now is not perfect, but you can make it more perfect.  You’ll never make it perfect, but trying to make it more perfect is good enough.

I have high hopes for my daughter.  I hope I can help her to grow faster where I struggled, be better than I am or ever will be.  I have hope for myself.  I have hope for us, I hope we’ll go beyond this world, this solar system, this galaxy.  And even if we fail, we will have tried to be better than we were.

You will fail, and I have hope that you will learn from it.  I have hope for you.

 

 

Random thoughts to up and coming developers.

Standard

A few days ago I had a colleague drop an “interested” computer science student off at my office to talk about “stuff”.  I talked with this individual for about twenty minutes, I had no specific goals, but after reflecting back on the conversation I thought it might be worthwhile doing a bit of a brain dump.

So first off, some context, for the last year I have been working on services related to the Xbox One.  Now that we’ve launched I feel a bit more willing and able to talk a bit about my experiences.

First off, my path to where I’m at hasn’t ever really been straightforward, but one constant has been a strong love technology and a desire to actually work in it.

I spent a long time in college, I always new I wanted to work on software but it took me going through some rocky life lessons to really apply myself.  However eventually I did learn those life lessons and apply myself I did.   I think this drive and my enthusiasm for software is what really got me into Microsoft.

So I guess my first piece of advice to students looking to get a job in software.  Love what you are going to be working on.  Make sure you are going to enjoy working at a computer for eight to twelve hours a day, you’re going to be doing it for a long time,  assuming you keep the same general career path.  I’ve seen the difference it makes and trust me, the person who is happy to invest themselves into what they are doing is always going to “win” over someone who doesn’t, they’ll have a better career trajectory and they’ll be better at what they do.  So Love what you do, it will help keep you happy which will help keep people around you happy.

My next piece of advice for college students in particular is to never overestimate any experience even if it’s “free unprofessional work”.  Join hobbyist groups that are doing something like what you want to do.  Work on projects for yourself.  Just go out and do some programming, the more you do it, the better prepared you’re going to be for working in the “real world”.   I cannot stress enough that working on stuff even if it’s only for a weekend or two will be good for you.  If you can work in a group on something even better.  The reality is that most software is not written by one person but by groups of people.  If you’re going to be a good developer you are going to have to learn to program with other programmers.

Don’t shy away from failure.  Heck fail spectacularly.  Sometimes  you need to fail ten or twenty times before you succeed spectacularly.  Failures are just life experience, they help you learn how to judge your limits, how to push beyond them or even that limits exist.

Learn to use source control, difference based code reviews, unit testing and the idea of gated builds.  These are all part of the real workflow a professional developer does.  At Microsoft we use a couple of different solutions for source control but one that is publically available is Team Foundation Server.  We use TFS internally and there are often free options host on the TFS web services for small development projects (of five or fewer people).  TFS is also great in that if provides a lot of the tooling to get to the other big process (gated build, code reviews, and visual studio solutions support unit test projects).

Learn about patterns, use them if you understand why it is appropriate otherwise just  focus on writing code that is a simple to understand as possible.

So that’s my advice.

Now, here’s what it’s been like to be a “professional” for me.  When I started at Microsoft I actually started out in Testing.  I worked developing automation and testing publishing of applications within Visual Studio.  At least within Microsoft where much of what the test organization is responsible is repeatable automation, programming is a big part of what you do day to day.

Writing automated tests is an art form in that you have to balance the long term value gained from the automation against the specificity of the validation it does.  As a simple example it’s pretty easy to write a test that does something like open Word and type a few lines of text and then validated the text shows up.  It’s a little harder to decide what you should check about the text.  For example: does the default font, borders and paragraph style matter?   The question of “what matters to the customer” combined with “what do we specifically want to prevent breaking” pretty much define the goal of automation.  Of course there’s many other things testers do at Microsoft.

Over time I worked myself deeper into the test tools and eventually made a transition from tester to developer.  Initially the difference wasn’t terribly obvious because I worked on the same test tools used within the Visual Studio organization I had been working with.  As I described it I went from owning test cases to owning test framework bugs.  Over time that changed though and I spent more time working on things outside of  the test automation framework I owned.

Eventually I moved to work on Xbox Live. I did this to broaden my experience to work on services but also because I’m very passionate about games.  I’ve been playing games since the original NES days.

I spend about fifty percent of my time actively writing code to either fix bugs or create new features.  The rest of my time is spent debugging , inspecting logs and other evidence to understand problems, going to meetings and dealing with other communication.  As a tester I did a wider variety of things, but to be honest I love code so much that being “just a developer” has actually been a bit better of place for me to be.  Of course just because I’m a developer doesn’t mean I don’t test, I still write unit tests and validate any changes I do before checking in.

Primarily I write code in C# but I have also worked in VB .Net and C++.  I also am passingly familiar with PowerShell scripting (I suspect I’ll end up getting better as I find more usages for it in my current role) and have written more batch scripts that I like to admit.  To be honest the more I’ve worked in software, in many ways code is code is code.  Different languages will tend to lead to different types of mistakes but in the end software is deterministic (given you can replicate the exact circumstance and timing) and does exactly what it is programmed to do.

Working on a console as it is being built is both more and less glamorous than you might imagine.  Getting to see early versions of the hardware can be both exciting and frustrating because often things are fairly non-functional.

You can often see the potential very early on for what each thing might be.  As the development cycle moves on, a lot of things that are abstract demos turn into real features.  Some things get cut, you learn to focus on what matters to the core experience versus what is nice to have, or can be done later.

You argue and fight to get things done right, to make sure that the final experience is good and the systems work in a way that is manageable.

Sometimes you build something, change it, change it, change it and then look at it a few weeks later after someone else has changed it a few times.  At this point it’s completely unrecognizable, sometimes for the best, sometimes you liked how it was before better.

Things break, then work then break again before working.  Then suddenly all the rushing around to get stuff done hits a high point where you are barely at home at all.  To be honest you’re so embroiled in just getting that last bit done you don’t quite realize just how much time you’re actually in the office.  Then it all stops, everything that is going to be done for launch is done, you need to stop and watch it go out.

I was a complete wreck of nerves on launch week.  I had two things going on, first I volunteered to be in the office during the graveyard hours for that week to be there in case any issues arose.  So I had to completely reverse my sleep schedule.  That by itself would have resulted in not getting great sleep.  But also launch week is all anticipation, there’s not much you can do but wait for things to happen.  I only slept for about three hours each night during that week.  I spent all of the rest of my time in the office or getting ready to be in the office.

You try to prepare yourself for figuring out any problems that might crop up.   Then it’s launch night.  At 3 AM a small group of us gathered under the three story countdown timer to get a quick snapshot of the first transition from “countdown” to “released”.  We shuffled back to our offices and watched with baited breath our telemetry.

After twenty minutes we started to see traffic to our service increase significantly as people start using the features that use our service.  It’s real, real people in the real world are seeing and using stuff I worked on for the first time.  It’s exciting, terrifying and wonderful all at the same time.

As it turns out this launch was great, our services worked better than expected, the one major issue we had was out of our control and quickly resolved.  So the celebratory mood kicks in.  We partied, and we partied hard.  And while I spent that first week of launch in my office during the hours of 2AM to 10AM (and actually I was around for a lot more time than that), it was spent doing what I love.  Playing games on a console I helped make while watching and seeing that code I wrote was being used by thousands of people.  Yes, I helped make Xbox One.  That’s what it’s like to work in software.

More Art.

Standard

This time, let’s look at a series of people drawings I’ve done.  These were all draw within ten days of each other and I think it’s a great progression where you can see me trying and improving on many different aspect.

These are in order.  You can see that the first two the legs just look really weird and out of proportion.  Also some of the things I tried were not working so well.  The profile portrait was particularly successful around the shoulder and chest area. The second image the shading around the neck is a vast improvement on the first.  The sleeve didn’t come out all that well though.  I enjoy the challenge of drawing eyes so the fact that two of these images don’t have any visible eyes is good.

The self portrait (fourth one) turned out great.  I did this on a lark, really didn’t expect it to turn out so well.  Some key goodness here:  First using line textures to give color to the shirt.   the angle of the face is a bit unusual and gives a nice “I challenge you” kind of vibe(chin down looking above the glasses).  Going all back with white lines for the surface worked well as well.  Not trying to be subtle about skin tone shading (and providing a mostly lit view) I think also help with the composition.

The final one was done in about sixty percent of the time of each of the others.  instead of drawing shapes and outlines, I blocked in the movements and key framing.  I then went over with a fat line to highlight distinct lines to pay attention to. When I went over with the marker tool for the final I was focusing less on trying to compose everything and more on getting the lines in right.  I really like how the last one turned out, the motion feels real, the pose is a little weird/awkward but it lends to that feeling of being in motion.

doodles.10.10.2013doodles.10.11.2013doodles.10.12.2013

doodles.10.13.2013doodles.10.19.2013

“Things My Lead Hates”

Standard

If you’re here you may have probably arrived because of my propensity to say “#ThingsMyLeadHates” on twitter.  This comes about from a rant with my lead the other day.  So sit back, relax, story time:

I work in a large software firm.  There’s people who I work with that have been coding for decades, others who are just crazy smart.  The amount of raw experience and talent I am immersed with daily is boggling.  Frankly it’s awesome and it’s one of the things I really love about my job.  I work with probably some of the best programmers in the world and I’m constantly working to be just half as good as most of them.

So given that environment you might imagine that strong opinions come into play quite frequently.  My lead in particular is very opinionated about some specific programming patterns.  She will eat a person alive if they write bad code.  Her code review comments can be direct and very cutting.  It’s a little intimidating working with her at first because of this, but the more I’ve gotten to know her the more I actually appreciate getting the feedback.  She may be a bit too direct but she’s also helping us to actually grow and be better.

Recently after getting somewhat worked up about a real problem she started ranting about patterns she hates.  Now just to be clear, there are a lot of programming patterns out there that have valid but completely contradictory opinions about their value.  Part of what makes this particular rant funny is that each person has their own pet peeve about a particular common pattern.  The pet peeve might be justified, or it might be because of some humorous or embarrassing bug related to that pattern.  My lead has a seemingly endless set of patterns she hates.

Also I want to be clear, my lead is probably smarter than I am.  She has certainly gotten more experience then I.  I believe she has a better grasp for the mistakes that we make today that we only end up regretting tomorrow.  She also has very valid arguments for her opinions.  Although there are also valid arguments counter to her opinions as well (just to be fair).

So this rant about patterns has become somewhat of a joke on my team and it’s a bit of a way of venting about something we see that just bothers us and also an acknowledge of our own hubris.  We’re not perfect.  We all make mistakes.  We always try to be doing better. The fact that my lead knows we’re working towards being better is part of what makes the rants fun and not just awkward and upsetting.

So next time you see me post some pattern know that it’s probably something that either I or someone I know has recently talked about.  Sometimes it’s good to make light of our mistakes and hang-ups, even if only to let others know that we really really care about the fact that they should never double space their lines or we might just have to stab them.

Art Thoughts

Standard

For the last couple of weeks I’ve been trying to go back to doing regular drawing sessions.  I don’t know that I will be able to sustain this, but I’m enjoying it. I’m going to reflect now on what I’ve produced.  I strongly believe introspection leads to realization which leads to improvement.  So let’s get to it:

This drawing was something I did for my twitter profile.  I wanted something vaguely me-like.  It really is a filler piece in the sense I just wanted something.  I’m not really happy the final result, the facial structure is really off, I’m nowhere that long in the face.  That said, some of the techniques did come out.  The Xbox symbol turned out well.  I’m actually pretty happy with the nose but it’s not “right” for my face.  The glasses are a marked improvement on how I did glasses previously.

computergeekdoodle

This picture I specifically wanted to try drawing a woman.  I’m bad at drawing women, it’s just hard for me to get the facial structure to look feminine. I also tried some new shading techniques for the face to try and give blush, lips and a sense of eyelashes.  Of everything I did in the eyes, I think the realization to draw the reflective shines across the pupil/iris boundary was the best improvement.  Also I tried some new hair techniques that I’m very happy with. Keeping things kind of messy gives a more dynamic “real” feel but also getting shaping and volume right is something I’ve had a hard time getting right in the past.

 

doodles.9.10.2013

The bard rocking out.  Lots of good here.  First:  I specifically stopped trying to be perfect in form and shape.  by doing so I think the pose actually feels more natural and has a lot of energy to it.  I also made some marked improvements on how I render rapiers. I ended up redrawing elements of the hat to get it right, but it came out well.  The face looks pretty good, but the placement of the right shoulder button is bad.  Some of the ribbons did not come out so well.  The lute has some flaws that drive me nuts, but only when I specifically look at it.  The flow of the picture is such that the eye tends to move right past them.

doodles.9.11.2013

Some introspection.  The shape of the hand is a bit off, I was trying to fix a tangent wit the nose that actually made things worse.  The hair has some nice shading and volume while still feeling like it’s very white.  The eyebrows are deliciously bushy.  The jeans are a complete failure, I’m still thinking about exactly why it’s wrong.  The shoes are okay but not great. The overall pose communicates the feeling of weight in a good way though.

doodles.9.12.2013

I totally overworked the face and hair on this one. 

doodles.9.13.2013

This one turned out well.  There’s a nice balance of lights and darks. The over all pose is great.  The mouth is hilarious and combined with the eyes definitely gives a feeling of “stunned” (or maybe “stoned”?).  I like how the clothing came out.  I have to admit to my shame that the pants turned out well as a fluke.  Originally I was going to do them white with black shading but it wasn’t working.  This is the result of reworking them entirely and it turned out to do exceptionally well and fixing the issue.  I like how the boots came out.  I’m really happy with the hair, it’s subtle but it has lights and mid-tones but also feels messy in the right way.  The hat turned out well.

doodles.9.14.2013

Hello World.

Standard

So, let’s get started with some code, this is after all, “Coding 4 Fun & Profit”. This code is not a test, it is simply something I whipped up for fun.  Profit is what I do elsewhere.

public static void Main() 
        {
            var colors = new ConsoleColor[] { 
                ConsoleColor.DarkBlue, 
                ConsoleColor.Blue, 
                ConsoleColor.DarkGray, 
                ConsoleColor.Gray, 
                ConsoleColor.White, 
                ConsoleColor.Gray, 
                ConsoleColor.DarkGray, 
                ConsoleColor.Blue, 
                ConsoleColor.DarkBlue };

            Console.BackgroundColor = ConsoleColor.Cyan;
            int x = 0;            
            foreach (char c in "Hello World")
            {
                Console.ForegroundColor = 
                     colors[x % colors.Length];
                Console.Write(c);

                x++;                
            }

            Console.ResetColor();
        }
A bit about me:

I am a professional software developer.  I’ve been working specifically as a software developer for over seven years now.  I started out professionally from college writing test software and automation, but I’ve since made career changes.  I have worked on things you may now about, and many things you’ve never heard of.  In my day to day I write code in C#, though I have also done my stint writing code in Visual Basic (.NET), C++, Java and a handful of other languages that I don’t really remember and aren’t important now.  I am by no means the best programmer that I know, though I strive to be getting better so-as to make that eventually impossible to say.

I also play games.  Lots and lots of games.  Recently I’ve finished Saints Row 4, but I’ve also been playing Rogue Legacy, Spelunky (by myself, so sad), Endless Space, Samurais vrs. Zombies, Legend of Dungeon, Realm of the Mad God, Dungeons of Dredmor, The Bureau : X-Com Declassified, Payday 2 and Gnomoria.  I have also been known to play a board game or two.

I draw. I’m a total hack of an artist, I don’t want to set your expectations too high.  I might just post images here.

I think.  Life is full of experiences, it’s inevitable that we would cogitate on them from time to time.  I would like to think I think more than most people think.  I sample the feel of thoughts sifting through my meat computer, and drink in the insights and amusing observations I sometimes arrive at.  I probably think too much.

My goal here:

This blog is really just a place for me to share whatever comes to mind.  Consider this mind-spew, or a chance to look into the inner workings of someone else.  It’s possible my insights, humor and worldview will amuse you.  I might offend you, I make no promises about keeping my content free of my personal opinions on anything.  I might inspire  you, or possibly post something that solves some crazy problem you’re working on.  All I can hope is that something of what I do persists and value is gained from this blog.