NDepend 2017

Anyone working with large software systems knows the difficulties of retaining visibility into those systems. As software solutions grow, it becomes increasingly difficult to retain a clear picture of how the components fit together. In an age of increasingly demanding software consumers it is critical to quickly find and solve problems before they grow. Enter NDepend, a collection of tools designed for deep analysis and visualization of the software solutions you create.

NDepend provides a rich analytic tool set to help gain a deep understanding of your code and monitor the health of a project throughout its lifecycle. I’ve used NDepend in a number of projects on which I consider myself very knowledgeable. NDepend provides pleasant surprises, even within those familiar projects. It’s great to see the new insights I gain when analysing familiar solutions. I can quickly see the structure of my code in ways that were previously unavailable to me.

I recently started work at a new job where I became quickly involved with a number of large software solutions. Cvent have two decades of software, some written in .NET, others in Java, and a solution here in our Portland office written in Ruby. I’ve been a polyglot developer my whole career, but switching between so many large code-bases through the course of a working week means I need tools to help me maintain a working mental model of the structure of the various solutions I’m working with.

One of the first things I did upon returning to Cvent was to fire up the new NDepend 2017 and point it at one of the larger core code-bases I needed to learn. Many of my peers have worked at Cvent for several years. They are very familiar with the structure of the solutions they manage. It was important I ramp up quickly to extract as much as possible from conversations regarding solution structure, integrations, and refactoring.

As with most projects of any reasonable size and age, the documentation is either lacking or out of date. There are a few high level class and interaction diagrams kicking around, but with a few hundred thousand lines of code and solutions containing tens if not hundreds of projects, it can be hard to know where to start. NDepend’s heat map, overview dashboard, and dependency graphs helped me to quickly learn the lay of the land.

Integration with Visual Studio

Once an interesting relationship or piece of code is located, a double-click brings up the relevant file and method directly within Visual Studio. This is a great way to navigate between a high-level view of the system architecture directly into the details of a class or method of interest. Moving back and forth in this way between the abstract models of a large system then into the details of the most interesting modules helps build familiarity much faster than simply reviewing each module line by line.

It didn’t take long before my peer architects were asking whether they could get access to the tool. “Those navigable dependency graphs are awesome!” said one architect, looking over my shoulder as I merrily skipped around different modules, tracing paths through the architecture.

Dynamic Queries

At its core, NDepend is a database that automatically indexes everything about the code you write. The solutions analysis stores and indexes information about aesthetic, technical, and architectural metrics. Dashboards and reports present the data in a variety of useful dashboards and reports. Examples include the number of lines of commented code, the number of parameters received by a method. Additionally there are more complex architectural metrics such as afferent and efferent coupling.

Dynamic queries, written using CQL (Code Query Language), drive many of NDepend’s visualizations. Tailoring these queries to your liking allows for customization of NDepend’s reports to your own coding standards and guidelines. It’s a powerful mechanism for rooting out areas of the code that might otherwise be difficult to uncover.

Rule Sets

NDepend ships with predefined rule sets. These rules are used to analyse code and provide feedback on areas of concern. The rules are built using the CQL and can be customized by the development teams that rely upon them.

Delegating a part of the task of reviewing code quality to an automated process can help to avoid having that feedback taken personally. A team that votes and agrees upon the rules and standards they hold themselves to can codify those standards as a rule set. When the automated analysis highlights violations to those agreements there is a clear statement about what needs to be done. It also avoids the costs involved in having humans perform such mechanical tasks.

Trend Analysis

A snapshot of code quality is useful for quickly generating a list of issues that can improve quality. However, it doesn’t give a great sense of how the code is improving, or worse potentially devolving, over time. By measuring the trend of the code it is possible to estimate how long it will take to pay off a particular type of technical debt. Think scrum velocity measures but for code quality.

Trend analysis takes results from different analysis runs and allows you to visualize how the quality of your software is changing over time. NDepend trend monitoring is driven via the definition of a set of trend metrics. The technical team defines the rules for technical debt and quality gates. The team controls how the quality is measured. This increases the sense of ownership in trend analysis and monitoring. Relying upon an customized automated tool to provide this feedback saves precious developer hours for the more important task of writing the software. This also provides architects and team leads with feedback on how their engineering initiatives are affecting the overall quality of the delivered solution.

