How to Select Software Engineering Tools without Inciting Team Rebellion

Lately I've been thinking a lot about how we choose the tools we use to build software, and how important those choices are. I figured it might help others if I wrote down my own thought process for selecting development tools, so I published this post on Medium: "Choose Your Weapon: How to Select Software Engineering Tools without Inciting Team Rebellion".

This was my first post on Medium where I received help from others using their editing tools. Reviewers can add private comments using the same mechanism that reader use to make public comments. I received some great ideas from Tyler Fitch, and wording advice from my wife. The collaboration features worked great, although my wife missed the power-tools for tracking changes offered by Microsoft Word. This is also the first time I wrote the whole post in Medium, instead of saving drafts elsewhere then pasting it in, so I must really trust their editor.

Thus concludes my obligatory annual blog post. At this point I'm just writing on Medium and using my blog for editorial. Am I doing it wrong? Also, if you have any thoughts about selecting development tools, I'd love to hear them :)

PDX Tech Talks Monthly #5 - PADNUG

It seems like most tech meet-up enthusiasts have a favorite group. It’s the one you go to most often. The one where they talk about the tools and techniques you use every day to get your job done. It’s your go-to group, your community. For the last several years, my go-to group has been PADNUG, the Portland Area .NET User Group.

Microsoft’s .NET programming framework is used quite a bit locally, especially in enterprise software companies. Many of those companies are on the west side of Portland’s tech scene (i.e. Beaverton & Hillsboro), so PADNUG is conveniently hosted at Intel’s Hawthorne Farms campus, mere blocks from my work. Intel kindly lends us one of their huge auditoriums, and it’s an awesome facility for speakers and large audiences. I usually attend a few times a year when I see a particularly intriguing topic. Last week I was in luck. Xamarin was in town.

PADNUG crowd at Intel's Hawethorn Farm auditorium

The Event - PADNUG (Portland Area .NET User Group)

Last week’s PADNUG topic was Xamarin, a company that helps .NET developers deploy their apps on all sorts of devices. Microsoft certainly makes it easy to write C# code in Visual Studio (the Cadillac of IDE’s) and deploy to a Windows PC or Windows Server, but what if you want to build an iPhone or Android app? Not to worry, Xamarin offers some cools tools that allow you to compile C# code so it runs on your phone as if it was written in the "indigenous language" (Objective-C for iPhones, Java for Android).

Bryan Costanich talking about code reuse

The speaker was Bryan Costanich, Xamarin’s Director of Education. Dude is also listed in IMDB and just kick-started a movie called Slumptown. He’s a great presenter who also happened to be on the Windows team back in the day, although he now slangs code on a MacBook. Bryan started off strong by demoing an app he wrote for his watch. His Agent Watch, built by the makers of Netduino, runs the .NET Micro Framework. He also wrote an Android app for his phone that communicates with his watch over Bluetooth, sending it notifications (e.g. "Destroy Mr. Bond!"). Both apps were written in C# using Xamarin’s tools. It was an intriguing proof-of-concept. See his full write-up about it here.

Hold up though, why is it cool to write in one language and deploy to a bunch of different devices? Does that just mean you’re too lazy to learn the tech stack native to each platform? Bryan did a good job of describing the benefits of code reuse, but warned against the desire to "write once, run anywhere". He mentioned that popular tools were built with that goal in mind (PhoneGap was mentioned), but it turned out users didn't always want the exact same app on every device. The major phone platforms (iPhone, Android, Windows Phone) each have their own unique design languages, user experience metaphors, and capabilities. For example Android has a native back-button that apps can use, but iPhones don’t. Xamarin's solution is to offer a custom C# library for each device that leverages that device’s unique assets and capabilities.

Here’s Xamarin's suggested architecture for using their tools to build apps:

Xamarin's recommended architecture

Xamarin's recommended architecture

Common libraries are shared (e.g. a SQLite adapter), and then you write a custom UI for each device. It was a well-articulated vision. I think folks were interested because they are being asked to port their company’s app to all the cool new phones and tablets, and Xamarin definitely offers one solution for that challenge.

Who I Met

