“Using Unix Cron to Run Automated Tests” by Reynold Miguel

Reynold Miguel is a QA engineering leader with a strong focus on bringing automation to organizations. His deep technical knowledge and understanding of technology enables him to discuss more complex concepts, like using cron to setup automation, while maintaining a focus on the value and broader organizational importance of the technique. 

Using Unix Cron to Run Automated Tests, by Reynold Miguel 

The software utility cron is a time-based job scheduler in Unix-like operating systems. People use a cron to schedule jobs (commands or shell scripts) to run periodically at fixed times, dates, or intervals.  Using cron jobs are a great way to run scheduled tests. Running tests in Jenkins provides more functionality, but crons are a quick shortcut in case you want to run your initial set of tests right away on a schedule. The benefit of this approach is the ability to schedule tests in a matter of minutes, without need for a whole lot of setup. You can also utilize crons for any external processes that you need for your tests, e.g. data loading, sending emails, etc. At our company we initially used crons for running tests, but since transitioning to Jenkins we use crons primarily for running various processes like data loading and sending test emails in our QA environment.

Needed Tools:

  • Unix/Linux/Mac
  • Automated Tests that are runnable from command line, or any runnable process
  • Basic knowledge of Unix and vi editor

Step 1: Have a Job You’d Like to Schedule

Here’s our job that we use for running our tests, we use a customized framework built on top of Selenium Web driver and Ruby.  This test can be run from the Unix command line. $ bin/autobot –connector=firefox –env=qa 2>&1 | tee data.log What do these commands mean?

  • This line is how we run our customized set of selenium tests, on firefox and in our qa environment: bin/autobot –connector=firefox –env=qa
  • And these are Unix commands that allow us to append the test results to a log file so we can look at it later: 2>&1 | tee data.log

Step 2: Setting up a Cron Job

Type the following in the terminal: crontab -e
If you do not have a crontab file, one will be created for you and opened in the vi editor. Setting up a cron job consists of creating, or adding to, your own crontab file.  Each job needs a line containing six entries, each of which is separated by spaces or tabs. The first five entries are integer patterns specifying the following:

  • Minute (0-59),
  • Hour (0-23),
  • Day of the month (1-31),
  • Month of the year (1-12),
  • Day of the week (0-6 with 0=Sunday).

Each of these patterns may be either an asterisk (meaning all legal values) or a list of elements separated by commas. An element is either a number or two numbers separated by a minus sign to indicate an inclusive range.

A minute specification of 0,30 would indicate the job is to be run on the hour and half hour. Likewise, a day of the month entry of 1,15 would initiate execution on the first and fifteenth of the month. The sixth field of a line in a crontab file is a string that is executed by the shell at the specified times. A percent character in this field (unless escaped by) is translated to a new-line character. Cron jobs are being executed from a system directory. Make sure you include and explicit path to your script. In our case, let’s say we want to run the tests every 30 min. You can also use a “#” to comment your scheduled jobs.

#This will run our tests every 30 min
0,30 * * * * bin/autobot –connector=firefox –env=qa 2>&1 | tee data.log

Step 3: Save the Cron and Let it Run

And once you save it you’re done!  You’ll receive a message that should say something like: crontab: installing new crontab

Crontab Commands:

  • crontab -e   The -e option spawns an editor containing the user’s current crontab
  • crontab -r   The -r option removes a user’s crontab from the crontab directory
  • crontab -l   To see the list of jobs use the -l option

Remember, when you save the file, it automatically updates the crontab when exiting the editor.

“Is Feature Branching Evil?” by Jay Dorman, Director of Technology at Edgecast

Jay is a technology executive who runs application development and operations for a large team at Edgecast, a widely used and fast growing content delivery network based in LA. With broad responsibilities ranging from strategic decision making to hands-on management, Jay provides technical leadership and direction for his team. Jay shares his perspective on how and why he implemented Feature Branching at Edgecast.

Is Feature Branching Evil? by Jay Dorman

