The Bestest of Practices

“It is possible to commit no mistakes and still lose. That is not a weakness; that is life.” Jean Luc Picard

Hot take incoming – I’m not a fan of best practices.

Let me back up.. I’m not a fan of the overuse of the term ‘best practice.’ Oftentimes, it’s a lazy appeal to authority and short circuits conversations that are intended to result in opportunities for improvement. When abused like this, it’s about as meaningless as claiming something is ‘common sense.’

Rather than referencing a crib sheet of recommendations or release notes without context, I think it’s important to cultivate the conversation and what you’re attempting with a particular approach and consider why you’re doing something in the first place. Did you just copy pasta someone else’s code without really understanding it? Do you know why it works? Do you know what you’re trying to achieve? Did you really need to indulge in yet another refactor or are you just doing tech for tech’s sake or maybe finding excuses to defer deployment? Could you have just ‘used a pencil?’ (More on useful apocrypha later)

I get it. We’re all learning. Having an enabler for our crazy ideas is reassuring. We all second guess ourselves at times and having some rule book or sacred text that affirms our approach as more than ‘just good enough’ is comfortable. What I’m suggesting is that it’s easy to cede your own judgment and pragmatism by just following suit with what everyone else is doing. We owe it to ourselves to frankly engage with our peer groups early and often to ask questions while still retaining ownership and responsibility for what what we build. Without this, today’s best practice can just as easily become tomorrow’s bad habit.

Here are few lessons I’ve learned along the way:

Preoptimization – Know what you’re optimizing and why

This is one of my first experiences around ‘unlearning’ what I was taught. When I was a wee first year dev, I was so excited to embark on my career and build useful things. One of my very first tasks on my very first project was to build out a data model for a new app. I spent a non-trivial amount of time diving into the options around specific data types for various columns and choosing the most efficient option based on the existing requirements.

The feedback I got in this case was that it was ok to just use the default datatypes for now and save the optimization for a later version or if it was identified as necessary for performance. What was more important to focus on at the time was getting the basic foundation in place so that we could start working on features. Sure, optimized datatypes are efficient and important at scale, but just not vital enough at the time to merit too much focus.

Gold plating – Voluntary Scope Creep

Speaking of focus, how many of us have spent time building something that seemed like a good idea at the time but no one really ever asked for or actually wanted? It’s easy to do this when you’re working on a feature and we start making assumptions or predictions about what users want or need. Sometimes we justify this to ourselves by assuming our user community will value a particular feature or approach. Before you know it, you’ve partially or completely reworked your work in progress around something out of scope (and for you freelancers – unpaid.) I still catch myself doing this.

Do you know what your Minimum Viable Product is? How about your Definition of Done? Who on your team needs to sign off on changes to either?

‘The New Shiny’Do you have time to be someone’s beta tester?

Above I used the expression, ‘Doing tech for tech’s sake.’ What this means is not insisting on using the latest and greatest bleeding edge tech at the expense of stability or reverse compatibility. In our modern world of CI/CD, platforms and middleware have new versions and releases almost daily. Compounding this are our myriad of (sometimes) useful libraries and frameworks with their own release cycles and end of life considerations. In this case, insisting on the latest and greatest without cause can be it’s own bad habit.

The scenario I’m reminded of here is when I hear about something cool or new & improved and I’m looking for an excuse to try it out. “New version X just went live, so let’s just embrace it now.” while forgetting that your existing standard is still supported for another few years. By all means, consider end of life and new features in a particular version, but make sure you’re actually being honest about why you’re pushing forward. Sometimes it’s ok to just wait for Service Pack 1, right?

Don’t forget to actually have the conversation

One might look at any of the above and as, ‘Hey John, didn’t you just basically outline a bunch of best practices?’ Maybe. I think what was more important to point out was how things might’ve gone negative if I and the people I worked with didn’t actually take the time to sit down and hash out the rationale for doing things one way v. the other. I like the idea of cultivating a ‘culture of proof‘ and not short circuiting these important learning discussions for the sake of expediency or even consistency.

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Proficiency – Crossing the No Man’s Land Between Training and Experience