Learning Your Own Code

NDepend is a rich tool with a vast array of features for measuring and monitoring code quality and structure. As with any tool it can take time to learn about all of the capabilities and master their use. One of the best things about NDepend is how quickly even the initial analysis adds value. Whether I’m learning about a new piece of code or working on familiar software I’ve maintained for years, NDepend always shows me something new. You can never know too much about the structure and dependencies within your code.

I highly recommend NDepend to any software architect or senior developer who wants to understand their software more clearly. Understanding the structure of your code is the first step. Monitoring the quality journey it takes through every commit and pull request takes that to the next level. Professional effectiveness can depend upon having the right tools at hand. NDepend is definitely one you’ll want to have in your architectural bag of tricks.

The complete list of changes is available here: http://www.ndepend.com/ndepend-v2017

Disclosure: I do not work for NDepend or Zen Program Ltd. I received an evaluation copy of NDepend for my review.

Posted in .NET Framework, Technology, Tools | Tagged , , , | Leave a comment

There and Back Again

I have rejoined Cvent to help guide their Portland group as part of their software architecture team. Cvent provide world class solutions for planning and managing events across a wide variety of industries. My role is to guide their software development efforts and help set technical strategy.

Taking a Break

Before I came back I did something I haven’t done in two decades. Not since I first entered the software industry have I taken a break between jobs. It sounds silly, but I just hadn’t ever found a good opportunity to take a break so I just kept on going…for two straight decades. We’ve taken  vacations here and there, and had several great adventures, but I’ve never taken anything resembling a sabbatical and certainly never took time between jobs before. I’m really glad I did. It made the world of difference.

Posted in Work | Leave a comment

Hiking in Silver Falls

This Sunday we drove down to Silver Falls State Park for a family hike. It was the perfect weather for it, not too hot and not raining! Since it was Rowen’s first real hike (woohoo!) we decided to take an easy route to start and go from there. She ate up the first loop in no time, and soon we were faced with the choice of heading back up from South Falls to the lodge and being done by noon, or pushing on to Lower South Falls and facing the arduous switchback climb up Maple Ridge. Anyone who has done that loop knows that while the distance is a very manageable 4 miles, it’s the ascent that gets you, especially when you’re a four year old with little legs. Rowen took it in stride. Apart from some stops for snack breaks on a couple of benches she just kept on plugging up the hill, red-faced and rosy-cheeked, but smiling and laughing the whole way. We were very, very impressed.

Rowen at Silver Falls

Rowen standing at the top of South Falls. This is the start of the hike, just down from the lodge.

South Falls

The impressive South Falls waterfall.

Stu at South Falls

Yours truly, smiling at the start of a great hike.

Silver Falls State Park

Rowen and Meaghan investigating monster caves behind South Falls.

Playing in the stream

Playing in the stream.

Silver Falls Hike

A throne fit for a queen. Rowen theorized that this could be used for her castle.

Lower South Falls

Celebrating our arrival at Lower South Falls. It’s a steep descent in places and despite having cobbled steps, it can be quite slippery. Rowen was happy to be down. We hadn’t told her about the impending “up” yet. 🙂

Silver Falls State Park

“I’m building a fairy house, Daddy!” Rowen loves collecting things along the trail to build houses with.

Silver Falls State Park

Using her fishing pole (a stick she found) to catch fish in a nearby stream. This was very near the end of our four mile journey, so we stopped on the bridge to play for a while and enjoy the lovely day.

We’re definitely going to be doing more hiking this summer and I’m excited that Rowen had such a good time. When we were finished with our loop and eating sandwiches at the lodge, she asked if we could go on another hike this same day! I’m super impressed, baby girl. Well done!

Posted in Walking | Tagged , , | Leave a comment

Walks in the Park

One of our favorite family traditions are our weekend morning walks. Every Saturday and Sunday, Meaghan, Rowen, and I get ourselves out of the house right after breakfast to take advantage of the lovely early morning weather and the best part of the day’s energy. Rain or shine we can be found doing loops of our favorite local parks and nature reserves.