Remember when deploying a web application meant mapping a network drive and xcopying (or even dragging and dropping!) files between your development system and a production server?  And then dealing with all the files that didn’t copy because your webserver had them locked?  Come on…you can admit it…you’ve been there.  While my teams have moved FAR beyond those days, we’re still struggling with some aspects of deploying new features. We generally operate in two week sprints, which are followed by about two weeks of testing, break-fix and deployments before a release hits production.  That means there’s a nearly four week window between the time a feature bubbles to the top of the backlog and it sees the light of day…a pretty painful delay in anybody’s book.  It also means that some dozens of features are bundled together for release.  In the case where a feature needs to be delayed because of external dependencies, or because of a last minute bug, it forces us to roll back the entire release.  Yes, we can exclude the particular feature, but with a mature base of shared objects and base functionality, the altered deployment really needs to roll through QA and Staging again before it’s safe to deploy.  Even with a relatively high degree of automation (we use a combination of Jenkins, Octopus Deploy and RedGate’s tools), rollbacks and re-deployments can be pretty painful. We’ve decided to move towards feature branching.  If you ask The Google, it won’t take long before you’ll read/hear the phrase “…feature branching is evil.”  You’ll also read articles that describe feature branching as being in direct opposition to continuous integration.  I just don’t see it.  Lots of talking heads will tell you that in order to do continuous integration, you need to build logic gates around each feature so that development code can be disabled until it’s ready, then flipped on once it’s passed through all the quality gates, after which you’d remove those logic gates.  (Yes, I know…that’s a pretty simplistic explanation, but I think accurate for the purposes of this discussion).  This makes me nervous for a couple reasons.  First, I don’t like the idea of all these logic gates sprinkled throughout the code.  With a team of say, 10 developers writing features with broad scope, it seems like a lot of ‘meta code’ to write, test, remove and then re-test.  Second, what if you need to make changes to a broadly used core business object?  Wrapping conditional gates around the datatype of a property that’s accessed by dozens of methods and pages seems like a lot of risk. So, we’re moving towards a deployment methodology that we feel incorporates the best of feature branching and continuous integration.  Here’s some of the key points of the direction we’re heading:

  • We’ve migrated from svn to git, as it’s a much better fit for the way we want to branch and merge changes.
  • Each feature gets its own branch off of the main develop branch.  Incidentally, we’re naming each feature branch after the Jira ticket that tracks the effort.  Seems intuitive to us, and helps with automation.
  • Throughout the development cycle, the developers merge up from the main branch into the feature branch.  This insures that features play nice with other changes that have already made their way into production.
  • On a daily basis, we use Jenkins to compare each feature branch to main in order to make sure that developers are merging up every day.  With the linear nature of git, it’s easy enough to determine if a given branch is behind.
  • Once a feature is code complete, we build to QA from the feature branch, before we merge to main.  That allows us to deploy urgent hotfixes and such, without inadvertently deploying untested features.  Also, when Jenkins initiates a QA build, it also spins up an OpenStack VM environment to test the feature.  That way we can have multiple changes going through QA independently and simultaneously.
  • Once QA certifies a feature as ready for production, we deploy the same package to integration, staging and eventually production.  When that’s complete, we finally merge into main.
  • Hard not to emphasize this again…with each deployment, we compare the build to what’s currently in main, merging up to the feature branch if necessary.

It’s taken a lot of automation, and loads of adjustment and practice, but we’re getting there.  Each feature goes through CI within its own branch, and if there’s problems, that’s where we catch them.  The developer(s) working in that branch have to address any integration issues before moving their feature towards production.  Every night we run automated unit tests and functional tests on each feature branch, and in a performance environment, we run performance, load and analytics tests.  Now features go out the door as soon as they’re ready.  Product feels empowered to prioritize and actually impact deployment timelines.  QA is happy because they don’t necessarily have to run full regression with each change (depending on the scope).  Execs don’t wonder “Why does it take so long to develop features.”  Maybe best of all, customers feel like we’re listening and quickly acting on their needs. Is it perfect?  I don’t know.  We’ll figure that out over time.  But we’re feature branching.  AND we’re doing CI.  And so far, we don’t feel evil.