“You can’t go to the moon because you’ve never been there.” – Some genius

I was updating my resume the other day and it occurred to me that most resume formats tend to focus on training (education + certifications) and work experience.  Whether it’s job experience or your credit score,  people with opportunities are going to ask where you’ve been before and why they should make a bet on you.   It seems like including your training and experience represent well tread ground, but how would you include other important qualifications that demonstrate your suitability for an opportunity?

What is Proficiency?

Examples abound in the IT field.  Do you contribute to open source?  Have you ever participated in a hackathon or other collaborative project?  Do you volunteer at a non-profit where you’re donating your skills?  Do you tinker in your spare time?  How do you represent these things to those with opportunities you want to pursue?  The term I tend to use for that is ‘Proficiency’

How to Achieve Proficiency

“I teach this shit, I didn’t say I know how to do it.” – Good Will Hunting

So, you’ve spent some valuable hours learning a new language, earning a new certification or finishing your degree.   Any of these is a substantial investment in yourself, but not necessarily enough to make you a successful candidate.  When I earned my very first certification (the CompTIA A+), I was answering phones for my day job.  In order to get my shot at a paying gig, I had to spend time experimenting at home and learning from peers who already had their foot in the door.  This was basically a DIY internship but it set up a path to my first paying job in IT.

Once I’d fully embraced the field as a professional, it was important to continue to grow and learn within the field.  It’s true that IT knowledge becomes obsolete at an alarming rate as new technologies are introduced or refined.   The various sections of your resume will be a record of these evolutionary iterations of yourself over time.

How to Demonstrate Proficiency

“Oh! And it’s scented! I think it gives it a little something extra, don’t you think?” – Elle Woods

For me, I’ve got the typical Education and Professional Experience sections listed.  However, I’ve added Skills & Specializations (this is where specific languages or frameworks can go), Certifications (industry certifications that are appropriate to the role) and Special Qualifications (my speaking engagements and body of writing).

Anything you put on a resume is something you’ll need to be able to talk about immediately in any stage of your interviewing process, whether it’s for paid work or otherwise.  Your mileage may vary, of course.   I think the key takeaway here is to own the format and representation of your skill set.   This can (and should) include things you did in your spare time as they represent investments you’ve made in yourself that didn’t necessarily involve a classroom or a paycheck.  With the right opportunity, it might even be more important as it’s a living record of your passion for your trade.

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

hack.summit() 2018 – A Look Back

Another excellent hack.summit() has come and gone. This time around, the conference had an overarching theme on blockchain technologies, specifically cryptocurrencies. Since I’m not a block chain developer, I found myself googling terms from time to time as the field is very jargony. Still, I feel like I came away with a better understanding of what all the buzz has been about and look forward to learning more.

Here’s a sampling of the sessions I attended:

Opening remarks, introducing hack.summit() – Ed Roman – Like most keynotes, this was an overview of the conference in general and the blockchain theme. Also a reminder that it’s intended to be technical and the intended audience is developers or other creators. Also, some general information of how to navigate the interface and what to expect during these three days.

What is Byzantine Fault Tolerance? – Leemon Baird – This session starts off with a classic logic problem called the Byzantine Generals Problem. Essentially, how do you coordinate consensus in a distributed system with delays in messaging and suspicion of maliciousness or compromised communication. The presenter walked us through several stages of solving this piece by piece and how complexities have been added over time to resolve man in the middle and other attempts to interfere with trusted communications.

