DaedTech

Stories about Software

By

Merry Christmas

I’d just like to wish all of the DaedTech readers that celebrate Christmas a Merry Christmas. I celebrate the holiday myself, and Christmas for me typically involves some travel to see family during the time between Christmas and New Year’s Eve. This year is no exception, so I probably won’t be posting, except perhaps for a retrospective post that I have in the hopper. So, enjoy your holiday time, and look for your regularly scheduled posts to resume after the new year.

By

Static Analysis, NDepend, and a Pluralsight Course

I absolutely love statistics. Not statistics as in the school subject — I don’t particularly love that branch of mathematics with its binomial distributions and standard deviations and whatnot. I once remarked to a friend in college that statistics-the-subject seemed like the ‘science’ of taking a guess and then rigorously figuring out how wrong you were. Flippant as that assessment may have been, statistics-the subject has hardly the elegant smoothness of calculus or the relentlessly logical pursuit of discrete math. Not that it isn’t interesting at all — to a math geek like me, it’s all good — but it just isn’t really tops on my list.

But what is fascinating to me is tabulating outcomes and gamification. I love watching various sporting events on television and keep track of odd things. When watching a basketball game, I always the amount of a “run” the teams are on before the announcers think to say something like “Chicago is on a 15-4 run over the last 6:33 this quarter.” I could have told you that. In football, if the quarterback is approaching a fist half passing record, I’m calculating the tally mentally after every play and keeping track. Heck, I regularly watch poker on television not because of the scintillating personalities at the tables but because I just like seeing what cards come out, what hands win, and whether the game is statistically normal or aberrant. This extends all the way back to my childhood when things like my standardized test scores and my class rank were dramatically altered by me learning that someone was keeping score and ranking them.

I’m not sure what it is that drives this personality quirk of mine, but you can imagine what happened some years back when I discovered static analysis and then NDepend. I was hooked. Before I understood what the Henderson Sellers Lack of Cohesion in Methods score was, I knew that I wanted mine to be lower than other people’s. For those of you not familiar, static analysis is a way to examine your code without actually executing it and seeing what happens retroactively. Static analysis, (over) simplified, is an activity that examines your source code and makes educated guesses about how it will behave at runtime and beyond (i.e. maintenance). NDepend is a tool that performs static analysis at a level and with an amount of detail that makes it, in my opinion, the best game in town.

After overcoming an initial pointless gamification impulse, I learned to harness it instead. I read up on every metric under the sun and started to understand what high and low scores correlated with in code bases. In other words, I studied properties of good code bases and bad code bases, as described by these metrics, and started to rely on my own extreme gamification tendencies in order to drive my work toward better code. It wasn’t just a matter of getting in the habit of limiting my methods to the absolute minimum in size or really thinking through the coupling in my code base. I started to learn when optimizing to improve one metric led to a decline in another — I learned lessons about design tradeoffs.

It was this behavior of seeking to prove myself via objective metrics that got me started, but it was the ability to ask and answer lots of questions about my code base that kept me coming back. I think that this is the real difference maker when it comes NDepend, at least for me. I can ask questions, and then I can visualize, chart and track the answer in just about every conceivable way. I have a “Moneyball” approach to code, and NDepend is like my version of the Jonah Hill character in that movie.

Because of my high opinion of this tool and its importance in the lives of developers, I made a Pluralsight course about it. If you have a subscription and have any interest in this subject at all, I invite you to check it out. If you’re not familiar with the subject, I’d say that if your interest in programming breaks toward architecture — if you’re an architect or an aspiring architect — you should also check it out. Static analysis will give you a huge leg up on your competition for architect roles, and my course will provide an introduction for getting started. If you don’t have a Pluralsight subscription, I highly recommend trying one out and/or getting one. This isn’t just a plug for me to sell a course I’ve made, either. I was a Pluralsight subscriber and fan before I ever became an author.

If you get a chance to check it out, I hope you enjoy.

By

I’m Hiring, So Here’s a Job Description

Let me start off by saying that I actually want to hire someone. This isn’t a drill nor is it some kind of hypothetical exercise. I have a real, actual need for .NET software developers and if you are interested in such a job and think that it could be a good fit, please let me know (more details to follow). I think that the pool of people that keeps up with software blogs is the best pool of people there is from which to draw candidates, and I’d go ahead and extend this to the people who run in your circles as well. If you care enough to follow blogs about software, you’re probably the kind of person with whom I’d like to work.