“The Innovation Sandwich” by Jim Connolly

Ensuring a culture of innovation as companies grow has become an increasingly important focus for executives. Jim Connolly, SVP of Technology at Zynx Health, provides insight into the unique challenge of building a company structure that breeds creativity and ideas.

“The Innovation Sandwich”, by Jim Connolly

In many organizations there are processes in place to corral and organize ideation and follow-through activities.  These processes are often centralized using internal R&D and/or Product Management teams.  Some companies may adhere to activities such as those taught in the Pragmatic Marketing Framework.  These outside-in activities are useful because they take a market driven, ROI based approach for product planning.

There are downsides of such centralized and rigid processes that could actually diminish the latent innovation potential of company employees. For example, game changing opportunities may be lost because ideation requiring creativity, inspiration, and suspension of belief are slowed down, gated and filtered too early by the very processes put into place to encourage and manage them.

Finding ways to work alongside rigid annual and product plans is what Hearst CTO Phil Wiser referred to when he said, “…Of all our challenges, that’s been our single biggest challenge–to operate our businesses in a way that really supports this real-time innovation.”

How can both a market/strategy driven (top-down) and a real-time employee (bottom-up) approach to innovation co-exist?  One approach could be to add a second process that gives responsibility for ideation follow-up activities to the people that come up with product ideas or new ways to leverage technology.

Here is how to get started.  First, create a time boxed process for idea exploration and follow-through using contemporary methodologies such as Design Thinking or Lean Startup.

Second, form partnerships which cross multiple functional boundaries in order to build additional domain and customer knowledge. These partnerships should include sales teams, account managers, product teams and other company domain experts and thought leaders. Build a culture of communication that makes it safe for people with diverse viewpoints to interact without filters and the loss of information that can occur when functional boundaries exist.

Next, provide access to readily available resources such as contemporary prototyping tools, APIs, cheap computing power, and inexpensive engineering support.  Establish a service center to provide mentorship in such areas as prototyping, design thinking and lean startup techniques.

Finally, create a culture of learning and give technology employees a mandate to stay current with technical skills, processes, and emerging standards and to find innovative uses of technology that could contribute to business growth and competitive advantage.

By following these steps, in combination with market driven approaches, businesses can achieve real-time innovation.  The key to success is to provide the organizational and technical support necessary to allow passionate and creative people to directly follow through and vet their ideas and solutions.

Jim Connolly is the SVP of Technology for Zynx Health.  For more management and leadership ideas, please visit http://www.theagilelife.org.

“Iterative Software Development – It’s a Sprint AND a Marathon” by Kelly Bakst

Agility in sports requires speed and quickness. In software development, being truly agile is a little more difficult to define. We asked Kelly Bakst, who has deep experience as a VP of technology and other executive roles within a variety of tech and media companies, to discuss the value of iterative software development. His tips below provide insight into the enigmatic balance involved in reconciling short term and long term software development goals.

Iterative Software Development – It’s a Sprint AND a Marathon, by Kelly Bakst

Developing web-based software has been an absolute boon to developers.  Remember the days when you had to push out updates, hope everyone installed them, and hope (more like pray) that their local configurations didn’t break anything?  Remember how a tiny bug caused the same headaches as a massive upgrade?  Remember screaming at testers because something made it into a release that went out on CD? Ah, those were the days…

Now we have none of those problems!  Push changes anytime, and everyone gets them at once.  Upgrade a server, and everyone sees the benefit.  Everyone’s data is backed up, and safe, and consistent.  No more problems…none…zero!