De-centralized Exchange Panel – Alan Curtis and John Piotrowski – This session was an open token exchange discussion on centralized exchanges versus decentralized exchanges. Mostly, there were points raised about the trade-offs between outsourcing some security management tasks such as handling keys to a centralized exchange versus maintaining agility and independence without committing to such a system. I’ve always been interested in the trading field and so much of blockchain is currently focused on monetization before application. While trading isn’t the only application of blockchain, you owe it yourself to understand the current primary driver for innovation in this space.

Engineering an Algorithmic Central Bank – Nader Al-Naji – A session specifically talking about the benefits of Bitcoin decentralization via Basis. Basis purports to offer a system that sources external pricing on itself, referenced to a fiat currency like the dollar. However, it can also key to things like commodities to trend values and control the supply of tokens, much like how the Consumer Price Index works. This results in Basis auto-adjusting much like how the Federal Reserve moderates the money supply to ensure currency instability doesn’t result in over-contraction or inflationary disruptions.

Liquidity, Regulation, and Exchanges – Tammy Camp and Sean Bennett – A compsci and datasci heavy session focusing on the blockchain technology itself. For example, how having a complete dataset of all transaction history built in is hugely advantageous for utilizing transactional systems. Also some caution about how this is still such a new technology that the regulatory landscape isn’t quite clear and that allows the legal market to seek rent in the cryptocurrency space. Some discussion about how by using Stronghold as their anchor/bank/brokerage, depositors grant rights to Stronghold to execute trades on Stellar on their behalf. Currently, in order to access a decentralized exchange, you need a point of access or ‘on-ramp’.

Parity Technologies Presentation – Jutta Steiner – Founder and CEO of Parity – Parity is intended to be a framework or platform for developing blockchain tools and technologies. In this session there was discussion around how in looking at the computing side of blockchain, the various chains and tools and their work product end up comprising a larger computing structure with its own emergent properties. Also, in attempting to make the technology more accessable, Parity is incorporating a vision of improving UX/UI for their toolset.

Building software in a fast-changing ecosystem – Antonio Salazar Cardozo – Technical Lead – Keep Network – I was really looking forward to this session but it got a bit of a late start. Some common sense reminders about how to deal with continuous delivery at a breakneck pace. The session motto was ‘Use Your Pockets’ which refers to the presenters experiences as a young builder and literally means to put your hands in your pockets and think for a second before making a change you can’t unmake. Basically, a nice riff on ‘Measure twice, cut once.’ I’ll need to go back and watch the entire session.

Speaking of, in case you missed a particular session or day of activities, the content is available freely for review. As for me, I’m looking forward to delving more into this space as time permits.

I’d love to hear from any other attendees to share information and opinions about this year’s hack.summit(). If you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

hack.summit(“blockchain”) 2018

It’s that time again..

It will be my pleasure to once again attend hack.summit() next month. Hack.summit() is a bi-annual not-for-profit virtual conference bringing together IT experts, professionals and enthusiasts from around the globe. My previous experiences there have been very valuable both as a professional developer and as a technology hobbyist.

This year’s theme is blockchain, with headline speakers including technical founders of projects including ZCash, Ripple, Mt.Gox, Kadena, Stellar, DFINITY, Monero, Oasis Labs, Orchid, Bancor, Basis, and more. Previous years have attracted over 80,000 attendees, holding world records for both the largest developer conference and largest virtual conference in history. It’s kind of a big deal and worth the time, even if you choose to attend just a couple of sessions.

One cool addition this year is a global virtual hackathon, giving developers the opportunity to “hack for good”, with both the chance to win tokens donated from blockchain foundations, as well as help raise funds for charitable causes via sponsorship donations.

If any of you are interested, and I hope that you are, you can use the code *JBTECH* to redeem a free pass to hack.summit() for this year. One thing to bear in mind is that donations aren’t required, but are much appreciated. Should you choose to donate, the event will forward all proceeds to causes including Women Who Code, Black Girls Code, Free Code Camp, Electronic Frontier Foundation (EFF), Coder Dojo, Bridge Foundry and more.