This morning we had a lovely time at the Tualatin Hills Nature Park.

Posted in Health, Uncategorized, Walking | Leave a comment

Terrible Experience with Frontier Communications

After moving in to our new house, Meaghan and I of course wanted internet service. Having heard some positive things about Frontier, and enticed by their 150/150 FioS service we decided to give them a shot. What transpired was an awful experience spanning over two weeks and involving over ten hours of wasted time. The installation didn’t ever get completed.

It all began with a rather normal phone call to their sales department. I described the services we wanted and we scheduled a date for installation. I was a little disappointed at the nine-hour service window, “we’ll be there somewhere between 8am and 5pm”, but they agreed to come on a Saturday so we just resigned to being home for the day.

First Failed Install

The technician never showed up. We got a phone call on Saturday morning indicating that there was a problem with our order. Apparently the salesperson reactivated service for the previous homeowners instead of setting us up as a new account. An hour on the phone with a customer service rep and we had a new installation date of Tuesday. We’d now been without internet service for a week. Tuesday was another nine-hour service window, but Meaghan kindly agreed to be the one to stay home.

Second Failed Install

At around two o’clock we got the phone call to say that the tech was fifteen minutes away. Unfortunately, upon arrival we found out he was the wrong kind of tech. Apparently he can only do copper cable service and since we’d ordered their optical fiber FioS service there was nothing he could do. He confirmed that the order clearly stated fiber optic service, gave some story about dispatch making a mistake and drove away.

I then spent the next two hours just trying to get in touch with their customer service. I was bounced between three different departments each with a twenty minute hold period. The last person I talked to explained they couldn’t help me, said they would transfer me to a fourth person. I was cut off during the hold while being transferred. That’s when I took to twitter:

It turns out that @AskFrontier actually wanted to help. Unfortunately they clocked out shortly after 4pm PST and said they would continue in the morning. By now I was pissed, and I made it pretty clear:

Fuck these guys. Seriously. They are a terrible company to work with. I spoke with “Bill” the next morning (when he finally actually called me back) and basically told him to scrap the whole order.

The conclusion is that we called ComCast who sent out a technician and had us up and running within 24 hours. They arrived ten minutes into the one-hour window of 10:00-11:00 as promised and were thoroughly professional. Very well done, Comcast.

What could Frontier have done differently?

Everyone makes mistakes. I understand that. However, here is a company that has screwed up our order twice and instead of going the extra mile to help us out basically pushed us off as though they didn’t care. On the Tuesday where the wrong tech showed up and I wasted half of my afternoon on the phone, all they would have had to do is either call me back right away or send out a technician that evening. Pay the guy for an hour of overtime, get us some fiber service and you’ve won a customer for the next four decades. Instead they treated us like garbage and I won’t forget it. If you ever ask my advice about whether to work with Frontier on anything, immediately assume that my answer is NO.

Feedback as a Sales Opportunity; A Despicable Practice

Frontier contacted me this morning to ask if I would complete a survey reviewing the service we received. To add insult to injury they used both the email content and the landing page for the survey as an opportunity to up-sell new services. I had to close two pop-up overlay dialogs just to get rid of the ads for new service that were thrust in my face. Seriously, fuck these guys.

Here is the content of the review I submitted:

I had a terrible experience. Two failed attempts to do an install.

Attempt #1: Order was entered wrong by sales. Instead of adding us as new customers, they instead reactivated services for the previous house owners.

Attempt #2: Wrong technician was dispatched. Copper technician came for fiber install.

Both days completed wasted due to an 8 hour install window with only 30 minutes notice of arrival.

Wasted many hours with customer support on the phone, on email, and over twitter: https://twitter.com/AskFrontier/status/745381628575285250

Complete waste of time with this company. Would not want to ever work with Frontier again.

ComCast completed the install for us within 24 hours, with a one hour install window. Wanted to give Frontier a chance but got to say that their terrible customer service made ComCast look amazing!

Conclusion

I had a terrible experience that left an awful taste in my mouth. I in no way felt special in my dealings with Frontier and they have soured any relationship we might have moving forward. I would highly advise anyone working at Frontier with a vested interest in their future to review their customer support, sales, and dispatch service departments. They need a lot of work.