Well, ok – one small one.  Ever hear the saying “Do a little more each day, and soon everyone will expect a little more each day”?  Well, that’s where your users are now.  They know that you can push stuff out quickly, so they want more updates.  More frequently, and bigger.  But it’s OK.  Customer engagement is what we want, desperately.  Feedback is like gold in this business – so we’ll take all we can get.  So how does this change the development process?

In short – it has become about speed AND accuracy.  You need to be targeting the right features, and delivering them in a true iterative fashion.  It sounds hard – and it is.  This is why you need to be more organized than ever, therefore:

  • Eagerly ask your users to tell you what to work on next. We provide customers with the ability to not only submit bugs and change requests, but to vote on which ones they like most.  That’s the bible for us.  That’s what we work on.
  • Bite sized pieces.  You can have a team dedicated to a complete new look or version of the software – but you absolutely need a team dedicated to the changes your users want.  Telling users “We’re working on these 78 features, and they should be out with the new version in 6 months” is just going to frustrate them.  Explain that a big batch of new features are in the pipeline, but that the most important functions are at the top of the list and will be coming really soon.
  • Listen. When you roll out changes, the things users hate will be made known to you very quickly.  Be prepared to fix, explain, or roll things back.
  • Guide. Try and guide your users to a destination.  Not just where you want them to be, but where they really need to go.

So run fast, pace yourself and drink lots of water 🙂

Kelly Bakst is a technologist who has experience running technology teams and companies in a variety of industries. He can be contacted through his software company, Pi Software or on LinkedIn.

“Data Science – Found Your Unicorn?” By Daniel Gutierrez