So, the first thing I did was to go and see what was going on at CareerBuilder, Dice, et al. so that I could get some ideas for writing up a job description. I was literally on the second one when I remembered how awkward and silly I find most job descriptions. This bad boy was what confronted me:

Jobs

I was reminded of Blazing Saddles.

Hedley: Qulifications?
Company: NoSQL, Communication Skills, Scala, Communication Skills
Hedley: You said “communication skills” twice.
Company: I like communication skills.

But notwithstanding the double-ups and rambling nature of this and the fact that probably only Horse Recruiter could write it, the ideal candidate has, by my quick count, 27 line items of 1 or more properties. That’s quite a wish list. I’d rather describe what I need like a human being talking to another human being. And, because I’d rather talk like a human being to other human beings, what I’ll start off by doing is describing what we have to offer first, and then what I’m asking in exchange. I think “what we offer” is far too frequently overlooked, and omitting it creates the impression that I think I’m on the Princeton admissions panel for undergraduates, rather than a guy on a team that needs to grow to handle the amount of work we have.

What We Are and What We Offer

Given that this is my personal blog and not affiliated with my 9-5 work, I’m not going to go into a lot of detail about the company, per se. I’ll supply that detail if requested, and you can always look at my Linked In profile — it’s no secret what I do or for whom. Instead, I’ll talk about the group and list out what I think makes it appealing.

We’re a small, agile team and a close knit group. We work exclusively in the .NET space, with a mix of database, application and client side code. Working with us, you would definitely touch Winforms, ASP Webforms, and ASP MVC. We are actively porting Winforms/Webforms functionality to an MVC application. Here are some benefits to working here, as I see them:

  • We follow Scrum (not Scrum-but — actual Scrum)
  • We have MSDN licenses, and we upgrade to the latest developer tools as they are released.
  • You will have creative freedom — we’re too busy for micromanagement.
  • There are definitely growth opportunities for those of you looking to go from developer to senior developer or senior developer to architect.
  • We have nice tooling for Visual Studio development, including NCrunch and CodeRush.
  • Everyone on the team gets a Pluralsight subscription because we believe in the value of personal growth and development.
  • Along the same lines, we have bi-weekly lunch and learns.
  • We have core hours and you can flex your schedule around them.
  • There is no bureaucracy here.  You will never have to write 6 design documents to be approved by 4 committees before you start writing useful code.
  • We practice continuous integration and deployment (the latter to a staging environment)
  • We are at a 10.5 on the Joel Test and climbing.
  • Not software related, but we’re located in Chicago within walking distance from a train stop.

Who Would Be a Good Fit?

Let me preface this with the important distinction that there is no “ideal software engineer” and there is no concept of “good enough” or anything silly like that. We need to ship code and do it quickly and well, and I’m going to look at a bunch of resumes and talk to a bunch of people and then I’m going to take a leap of faith on a person or couple of people that I think will best compliment the team in its goal of shipping code. That’s really all there is to it. You may be the best developer of all time, and I might get this process and wrong and whiff on you as a candidate, and it’s no shortcoming of yours if that happens. I will certainly try my best not to do that, however.

Senior Software Engineer

So, I will now describe the what I think would make someone the best fit for our group. First of all, I’ll describe what we’re looking for in terms of a more experienced, “senior level” candidate, and I’ll describe it quite simply in terms of what I’d be thrilled if I had someone reporting to me doing and doing well.

  • Contribute immediately to a set of different .NET solutions.
  • Can explain sophisticated concepts to less experienced team members, such as generics, lambda expressions, reflection, closures, etc.
  • Lead by example in terms of writing clean code and explaining principles of writing clean code to other developers.
  • Understand Software Craftsmanship principles like SOLID, unit testing/TDD, good abstractions, DRY, etc, well enough to explain to less experienced developers.
  • Versed in different architectural patterns, such as layered and “onion” architectures, as well as Domain Driven Design (DDD).
  • Taking responsibility for and improving our build, ALM setup, source control policies (TFS), and deployment procedures.  We have a good start, but there’s so much more we can do!
  • Can write ASP and the C# to support it in Webforms or MVC, but prefers MVC philosophically.
  • Understands client-server architecture and how to work within that paradigm well enough to explain it to developers that don’t.
  • Is comfortable with or can quickly get up to speed with REST web services and SOAP services, if the latter is necessary.
  • Is comfortable with SQL Server tables, schema, views, and stored procedures.
  • Knows and likes Entity Framework or is willing to pick it up quickly.