PADNUG is well attended by local .NET recruiters. If you need help growing your team, or if you’re a .NET dev between gigs, PADNUG is great place to network. I met Scott Patton, an energetic new recruiter at TEKSystems. I also met Ken Westin, a car enthusiast who has driven a Corvette with an experimental heads-up display (surprisingly useful at high speeds!). After the event I spent a long time chatting with Santos Cash about Internet of Things trends. Santos feels like Android is going to be a very important IoT platform, and is interested in helpful things we can do with all the personal data our devices collect.

What I Learned

Should we be trying to write all of our apps with one set of tools, in one language? Should I find a similar toolkit that allows me to write all my apps in C++? JavaScript? Well, I think there’s definitely a case to be made that folks become very proficient with one particular language and framework, and it’s understandable if they want to leverage those skills on lots of devices. Xamarin allows C# experts to write iPhone apps without having to learn Xcode and Objective-C, and it’s nice to have that option available. I've heard of architectures where separate native apps are built for the main platforms, but all use a common web service to fetch data. Xamarin offers a slightly different approach that allows code sharing at a deeper level: the apps’ native business logic.

Wrap Up

It’s good to have a go-to tech meet-up full of folks who build great software with the same language as you. It helps you to discover options and best practices for your preferred platform. Portland also has meet-ups for Java, JavaScript, Objective-C, Python, Ruby, and Node.js (am I missing any?) that I hope to visit in the next year.

Next Month

Wow, next month seems a long ways away. Why wait? It looks like the pdxdevops folks are planning to meet next Monday at Cloudability to talk about Ansible and other IT orchestration tools. Sounds interesting!

PDX Tech Talks Monthly #4 - Thing Tuesday

I’ve heard a lot about the Internet of Things (IoT) lately. Entrepreneurs were buzzing about it at PDXTTM #2 and referenced it in a product pitch. My co-workers are buying Raspberry Pi’s (credit card sized computers) to hack on. Analysts are predicting that 6 billion devices will be internet-connected by 2015, and will soon surpass the world’s human population of 7 billion. Something very disruptive is happening, and I wanted to learn more about it.

Luckily, as with most interesting technologies, there’s a Portland meet-up for that! I attended my first IoT meet-up last Tuesday, and my mind has been full of ideas ever since.

Thing Tuesday crew assembled at Puppet Labs

The Event - Thing Tuesday

Thing Tuesday gathers every month or so and consists of "show and tells" given by local folks who make IoT devices. Last week five presenters covered a wide variety of IoT topics, ranging from sales pitch advice to stories about soldering.

Frank D’Andrea from Tater Tots Designs kicked things off with the cautionary tale of pitching a "Smart Blender" idea to a major appliance company. Frank commented on the lack of established protocols defining how "smart devices" should communicate. He also warned that large appliance companies can take a very long time (2+ years!) to approve a project proposal. The margins are very thin in consumer products, so they don’t have much budget left make your iPhone a remote control for your blender. Frank thinks it’s still early days for IoT, so you may need to build things like the communication layer (HTTP in this case) yourself.

Two consultancies from neighboring cities described their services. Both helped local start-up VendScreen launch its product. The first, Rigado of Salem, helps with firmware design. They can turn your idea into a functional prototype for around $10-20k, which you can then show investors. Rigado also handles the paperwork to get your product approved by the FCC. The second consultancy, RelianceCM of Corvallis, is a "Contract Manufacturer." They help turn your prototype into a real product, and can crank out 10,000+ units for you. They’re financially incentivized to make your product a success, so they help you lower production costs and select the best components (e.g. ones that aren’t already obsolete). 

MacGyver!

MacGyver!

The most in-depth and enthusiastic presentation was given by Dr. Alan Campell of NW Vineyards. It’s difficult to describe Alan’s specialty. He holds several biology-related degrees and uses various technologies to analyze vineyards. I like to think of him as "Wine MacGyver". He explained how, after four months of effort, he assembled and then buried several Wi-Fi connected, sensor-packed devices in a client’s vineyard. The devices track soil moisture, temperature, and other fun facts then report that data back to the cloud. This helps vineyard owners decide when to prune the grape leaves, harvest, etc. He built the devices using a hardware platform called Waspmote. Soldering, PVC pipe, and Wi-Fi signal boosting were also involved. To Alan, the hardest part was writing the code to send the data back to the central server. Even Wine MacGyver had to find a programmer to help build that piece.

Who I Met