Posted in Technology, Uncategorized | Tagged , , | Leave a comment

New Job, New House

I didn’t get a chance to post this yesterday, so I’m going to do so now. As an addendum, my first day with CrowdCompass went great. I was so busy and by the end of the day my brain was so full that I just zoned out on the ride home. Met a ton of great people and absorbed a large amount of new information. More fire-hose drinking today, I think.

We sign away out house this evening. I’m going straight to the broker’s office from work. Then it’s just a matter of a few days before we sign the paperwork for our new house. It’s all moving very quickly, but I’m happy to report that everything continues to go smoothly.

from yesterday:

This morning I’m riding the MAX downtown to start my first day at CrowdCompass. I’ve had a gret few days to unwind and relax since I left ARRIS. I enjoyed spending a few days with my family, reading books, playing games, and generally just unwinding. Of course with the pending house move and a desire to study up for my new job it hasn’t all been leisure and play, but sufficient to help me feel relaxed and ready to go.

The house move is coming along well. We’ve passed both inspections and appraisals now. All that remains is to sign the closing paperwork and move all of our stuff. We’re hoping to be all moved in by the middle of June. It has been an enjoyable process so far. We’ve encountered very few headaches and been fortunate enough to avoid most of the pitfalls buyers and sellers seem to run into. I think we read the market pretty well and I felt a lot more prepared this second time around.

The new house is beautiful. Both Meg and I are very excited about the location. It is very close to a number of greenspaces, some great schools for Rowen, and still provides a good commute downtown for me. We have gained a great yard with plenty space for Rowen to play, and a nice outdoor grilling space where we can sit and enjoy some outdoor meals this summer.

On the inside there is enough room for us all to create the living spaces we would like. Meg will finally get a dedicated craft and art room and I have a lovely adjoining space for my piano. It’s a great win for us and we’re very excited to move in and get settled.

The new job is going to be a great challenge for me. It’s in an entirely unfamiliar technology stack. I’ve worked most of my career on Windows in the Microsoft suite of software development tools and technologies. This is in completely the opposite world. I’ll be developing in linux and on a MacBook Pro in Ruby, Go, Python, Java, Android, and iOS. Rather than the Azure cloud host I’m more familiar with it will be hosted with Amazon Web Services. While this may seem like an odd move, I’m completely excited to start developing in a completely new suite of technologies. Many of the fundamentals transfer in their entirety so it’s not like I’m starting completely from scratch and I’ve already come up to speed on some of the new stuff in just the few days I took off between jobs. Cloud principles between Azure and AWS are very similar and both Ruby on Rails and Web API host REST web services in similar ways. There will be a lot of learning around frameworks and best practices but I’ll come up to speed quick enough. I love learning new things so the excitement alone of diving into something I don’t know will carry me through.

The new commute will take a little getting used to. I was used to a 15-20 minute drive to ARRIS. This new ride will be about double that but the majority (30 minutes) will be on public transport. I’m hoping to capitalize on that time to get some work done and perhaps even write here a little more often than I have been. 🙂

I have some work to do yet on determining which MAX station I want to catch the train from. While the stations closer in take a little less time to get there, by catching a train a little further out I have better options for parking and a better chance of getting a seat. I’ll have to experiment with different stations and routes to see what works out best and might just change it up once in a while to keep some variety in there.

One option I’m curious about is riding my bike to the Sunset Transit Center. I’m nervous about leaving my bike at a public transit garage, just because I’d hate for it to get vandalized. I’m also nervous about the fact that I’m not eighteen any more and don’t have the same stamina I used to have. It would be about a five mile ride, which isn’t that far on a bike but is still a fair slog compared with the cushy “drive everywhere” lifestyle I’m accustomed to. I’m sure if I just slogged through it for a few weeks that I’d get into the sort of shape that doesn’t consider it to be a slog. I’ll have to test out the route and see how many busy roads it involves. I’ll be much more inclined to consider it if it’s on backroads more than busy highways.

Posted in House, Uncategorized, Work | Leave a comment

Vacation (kinda)