If any of you are curious about (or may have attended) previous hack.summit() events or have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

“See” you there!

Knowledge 18 – A Look Back

Last year, I was privileged to attend and present at ServiceNow’s Knowledge 17 conference and was definitely looking forward to another opportunity.  Luckily, someone was asleep at wheel when screening presenters as I was invited back!

This was my first time presenting all on my own at Knowledge.  It’s a bit intimidating but also very rewarding.  If you’re interested in presenting, ServiceNow submits an open request for presenters leading up to the conference.  Some of the things to consider when building your presentation are as follows:

  • What will the attendees learn and why will they care?
  • What are the problems you faced?
  • What was the objective?
  • What was the solution?  How long did it take?
  • What did you learn?
As is common to conferences, there will be a keynote presentation to set the tone and share the overall theme.  This year brought a renewed focus on the user experience within the platform and not doing tech for tech’s sake.   Many promises of new features as well as a road map for our next six major releases.
 
Of course, we need to hit the ground running on our first day.  This had to be one of my favorite sessions and one of the most challenging.  The presenters took the hands-on experience of the workshop to the next level by having each of our instances visible from the stage as we walked through simulations of events and alerts.
 
Another very enlightening session walking attendees through creation of a custom CI Class and then building Discovery criteria to identify nodes fitting this new class and merging it into our CMDB.  A great primer for those of us who do any work in Service Mapping
 
This was a fun one focused on reimplementing ad-hoc Powershell and SSH activities in the Workflow Engine.  For anyone who does much scripting in Microsoft environments, having the ability to integrate your existing scripts into Orchestration activities is invaluable.
 
This keynote brought more substance to the promises of the first day’s session.  Much emphasis was placed on new mobile and user specific features as well as interpretation of user needs and virtualization of first responder sessions using AI and bots.  Some of the skits were a bit corny and stilted but the message was clear.  People shouldn’t dislike or be frustrated by their work tools.
 
This was a fun tutorial on one of my favorite tool sets for the platform.  Seriously, if you’re a ServiceNow developer, you should be using Xplore like yesterday.  Great inline tools that give an intelligent code completion feel to the global libraries available on the platform and might help you learn about a few things you weren’t even aware of.
 
This guy was a complete jerk and never should be allowed to present ever again…
 
…But seriously.. thanks to all who attended for asking great questions and making this a great experience for me.  It’s very rewarding to see this experiment through additional points of view.  I hope you got as much out of it as I did.
 
This was my only breakout session since I tend to favor the hands-on workshops.  Still, some great improvements are being promised for Discovery and Service Mapping to make it less opaque and more accessible to the layperson.  If you want to get the full value of an IT implementation of ServiceNow, something as fundamental as node discovery and aggregation should be as basic and straightforward as practical.
 
Using Event Management to Monitor Your ServiceNow Instance Health
This was a fun little session that introduced us to a front-to-back implementation of Event Management as it applies to monitoring the ServiceNow environment itself.  Might seem like a Catch-22 to have the watchman watch itself, but it’s honestly a scenario that gets overlooked when you think about critical applications and monitoring their health and availability.
 
Another fun hands-on experience, this time integrating event monitoring to an AWS environment.  This also covered the idea of anomalies and other ‘odd behavior’ on monitored nodes and the ability to configure monitoring thresholds based on deviations from a baseline instead of express limits.
 
Summary
This was a much shorter conference for me as I chose not to attend pre-conference training.  Still, those three days were filled with the requisite fire hose of information as well as meeting a few old friends and making a few new ones.  Can’t wait for next year!
 
I’d love to hear any feedback on this post, especially if you attended Knowledge 18 and would like to discuss your own experiences.  As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Quick Update – Knowledge 18

After having a great experience at ServiceNow’s global conference last year, I’ve made it a point to keep it on my radar.  I’m happy to announce that not only will I be attending again this year, but I’ll also be hosting my own presentation!