Daniel Gutierrez is a data scientist with a strong understanding and background in the big data field. In addition to consulting with a variety of corporations, he is a regular contributor to the website Inside Big Data (http://inside-bigdata.com/author/dangutierrez/).

Fun Fact: By 2015, 4.4 million technology jobs globally will be created to support big data, including 1.9 million in the U.S.

Data Science – Found Your Unicorn? – By Daniel Gutierrez

There’s an immense amount of banter in the data science ecosystem these days about all the skill-sets required to effectively function as a data scientist. Some have gone so far as to label the perfect mélange of experience and knowledge a “Unicorn.”  This a reference to the recent discussions in the press and blogosphere indicating that Data Scientists are as nearly impossible to find. As a matter of fact, many companies in search of their own unicorn place unrealistic job requirements that only a data science superhero could fulfill. Fortunately, this mindset is changing where the search for a single Superman is wisely replaced with building a team of people with complementary skills – a data science team. To be sure, some candidates might indeed possess expertise in computer science, statistics, machine learning, probability theory, engineering and domain knowledge. They are just very hard to find. Many, if not most, data scientist job descriptions don’t reflect this reality and so these positions go unfilled for a very long time.

As the demand for the Data Scientist job position continues to increase, we’re seeing significant variation in the ads appearing on places like LinkedIn. From the discontinuity I’ve noticed in the ads, it is reasonable to question whether the internal/external recruiters and HR departments actually know what a data scientist does. In some cases I’ve seen, 2 or 3 positions described for just one data scientist position. I wonder if the successful candidate will command a salary equal to 2-3 people? It is as-if the HR manager just did a Google search on “data scientist” and copied/pasted every keyword they could find.

So I thought it would interesting to evaluate a typical job ad that I found floating around on LinkedIn. This particular ad was posted by Facebook – follow this link to read my comments! Continue reading ….

Please contact us if you have any questions, comments or feedback.

“Recap of 2013, What’s in Store for 2014?” by TeamQ

The entire Q team hopes that everybody’s year has started off with the same excitement as ours has! We are delighted to have had the opportunity to work with so many passionate partners who have an incredible devotion to helping the tech community in LA thrive. Our team at Q is commonly asked about trends in technology (including salary, demand for specific skill sets and bourgeoning tech) – in response, we have collected data from our recruiting efforts in 2013 – below are some salient points that we hope will be of interest!

Fun Fact: Google has acquired an average of 1 company/week since 2010.

Recap of 2013, What’s in Store for 2014?, by TeamQ

Of the many and diverse positions our clients (ranging from small startups focused on web and mobile businesses to large enterprise corporations) asked for help with, nearly one third of positions were in software development (fullstack, frontend, backend, web) and 25% were in QA. Over 15% were in systems administration or engineering, 5-10% of positions were Product/Project. About 8% of open positions were for SQL/MySQL/NoSQL DBA’s and developers. VP’s/Directors/CTO’s and other positions (such as Data Scientists) comprised much of the remainder of our efforts.

  • 60% of our clients are LAMP/Java/Ruby/Python shops
  • 30% are Microsoft shops (mostly .NET on Windows)
  • 10% make significant use of at least two different technology stacks
  • Nearly 100% of companies are moving into Mobile
  • Nearly 100% view virtualized infrastructure (including public/private cloud) as central to their business plan or growth strategy

We also collected average base salary ranges for the most common positions not including benefits, perks, bonuses, stock or other factors that might supplement first year salary.

  • Manual QA:  $60-90K
  • QA Automation/SDET:  $110-150K
  • .Net Engineer: $90-110K (mid), $110-130K (senior)
  • Java Engineer: $110K-125K (mid), $120-140K (senior)
  • Linux Engineer: $110-125K (mid), $130-150K (senior)
  • LAMP Dev: $90-110K (mid), $110-140K (senior)
  • FE Dev: $90-110K (mid), $110-135K (senior)
  • Product Manager: $90-110K (mid), $120-135K (senior)
  • UI Designer: $80-110K (mid) , $110-135K (senior)
  • Mobile Developer: $90-110K (mid), $110-140K  (senior)

In 2013 we saw a massive increase in requests for skill sets that include Scala, data science, noSQL, cloud based infrastructure, or candidates who have a strong grasp of both development and infrastructure operations.

As we look forward to 2014, we are eager to see the many innovations that are sure to come. We are excited to continue helping out as many folks as we can and bringing more stories and insights from in and around the LA tech scene. In that vein, if there are any topics that you would like to have discussed on this newsletter, or if you or anybody you know is interested in contributing, please feel free to share with us ([email protected]).

Hope you have a productive and fulfilling 2014!

“Accelerating the Growth of the SoCal Technology Eco-System” by John Shiple

John Shiple provides CTO level expertise to many LA based startups. We asked him to discuss some of the issues surrounding employee development, team building and talent in general. As discussed below, John is a strong proponent of training as a way to build high-functioning teams while also significantly strengthening the technology community here in Southern California.

Fun Fact: There are over 2.7 billion internet users in the world, comprising 39% of the world population

Accelerating the Growth of the SoCal Technology Eco-System 

Hiring tech people is painful…really painful. And the higher up the food chain you go – that is, the greater the skills and experience required – the harder it is to find the right people to build, extend, and maintain your business.
Hiring pain is not unique to Los Angeles. However, LA does have its own, unique brand of technical hiring issues. The biggest issue that I see is a lack of experienced technical talent to bring up the next generation. In short, the decades long brain drain to the north (aka “The Bay”) has taken its toll. Fortunately, I now see the direction changing course – with talent flowing back to Southern California (or at least not leaving it in the first place), but we need to continue to accelerate the growth of our technical talent base if we want to significantly improve our collective hiring chances.

To put it succinctly: In LA, there is more than enough junior talent but not nearly enough mid- to senior-level experienced expertise. So how do we collectively move forward to address this experience gap and improve our overall ability to groom and recruit top, experienced talent (whether junior-, mid-, or senior-level)?

My Advice? Focus on Training and Cross-Training yourself and your talent. I spent my ‘first decade’ in Tech in the Bay Area. After spending my ‘second decade’ in Tech in LA, I noticed one key distinction. Everywhere I went in San Francisco and beyond, from the smallest startup to the largest enterprise,
companies
offered liberal training and cross-training opportunities. I do not see that happen with much frequency in the LA area.

Training involves increasing the number and level of technical skills at your disposal. LA is very good at entry-level and hobbyist style meetups, but meetups alone will not groom experienced, senior talent. You and your team need to find mentors,  go back to classes,  take seminars, travel to conferences, and more! Training only for technical skills, however, is a short-sighted plan. You also have to build up your team’s business, creative, and social skills. Above and beyond simple engineering and development, I put user experience, QA testing, design, layout, usability, copywriting, and copy editing in the functional/training category (essentially including all the things that go into your technology department, however you define it).

Cross-training involves increasing you and your team’s capabilities in areas outside your core technology expertise, like customer development, business development, marketing, and sales. It is critical to get in front of your customers (whether they are consumers and vendors) and simply listen.

All technical leaders must have both training and cross-training opportunities available to them. And don’t be so shortsighted as to only offer your technical team training opportunities (and forego Cross-Training them) – you will only be doing you and your company a disservice by decreasing the efficiency of communication, increasing re-work, and creating an out-of-sync team that is unable to develop effectively (aka in a reasonable and timely manner).

What are you going to do to Train and Cross-Train you and your team?

John can be reached at [email protected].

“Don’t Let the Problems of Healthcare.gov Happen To You” by Joseph Gutwirth

There has been an excessive amount of discussion in the media about the Affordable Care Act, specifically the immense challenges that have occurred in the website rollout process. Joseph Gutwirth, who runs a software testing company in LA, brings us some tips on how the challenges could have been avoided, and how you can avoid frustrating your customers with slow and malfunctioning websites. 

Countless people throughout the country have experienced challenges in attempting to sign up for the Affordable Care Act. What can we learn about the healthcare.gov website failures that can be applied back to our IT projects?

1. Work from your Production release date backwards. Review your requirements list as far as what must be done and then find out if your proposed release date is realistic or if you need to change it. The ACA website should have had three to six months of testing to ensure it would work before launch. Four to six months would have probably been more realistic, but then that figure is dependent on having effective project management and a top-notch development team that can find and fix problems quickly.

2. If your website, software and systems are going to be public facing and encountering load then you’ll need to include performance and stress testing as part of your testing. This also includes in-house business systems too. Utilize a company to manage and execute the types of scripts and tests that will accurately reproduce how your customers are going to use your site and what your customers are going to do. There are several performance test environment services that can supply as much load as you’ll need to support your traffic requirements.

3. Control your project’s management either onsite or through a company that is expert in software project management. If you are outsourcing development and QA to another company overseas, do not let that company manage your project. Having an outsourced company manage your development process and technical teams, including your test team, is like having the fox mind the henhouse. Almost as bad as having your development team manage the QA team.

4. Utilizing an experienced test team that is different from your development team is paramount to maintaining an objective viewpoint and ultimately launching a successful product. Even if you have an in-house QA team you should also consider hiring a secondary test team to review your product either in tandem with your test team or after you have completed your first round of testing.

Joseph Gutwirth is CEO of QuadrixIT, a software test company that has built and quality tested for some of the largest companies in the world, including Sony Pictures, EMI, GFI Software, and others. 

“3 Ways To Keep Technically Fit” by James Rothering

We are often looking for new opportunities to share with our network concerning learning about new and truly bleeding edge technologies and how they might be implemented. Recently, we have been working with James Rothering, who runs the Technology Radar Meetup Group, which focuses on the exploration into such new technologies. We asked James to share some of his expertise in staying apprised of new developments.

3 Ways to Keep Technically Fit – By James Rothering

First of all,  develop at least one Technology Radar (a guide for new technologies that are being developed and how they might be implemented). You  probably already do this informally, but you need to formalize the process. One common way to formalize such a process is to make yourself accountable to someone for your formal product, and then receive their feedback about it. Check out the link above to the meetup group for more information about the Technology Radar technique and how to be involved.

Secondly, interviewing for job opportunities can be a valuable way to learn about what other companies are doing. Furthermore, it’s so easy to get comfortable in your job that you lose sight of what the marketplace is demanding of candidates. This is a great way to get to know the kinds of people who rise to management positions and learn what
the market is demanding in the way of technical interviews (and tech topics covered will reveal to you gaps in your understanding). Taking interviews can be a very valuable method to be at the top of your game all of the time.

Thirdly, you should periodically participate in Hackathons. The pressure of having to code and deliver a solution in 48 hours — or as is increasingly common, 1-day — will keep you in tune with newly emerging tools, frameworks, and techniques that can facilitate agile prototyping. Too often, our companies become hidebound, “process oriented,” behemoths that can never pivot, or produce a prototype on short notice. But this is an essential skill, especially in today’s agile/lean Startup world. There simply is no substitute for a time-boxed exercise from time to time to see how fast you can use the tools you have mastered. This also helps to focus you on getting some prototyping and rapid development tools into your arsenal.

Start with this three techniques to keep your self technically fit (which is as important as being physically fit, if not more) and prevent yourself from becoming a technological dinosaur!

In addition to his leadership of the Technology Radar Group, James is very active in various networking groups and provides CIO consulting (mostly for early-mid stage companies). He can be reached on LinkedIn or through meetup.com.

“Success Through Stupidity” by Ron Cohen

You’re stupid. Admit it and you’ll be smarter.

You’ve always been pretty sharp: Interesting career, created things, led teams, built systems, solved problems, closed deals, etc. You know a lot.

Why can’t everyone else be as smart as you? Why does your system administrator nitpick instead of just configuring the firewall the way you said? Why doesn’t senior management allocate the funds you requested for new developers? Why doesn’t the customer just sign the deal already?

Perhaps because you’re not stupid enough – or aren’t willing to accept that you’re not smart enough to see all of the angles.

Your network administrator may have a long list of security, performance, reliability, and cost requirements that are not being considered. Senior management almost certainly is balancing issues that you are not privy to. You have no idea which features your customers really want until you see actual sales or adoption data.

Nobody knows everything. Internalize that. Be open to new information. Especially to information that contradicts your opinions.

Steve Jobs is commonly credited with the ability to predict market needs. However, it seems that Jobs’ success was arguably less due to his design abilities and more to his iterative down-selection of designs created by his subordinates. Furthermore, Jobs built an entire company (NeXt) that completely missed the market and flopped. Even Jobs was very wrong sometimes.

Most people perceive themselves to be smarter than they actually are. This is a psychological phenomenon known as “illusory superiority” or the Dunning-Kruger Effect. Dunning and Kruger are psychologists who received a Nobel Prize for their research showing that (at least in America) incompetent people generally overrate their own abilities while competent people generally underrate their own abilities.

Technology changes constantly. Cloud. Software-Defined Networks. New software frameworks. Mobile security. The list is endless, so be open to new concepts. Conversely, listen to the reasons others are not ready to accept the new technology you want to implement.

The next time you find yourself convinced of your omniscience and about to butt heads with some “moron”, try this: pretend to be stupid. Pretend that the “moron” is an experienced genius and you are a newbie. Shut your mouth and hear them out. Go off and think about what they said. Sleep on it. There could be some gems in their position. If in the end, they really are a moron, you can decide to ultimately ignore their input, but at worst you will have made their opinions feel welcomed and developed a new ally (even if they are a moronic one).

You should be cognizant of the Dunning-Kruger effect, but also careful to not go overboard into excessive self-doubt and analysis, which could lead to paralysis. That is to say, enthusiastically seek out other people’s opinion and be careful to avoid bias, but don’t forget to trust your own gut reactions too.

So, when you find yourself on the road to achievement and success, don’t forget to be a little stupid along the way.

Ron Cohen is an experienced technologist and manager, in addition to being a product development maven. He can be found at www.linkedin.com/in/roncohen/.

Pin It on Pinterest