I met Scott Schaus who works at GlobeSherpa. I just recently read about their app’s debut, and they already employ 12.5 people! Andrew Voss told me about his start-up and how much he enjoyed working out of NedSpace. I also met Chris Schuermyer who, like me, has a software background and wanted to learn more about the hardware side of things.

What I Learned

Local folks are very interested in the IoT idea. They’re trying to solve some basic problems. I learned a lot from the types of questions they asked:

  • Which hardware platform should I use? Raspberry Pi, Arduino, Yocto?
  • How should my Thing talk to the internet? Wi-Fi, Bluetooth, 3G, LTE?
  • How can I lower the power consumption?
  • Where do I store all the device senor data?

Wrap Up

The Steves

This meet-up reminded me of what I’ve read about the Homebrew Computer Club, the computer hobbyist user group where the Steves (Jobs and Wozniak) famously demoed early Apple computer prototypes. Just like that inspiring time in the mid-seventies, low cost off-the-shelf components are coming to market that enable tinkers and hobbyist to piece together innovative new ideas.

Building an IoT product seems possible with some research and plenty of elbow grease. It’s like plugging Lego pieces together. Granted, today’s IoT Lego set is for advanced users, but it’s getting easier. I’ve been interested in the Quantified Self concept, and IoT seems to enable a Quantified World. I need to do some more research, and I’ll share some links with y’all in a future blog post. 

Next Month

I’m not sure yet which PDX tech event to attend in August. Maybe I’ll check out pdxdevops or Mobile Portland. If you have any suggestions you should definitely let me know! I’ll owe you one :)

PDX Tech Talks Monthly #3 - PDX Selenium User Group

When I discovered Portland has a meet-up dedicated to Selenium and test automation, I was interested. Then I noticed they were meeting in Jive’s cool office downtown, and became double interested. Selenium is a popular free tool used to automate website testing, which folks on my team have started evaluating. The Jive office was recently featured in big budget Tech Town Portland video. Yes, it’s the one the cameras flew around in a drone helicopter. Needless to say I was excited to check it out. 

Chris showing us some test results

The Event – PDX Selenium User Group

Attending a user group for the first time is very enlightening. These groups attract local experts who share enthusiasm for a particular technology. It’s fun to swap stories with peers about how your company is using a tool or language. For me, it was impressive to see how many people from local companies were involved in and excited about automated testing.

The first speaker, Chris Cowell-Shah, described how Jive used Robot Framework to create a suite of tests for their browser-based product. The framework allows you to create simple keywords that can be used to execute Selenium tests (and other things). It’s supposed to make writing tests easy, and apparently it works, as Chris noted they’ve amassed a huge number of tests.

The second speaker, Jive alumni and current Nike-er James Lee, described a custom test framework he built for Jive. His tool measured things like page loading speed and the size of JavaScript included on each page. When pages suddenly slowed down or became huge, his test noticed the problem and the developer was alerted to investigate. Apparently Jive’s customers love fast web pages, and accidentally slowing them down is not an option. James approach involved some serious code and fun statistical concepts like standard deviation measurement and outlier elimination.

Who I Met

I chatted with Pedro Perez de Tejada who works downtown at PreCash. Pedro recently moved up from San Francisco to lead an automated testing initiative that makes use of the Robot Framework. He’s a big fan of the tool and loves how it enables non-programming types to write tests. I also talked to the event’s co-organizer, James Eisenhauer, who commented on the trend of consultant groups forming that specialize in test automation (e.g. event sponsor Sauce Labs).

What I Learned

Chris pointed out that maintainability is a big concern when it comes to programmatic tests. His team ended up wishing they had fewer tests that were more focused. Both James Lee and Chris mentioned that a certain percentage of the time, Selenium tests fail for no easily discernible reason. They said it’s tough to make the tests 100% reliable and instead focused on mechanisms to re-run when strange Selenium failures were detected.

I also learned that all web browers record useful stats like how long it takes for JavaScript to load, when the page becomes visible or clickable, etc. There’s a standard way to retrieve that data from the browser for analysis.

Wrap Up

Automated testing can be very useful and lots of local folks are doing it. If you’re interested in getting started with Selenium or improve your existing test suite, you should definitely check out this meet-up.

Next Month

As I mentioned last month, I think “The Internet of Things” is a tech trend with a lot of momentum. Apparently theirs a meet-up for that: Thing Tuesday. Awesome! I’ll try to check out their next event on July 9th at Puppet Labs.