The session is entitled Integrating Service Portal With Amazon Lex and it’s based on a demonstration of Amazon Lex I attended with a local developer community in Wichita followed by some tinkering on my own time.  The result is an open source application which can be plugged in to an instance of ServiceNow with minimal effort.  Considering the ongoing move towards hosted solutions, this is something I hope implementers of ServiceNow will find useful.

If you happen to be attending Knowledge 18 and have an interest in AWS or integrations in general, I’d love to see you there!

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

 

Keeping Current

If you dislike change, you’re going to dislike irrelevance even more. – Gen. Eric Shinseki

One of the more common dilemmas in our trade is knowing what to focus on. It’s easy to get lost in the day to day and forget about the big picture of our careers and staying relevant in a constantly shifting landscape. No matter if you’re just starting out, or if you’ve been in the trade for a while, it’s important to always stop for a moment and ensure your actions line up with your overall career strategy.

It’s almost cliched for those just starting out to ask ‘What language should I learn?’ New developers want to ensure that what they’re learning is relevant and they aren’t wasting their time. This is a perfectly valid concern. However, I’m going put on my Mr. Miyagi hat and claim that the meta-knowledge you’re gaining while practicing is more important than the language you’re learning it in. Knowing how to break a larger problem down into smaller problems that code can solve is language agnostic. So is aggregating those smaller solutions into an overall design. Even better is learning how to troubleshoot and test your solutions before bringing them into production. Anticipate your customer’s needs, expect resistance and learn to persevere. All of this is more important than learning what’s hot and sexy.

For those of us that have been building and solving for a while, keeping relevant and sharpening the saw can become easy to neglect.  It’s hard to take a step back from project work with its pressures and deadlines to invest in some new knowledge.  If you’re fortunate, your employer will check in with you on training and goals within their organization.  If you’re not (or possibly self or unemployed), then it will fall upon you to invest in yourself regularly.  This must be done deliberately and in sufficient frequency to ensure you’re continuing to grow in your trade.  Some ideas to spend this effort might be to earn a certification, learn a new development paradigm or maybe even start a blog.

If after this, you’re still curious about what’s in demand, a resource I check every so often is the TIOBE Index.  The intent of this index is to cast a wide net over what code is being used in the wild and what people are releasing as far as learning courses and other content.   It’s not intended to make recommendations, but only to offer data or a heat map of ‘what’s out there?’  While rankings like these are about as scientific and individually predictive as measuring your BMI, it’s important to take them into account for the same reason.  Meaning, opinion makers, customers and potential employers pay attention to them.  Also, indexes that focus on language alone fail to account for higher level disciplines like testing and design.  As a ServiceNow specialist, most of my actual coding is done in Javascript, but that’s not necessarily where I’m adding most of my value to customers.  So, take the the popularity (and fads) of individual languages with a grain of salt when deciding what’s relevant to YOU.

So, what do I think is most relevant today?  Relevant in the next 5 years? 10?

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Typos and Booleans and Mentoring – Oh my!

“Booleans are programmer’s original ‘fuck you’ to the English language.” – Me

It’s official, I’ve jumped the shark by quoting myself.  I’ll see myself out now..

Lately, I’ve had some flattering experiences lately with peers and aspiring programmers actually asking for my opinion.  Quite honestly, this is the one thing I find more rewarding than finding my own solutions to things.  Lending a little bit of confidence to someone experiencing some ‘analysis paralysis’ can help them get off the dime and act.

One story I like to tell quite often is about my son.  He was having trouble with some spelling homework that had a certain number of errors for him to find.  He’d found all but one and was getting extremely frustrated and emotional.  I helped him look it over and noticed the error and let him know that there was still one to find and that he wasn’t wasting his time.  It took him a bit longer, but he figured it out.   The fun part was telling him afterwards, “Dude, finding typos is like 95% of my job”