I took a few days off between Arris and starting with CrowdCompass. Since we’re already planning to travel in July and are just finishing up buying a new house, we didn’t plan to go anywhere. I’m just taking the days to unwind a bit, help around the house while I can, and study up for my new position. I’ve got a stack of books on my desk that I’m slowly working through and I’m practicing on my Mac and Ubuntu machines to get my linux muscle memory back a bit. I’ve used them in the past for development, but it’s that day-in-day-out twitch memory that will take a little bit of time to come back.

In addition to the OS I’ve giving myself a primer on Ruby, Python, and AWS. All technologies I’ve poked at in the past, but areas that could also use some refinement and practice. It’s rewarding to be learning new things again and I’d forgotten the fun of just building basic algorithms in new languages.

Tomorrow will be my last day before I start fresh with the new job. I’m feeling fairly well prepared and ready to go. Never seems like long enough when you take time off though. I could always use “just one more day.”

Rowen has enjoyed me being here a bit more. We’ve got to spend some time together during the days and go out on a few more family dates than usual. I’ll likely be busy for these first couple of months while I get myself established in my new role so it’s good for us to get to spend a bit of time together now.

Posted in Family, Uncategorized, Work | Leave a comment

Heading in a New Direction

Four years ago when I joined Arris it was at the beginning of a turnaround. While the corporation itself was a behemoth, the group I joined contained only a handful of people. Since then I’ve watched it grow to more than a hundred people spread over more than ten sites across three different continents. I’ve learned lots of new technologies, met a ton of great people, and made several solid friendships that will live on long beyond my tenure. I helped deliver two solid cloud-based solutions that have the potential to drastically improve the experience of the individual cable subscriber over the coming years.

However, all things come to an end and so it is with my time there. A lot has changed since I joined and for the last few months I’ve felt that I needed to make a change. I’ve always believed that if you aren’t having fun with what you’re doing then it’s time to change something so I updated my resume and began the process of getting myself back into the market.

Portland is a great town and it didn’t take long at all before I was knee-deep in conversations about several exciting opportunities. I can safely report that the technology industry here in town is alive and well. I had the privilege of touring several great workspaces, meeting their teams, and learning about their business, and I thank everyone I met for taking the time out of their schedules to entertain the possibility of me joining their teams.

crowdcompass-logo

I am now proud to announce that next week I shall be starting a new career with CrowdCompass.I had a phenomenal recruiting experience from start to finish and the more I learned about their business and their people, the more I got the sense that this was absolutely the right move for me. CrowdCompass provide turnkey solutions for event management backed by cutting-edge apps for modern mobile devices. As soon as I saw the offering I could see the value it would have added at several events I’ve attended and my brain soon started seeing the possibilities for new ways it could be extended even further. I’ve got new technologies to learn, a new team to meet, and I couldn’t be more excited to get started.

I’m taking this week to unwind, relax, and prepare myself for my new role. I’ve got a stack of books to read, a backlog of professional snooker to watch online, oh and a house move to plan (did I mention we bought a new house, too!) so it should be a nice relaxing few days. More to come on the house. For now, I’m excited to tell everyone about my new professional role and live in that special space “between jobs”.

Posted in Events, Programming, Rails, Ruby, Technology, Uncategorized, Work | Leave a comment

Open House Weekend Away

We listed our house for sale on Thursday this week. In just three short days we’ve had a fantastic amount of activity. Our realtor, Sara Gray, has been superb in helping us through the process of getting our home ready for sale. She recommended hosting an open house on both Saturday and Sunday afternoon for which Meg, Ro, and I packed up the cats and checked into a luxury hotel in downtown Portland. While a train of people have been busily viewing our house, and hopefully preparing massive cash offers, we’ve been enjoying the sights and attractions in the city. The hotel have been incredibly welcoming of our two cats, Dougal and Lucy, and even added their names to their greeting sign out front. Shortly after check-in they delivered a pet bed, a cat toy, and some other useful pet maintenance items. Much appreciated by two travelers who have just spent a few hours in the car with two crying cats and a three year old. Our arrival reminded me how much I appreciate both valet parking and bellhops.

  