Software Engineer (Web)

The other profile of a candidate that I’ll describe is a software engineer with a web background. Again, same description context — if I had someone doing these things for me, I’d be very happy.

  • Come in and immediately start on work that’s piled up with CSS and client-side scripting (jQuery, Javascript) that improves the site experience for some of our sites.
  • Understands C# and server side coding well enough to implement run of the mill features with normal language constructs without asking for help.
  • Good at hunting down and isolating issues that may crop up when there are lots of moving parts.
  • Is aware of or is willing to learn about and explain various model binding paradigms both on the server (MVC) and client (various javascript frameworks).
  • Has a flare for design and could help occasionally with custom branding and the UX of websites.
  • Not a huge fan of Winforms, but willing to roll up your sleeves and get dirty if the team needs help with legacy desktop applications on some sprints.
  • Up for picking up and running with a more specialized skill to help out, such as working with T4 templates, customizing TFS workflows, experimenting with and leveraging something like Signal R, etc.
  • Some experience with or else interest in learning unit testing/TDD as well as clean coding/decoupling practices in general.

Logistical Details and Whatnot

So therein are the details of what I’m looking for. It seems like I’m flying in the face of billions of job ads and thousands of horse recruiters with this approach, and far better minds than mine have probably dedicated a lot of consideration to how to solicit candidates to come interview and how to put together the right set of questions about O notation runtime of quicksort and whatnot. But still, I feel like there’s something humanizing to this approach: this is what we have to offer, this is what would benefit our group, and perhaps we could work together.

In terms of location, I prefer to consider people local to the Chicagoland area or those who are willing to relocate here, but telecommute situations are not ipso facto dealbreakers. If you’re interested in one of these positions or someone you know is interested, please send me or have them send me an email at erik at daedtech, and we’ll take it from there. I’m not exactly sure when I’ll start interviewing, as there are still some internal details to hammer out, but I definitely wanted to give the blog-reading set of developers and people I know the first bite of the apple before I started going through the more common and frustrating channels.

And, also, in a more broad philosophical sense, I wanted to try to put my money where my mouth is a bit. After taking potshots in previous posts at job descriptions and interview processes, I thought it’d be the least I could do to put my own approach out there so as not to be the negative guy who identifies problems and offers no solutions.

By

Slow Posting Week

This is just a brief announcement that I’m probably not going to be posting this coming week — I forgot to mention it last week. Readers in the USA and perhaps others know that Thursday was US Independence Day, so between the long weekend for me and the fact that I’m currently out of town (pleasure, not business) until late next week, I’m not really planning to write any blog posts. All I have with me are an Android tablet and an Ubuntu Netbook Remix machine, neither of which has a serious IDE, so if I do get time it’ll probably be philosophical more than technical.

Assuming that the blog is quiet this coming week, there is still stuff to look forward to. I’m continuing to write for the unit testing series, and the Expert Beginner E-Book is in its last phase before release — illustrations and format cleanup. So stay tuned for those and other random thoughts.

By

The Weird Winds of Change

This is sort of an announcement post and sort of a meandering jaunt into my own personal journey. Also thrown in will be bits of apology, opportunity, and regret. So, let’s get right down to brass tacks.

A few weeks back, I gave notice at my job. I had come on board with a consulting firm to do heavy architectural work with object-oriented design, mainly in the .NET space, but fate had other ideas. I did a good bit of .NET work at first, but the vagaries of the local market and demand for software work were such that the business was pivoting increasingly toward customizing third party software installations such as Sharepoint, Salesforce, Microsoft Dynamics, etc. Doing simple, run-of-the-mill customization of these pieces of software is certainly good work for someone, but that someone isn’t me, so after biding my time and hoping for more compatible work, I decided to pull up anchor and chart my own course.