“Yes, you do.  You’ve just used a double negative” – Maurice Moss regarding education

Sanity checking isn’t just for syntax and booleans are my fucking nemesis.  When you get deep down into code that is essentially just counting polarity reversals, it’s easy to get lost.  I’ve got a friend going through some professional retraining and getting a bit flustered on some boolean puzzles for class.  Again, this is one of those situations where a second pair of eyes and some reassurance can provide that little bit of confidence to push forward.

“You actually watch that show?” – James Van Der Beek regarding Dawson’s Creek

When I started this blog, it was largely an experiment to dabble in some new technologies and try and share some of that dabbling with whoever cared to notice.  Actually getting feedback on my articles is flattering enough, but recently I had a peer share an interest in starting a professional blog in part due to being inspired by mine.  I got into development because I like building things that people use, but this had to be one of the most rewarding outcomes of the past couple of years of blogging.

“Every time I say ‘No.'” – Captain Sheridan on winning

As cliched as they are, movie/television quotes are kind of my thing.  Mental models (see: analogies) are great for encapsulating a dry and complicated situation into something relatable.  You can do this through anecdotes in your own experience or by referring to something common between you and your audience.  It works!

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

So… I wrote a book…

Astinus

“I trotted down the street to my friend and mentor Paul Rink and told him the triumphant news. ‘Good for you,’ he said without looking up. ‘Start the next one tomorrow.'” – Steven Pressfield

In a recent post, I mentioned that I was working on a ‘major writing project,’ which I’m proud to say is finally complete.  It’s official.  As of this week, I am a published author!

A few months ago, I was approached by the folks over at Packt Publishing to update their ServiceNow Cookbook to a current edition.  Having always wanted to write a book, I jumped at the chance.

For those of you who haven’t used one, a technical cookbook is intended to be used much like a culinary cookbook.  This means you should be able to use it as a general reference and jump around between ‘recipes’ to complete specific tasks in the relevant language or framework.  While this book follows this format in general, there are some chapters that have an overarching progression in building up a specific feature.

You can pre-order the ServiceNow Cookbook or purchase a subscription to access the content at the following links.  Hope you enjoy it!

Packt Publishing

Amazon

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Changing Jobs

“… we live in a real world, where the line between prosperity and destitution can be as thin as the bankruptcy of Lehman Brothers or a factory closure.” – In Praise of Lando

A funny thing happened to me on the way to this summer, I left my job of 11 years to pursue a new opportunity.   To be honest, I was content and challenged in my previous role and on a pretty solid path.  But sometimes when an opportunity presents itself, you have to weigh the options and take a chance.  The key question is, are any of us really prepared to honestly explore a new opportunity in good faith?  How many of us are really thinking beyond the here and now?

In principle, we should always be assessing our proficiencies and interests on a regular basis.  All too frequently, we are just trying to make it to the end of our to-do list so we can unplug.  Even worse, sometimes we’re just trying not to lose ground or hoping that an unforeseen crisis doesn’t force our hand.  Working hard and executing might get you through the short term, but it isn’t enough.  Taking a step back to ensure you’re doing the right work is crucial to long term growth and success. This doesn’t just apply to individuals, but to organizations of any scale.

When Seth Godin warned us to “Dig your well before you’re thirsty,” he’s challenging our inherent complacency and tendency to coast and accept what’s handed to us.  Life is replete with black swan moments.  Do you seek them out?  Do you dread them?  I’m starting to think the main question is, what might be holding you back from making any change at all?  It’s one thing to miss or pass on an opportunity.  It’s something else entirely to be so overextended and brittle that the slightest disruption brings everything down.

When I first started out writing BASIC and soldering electronics, the World Wide Web wasn’t even a thing.  Since then, entire technologies have been born and become obsolete. What do you do to keep current and be ready for the next thing?

As always, if you have any questions or comments, please feel free to add them here or address them to john@benedettitech.com.

Thanks for looking in!