Friday night was capped with a great meal at Rock Bottom. Within walking distance of our hotel, Meaghan and I took the opportunity to enjoy a few well-earned drinks (well, we think so!) while superstar Rowen ordered a build-your-own ice-cream sundae. We pretty much collapsed into bed right afterwards. The cats weren’t exactly happy to be in the bathroom all night, but it was a big improvement over their mini-jail-cell cat carriers and Lucy quickly appreciated the cat bed that the hotel loaned to us.

  

We started Saturday morning with breakfast at Mother’s Bistro where enjoyed pancakes, bacon, and hot cocoa. Definitely the start to the morning that we needed. We had a big day of adventure ahead of us. Since Rowen had never been to OMSI and since our hotel was just across the Hawthorne bridge we decided this would be a great opportunity to introduce her to the joys of the Portland science palace. Drink up that hot cocoa baby girl and prepare for your mind to be blown!

  

OMSI was full of its usual magic and was magnified more so when viewed through Rowen’s fresh perspective. One of our favorite areas was a sand pit that used a clever combination of a camera and a projector to overlay a topographic display upon the sand. The camera sensed the depth of the sand while the projector lit the surface with an accurate topographic representation. Digging valleys and piling sand into mountains, caused the topography to update in near real-time. Rowen very quickly understood the actions necessary to create islands, bays, and finally, as a special project, her volcano.

  

Our Planetarium show, Laser Robot Rock, was a brand new experience for all of us. I’d actually expected the explore-the-universe style shows that I’d seen there in the past, whereas this was a laser show accompanied by kid-style techno music. Not what I’d gone in hoping for but we had a good time nonetheless. Rowen was just thrilled to be there with us and was pointing out every time a new color or animation appeared on the huge overhead dome. We definitely have to go back for the moon and stars one though, if not just for me but because I spent most of the morning preparing Rowen for what she was going to see and now I feel I should really deliver. Oh, and yeah, because it’s my favorite thing at OMSI. That too.

  

A few hours later and we were pretty worn out. Time to head back to the hotel and rest for a bit. Our suite was very comfortable and provided ample space for us each to have our own area. Rowen invented a game wherein she could only step upon the orange hexagons found in the carpet design. Every few tours she would stop and dance in the mirror. She’s such a happy kid. The cats weren’t quite as in love with their accommodations, but given the alternative of sitting in their pet carriers while we drove from open house to open house it was certainly a tolerable option. Fortunately they both adapted fast enough to use the litter box right away and didn’t create any messes for the whole weekend. Thankful for little wins here.

  

Rowen’s sofa bed actually turned out to be more comfortable than our master bed. You never know what you’re going to get with a +1 sleeping arrangement in a hotel room but the Hotel Monaco knocked it out of the park. Rather than using the sofa cushions for the mattress, the entire base of the sofa folded out similar to the sleeper sofas in hospital postnatal care rooms (for those of you who have had that experience). Excuse the messy bed in the shot below (sorry, Meg). Didn’t take the chance to capture this first night and checkout came around far too quickly this morning.

  

Tonight as I type up the tales from our adventures I’m eagerly awaiting a call from our realtor hoping for good news about an offer on our house. We’ve had various snippets and updates from Sara as the weekend has progressed but we’re just now at the point where we need to decide. Last I heard we had a solid offer for a few thousand over our initial asking price. There have been rumors of a larger offer in the wings, but so far no confirmation. I’m happy to see that we got so much activity and honestly I’d be happy to get our asking price. That said, I’m understandably a little nervous. This is a big life decision and not one we undertake lightly. Fingers and toes crossed for good news!

 

Posted in Family, House, Travel, Uncategorized | Leave a comment

Progress towards the core

This shot of the galaxy map shows my progress towards the galactic core. The red icon marked Ida Dhor shows my home base in populated space, whereas the blue marker indicates my current location in the galaxy. I’m guessing I’m about a third of the way there.

If I were to take a direct route without any sightseeing I could probably make it in another week or so of play, but where’s the fun in that? With the sort of distractions that require investigation in a galaxy so filled with wonder I’ll be lucky to make it before the end of April!

Posted in Games, Uncategorized | Tagged | Leave a comment