Actually, I more decided to shove off in a lifeboat without any oars, sails, or motor because I defied all career advice that I’ve ever received from saner people and just gave notice without lining up another job. There was a method, of sorts, to this madness. I’ve never really liked the way you get another job by slinking around behind your current employer’s back, and I was getting a lot of emails from recruiters, and well, just lots of things in general. In fact, I had reached a bit of a crossroads. I had various opportunities to generate passive income, a good number of requests to do freelance work in a variety of languages and frameworks under the DaedTech LLC umbrella, a lot of different interview opportunities. (I actually got an email about a job opportunity literally as I was typing this sentence.) The one thing I lacked was time. So I shoved off from the mothership, adrift in the night-sea, but with good intelligence that various islands were nearby with bananas and fresh water and friendly, helpful island monkeys and whatever else you see in fantasies where castaways build island paradises.

My intention was to do a bit of gonzo work-seeking. I’d tie up some loose ends and serve out the remainder of my notice time, and then I’d sit back, take inventory, and start the process of deciding what to do next, blogging all the while about my adventures while listening to people heckle me justifiably for being reckless with my career. I thought that would give me some time to deliberate between potentially working for a major tech player, relocating, casting my lot with a start-up, taking a stable local job, or just being the Founder and Principal of DaedTech LLC full time. Maybe I’d turn it into some kind of book and try to trade on the fact that pretty much anyone can get lucky at being a writer these days.

But fate, it would seem, had other plans. Interestingly, on the day that I gave notice, John Atten submitted the first Expert Beginner post to Reddit where it got enough love to rocket to the top for a day or so and drive a lot of traffic to the blog. This resulted in a surprising and awesome variety of invitations that I alluded to above, and it also occupied a good bit of my time keeping up while I wrapped things up at work. Add to this the fact that sending out a few actual resumes to some interesting companies and informing a few recruiters that I knew of my situation generated a good bit of interview activity right away, and I have been insanely busy for the last couple of weeks. Busy in a good way, but busy. Really, really busy.

I kept meaning to get around to announcing my job search with some grand blog post and to follow it up with tales of interviews, applications, and whatever else happens during a developer job search. I figured that I’d use this as a staging point to kick off a heavily networking-based, developer-community-oriented search for my next venture, but I actually wound up taking a job before I had time for any of that (I had actually left the post about job descriptions in my drafts folder for a couple of months–that wasn’t inspired by my situation these past couple of weeks). I got a great offer that was basically impossible to pass up, so I accepted and will be running a modestly-sized software development group starting on Monday, May 6th, doing double duty managing and serving as architect.

With this change, I’m hoping that the dust will settle a bit and my life will resume some sort of relatively normal pace instead of the break-neck speed it’s been at of late. Beside the change of jobs, here are some other new things in the pipeline that may be of interest to those reading:

  1. I am going to be authoring courses for Pluralsight–stay tuned for my first course to come out later this month.
  2. I mentioned it as a quick edit to the first Expert Beginner post, but look for that posting series to be wrapped up and published as an E-Book.
  3. Time to start reading others’ blogs and listening to podcasts again. I haven’t had time in the last several weeks, and I feel so out of touch that it’s a little icky.
  4. Looking to be better about responding to everyone’s comments. I really try to give thoughtful responses to everyone that takes the time to leave a comment, but I’ve definitely been a little lax about this lately, and I’m planning to be better about it.
  5. For those of you who have emailed me or otherwise contacted me about freelance work or joint programming ventures, you won’t be competing with interviews and recruiters and such, so I’ll be better about responsiveness.
  6. Normal posting cadence is Monday, Wednesday, Friday, though I’ve struggled at that pace recently. Planning to get back on track.
  7. Also, look for more programming-oriented posts as I’ll have my hands back in code with a lot more frequency
  8. And, most likely, look for most of this in earnest after Memorial Day. After my first week of work, I’ll be out of the country for a couple of weeks. When I come back, hopefully rested, I also plan to do some non-programming-related reading lest I become too one dimensional.

Thanks for your patience with the jerky post cadence and more rant-oriented, less code-heavy content of late, and most of all, thanks for reading.

Cheers!