Uncategorized

February 25, 2018
Release with Purpose

One of the topics that frequently gets discussed in engineering circles (or maybe I should say product circles) is the concept of when to release. I say product circles because engineers I am convinced would be happy to keep a project in continuous improvement forever. It’s in our blood. We have this innate desire to continue to make something better and every time we look at a project we’ve found a half dozen ways we can continue to improve it before we call it a product and release.

This is a blog for everyone though, not just engineers so let me take the back a level and make it more of a general concept discussion.

The perpetual debate that happens in any company who releases software or ships a product is about when to ship and when to perfect. And there are a million different pieces of advice and ways to look at the situation. Apparently, based on the majority of those, most people tend to hold on to things too long and never ship. As a result the most common advice is to Release early, release often and iterate. Great companies have pushed this mantra in the past and possibly one of the most well-known of the modern era, says this:

Hackers try to build the best services over the long term by quickly releasing and learning from smaller iterations rather than trying to get everything right all at once. To support this, we have built a testing framework that at any given time can try out thousands of versions of Facebook. We have the words “Done is better than perfect” painted on our walls to remind ourselves to always keep shipping.

“Done is better than perfect” and “Move Fast and Break Things” are two of the common phrases associated with the Facebook movement. Both of these focus on this same sentiment. Speed and early releasing is more important than waiting for perfection.

I understand the mentality. I agree with the sentiment. And I encourage others at Mautic and in the community to think this way as well. There’s truth in saying that “we must quiet our fearful ‘lizard brains’ to avoid sabotaging projects just before we finally finish them”. But, it’s also important to not release prematurely. While this caution doesn’t need to be issued as often (as discussed above) I was discussing a tool improvement yesterday with one of our engineers, shout out to Don Gilbert for being a weekend warrior, and the conversation subtly shifted back into this debate. He looked at me and said, “We don’t want to delay a release for perfection.” My immediate response was, “We do want to delay a release for purpose.”

What I meant by that statement was simple: When releasing a product into the market, or really releasing anything (marketing materials, sales decks internally, literally anything) we should release intentionally. And if there’s something fundamental that needs to be improved or changed before a release, then hold the release for a purpose. A specific purpose. In this way you’ll release early and often, but you won’t release a problem. If you have a real and definite purpose for delaying a release you’ll fix that reason and still release. It will still be fast and it will still be frequent. But it will be polished.

Mautic and the Power of Product Hunt

March 18, 2015
The Power of Product Hunt

Chirp. That’s how it began. A single, simple, chirp from my Tweetdeck. I was in the middle of a meeting in my office when the tweet came in and I glanced only half-interested while deep in conversation. When I read the tweet however everything else stopped.

That was all it said. Added as a maker of Mautic. (Our open source marketing automation platform and community.) But I knew what this meant. I was very familiar with the twitter handle @ProductHunt. For those that don’t know what Product Hunt is here is a brief explanation. Product Hunt features a list of the best new products on the web. Every day the list is restarted. Throughout the day these items are voted on by the community and comments added. This social aspect allows trending of the most popular new items. For startups and early stage communities this is an incredible achievement and I was well aware of the power of Product Hunt. I’d even submitted Mautic in the past but had never heard anything back.

Happy St.Patrick’s Day

Now, here on St. Patrick’s Day, I had just received notice that we’d been added. Things kicked into high gear almost immediately. I excused myself from the meeting I was in and quickly informed the rest of the Mautic community that we had been “hunted” as Product Hunt refers to the adding of a new item.

And as expected, traffic spiked. (See graph above) We watched – anxiously monitoring our web servers as they creaked under the sudden load increase. But though we may have been anxious we had a confidence because we had some great tools in place.

Some Of Our Tools

We were using a CDN for static assets (CloudFlare is amazing), we also have a secret weapon (not too secret). We use New Relic. We could monitor throughput, response times, CPU usage, memory usage, and errors in live time. This was incredibly helpful as there were moment when we were registering a dozen accounts a minute and we found a problem with simultaneous registrations. We were able to fix them incredibly quickly and notify those few affected users directly. Remember, first impressions are everything! Zendesk was also a great help in monitoring and responding to any specific questions or support issues.

Of course we had thoroughly tested and re-tested to ensure we could handle a traffic increase and traffic spikes (we knew we would be wildly popular once people began to hear about Mautic). But there’s nothing like the confidence that when things are actually exploding you are capable of dealing with the situations as they occur.

Helping Continue Momentum

We continued the buzz by promoting Mautic’s addition to the list through various social media posts. We had to work fast because although we were aware of Product Hunt and hoped to be featured we had to create the resources on-the-fly. We created a custom short URL, http://mau.tc/prod-hunt which would be easy to share (Thanks to Bitly.) And then very soon after the announcement we released this on our social media platforms:

open source marketing automation on product hunt

But we didn’t stop there. We continued to share the good news to hopefully increase the visibility of our listing throughout the day. We updated all our social media platforms at the same time. Following some good advice we didn’t stagger our announcements but posted everywhere.

Later we created a second social media announcement focused on the specialness of being listed on St. Patrick’s Day and later in the afternoon we released this graphic:

Mautic Featured on Product Hunt on St. Patricks Day

The response was tremendous. These social media posts helped to boost our presence and awareness of our placement on Product Hunt. As a result we saw an increase in upvotes on the site and our listing began to trend. Things continued to grow as a result and now, the day after we are still “above the fold” as we continue to trend into the second day on Product Hunt.

Conclusion

All in all the day was a thrilling and somewhat wild ride. We saw thousands and thousands of new users and an incredible response to Mautic. Just as we had all suspected, people are thrilled when they discover the power of free and open source marketing automation. My alert may have started with a single chirp from a single tweet, but it wasn’t long before the notifications were coming in so close together the sounds were overlapping.

If you have a startup or a young community then you may be aware of Product Hunt already. If not, you should be. If you are, take a look at some of the tips I shared above to help you capitalize on your listing and do everything you can to maximize your social sharing!

Happy hunting!

burnout volunteers

November 24, 2014
On Burnout

There’s a very popular topic making its rounds lately in open source communities. The concept of burnout. This idea can be roughly summed up as an individual spending too much of their time contributing voluntarily to a community and quickly becoming tired and leaving the community. Unfortunately this does happen and is a very real problem in volunteer-driven communities. If you’re interested in reading more on this then I suggest this post which covers the topic very well. But I want to write briefly on a different aspect. I want to talk about an aspect which might not be as quickly considered and times when there may be a mislabelling of a situation. Let’s talk about what is not burnout.

Burnout is not a catch-all excuse

Unfortunately, burnout is not always the reason for a volunteer stepping away or shifting focus. Sometimes people tend to use burnout as an excuse for more serious problem. What I mean when I say more serious problem? Simple, sometimes when people are leaving a community they are leaving for other reasons besides being burnt out. Maybe they have an interest in something different, maybe they want to focus their time more efficiently, or maybe there is a deeper problem within the community which is keeping them contributing as they would like to. All of these are examples where burnout is not really the cause for change but something else, something deeper, is the real problem and should be uncovered.

The danger of mislabeling burnout

The community suffers when someone mislabels an individual leaving a community as the result of burnout if in fact it’s another reason. By failing to address the real reason for individuals leaving the community there is no opportunity for change. Without change the problem will repeat itself with new volunteers for new contributors. The vicious cycle continues. This is obviously extremely dangerous to a community. If we are unable to correctly diagnose problems within the community and instead resort to mislabeling them as burnout, or the fault of the volunteer rather than the community, the health of the community will be affected.

People make up a community and if those people aren’t perfect, neither are their communities.

Prevent mislabeling

If we want to ensure that we are not mislabeling problems within the community then we need to be very careful when we use the term burnout. So how do we prevent mislabeling a problem? By listening. If we listen to those individuals leaving a community, if we ask them for the reasons why they’re leaving, and if we hear their answer then we can ensure that we label the problem correctly. It may very well be that an individual is leaving because they are truly burnt out. If that is the case then following some of the advice given in the other blog posts such as the one I mentioned earlier is very applicable. However if we listen to their replies and we can see they are not burnt out but instead there are other issues, problems, or concerns that these need to be addressed and labeled correctly.

When a community is strong enough to diagnose problems, to label them correctly, and take action as a result that community will thrive. The community which listens will thrive. Yes, burnout is a very real issue particularly in open source or volunteer communities. But let’s be careful not to label every individual which leaves the community as being burnt out.

joomla development module development

July 15, 2014
Joomla Development 101: Tutorial 14 – Module Helper

Joomla development continues in this Joomla development tutorial with a  focus on the helper file included with a Joomla module. This helper file is an optional file used to provide a bit of organization and clarity to a Joomla module.

The PHP helper file for a Joomla module acts very similar to the helper file we explored previously with the Joomla plugins. As we near the end of the module development tutorial of Joomla Development 101 we will begin to focus on the finishing touches which will make our Joomla module stand out from the crowd.

Lesson 14: Module Helper

Joomla Development 101: Lesson 14 from dbhurley on Vimeo.

Associated Slides for JD101 Module Helper

Previous Posts in Series

May 5, 2014
A Personal Update

moving boxes

Many of you who know me personally know I’m incredibly busy with a number of ventures right now. For those who don’t I’ll give a quick personal update on some of the stuff going on.

It was with some hesitation that I began the process of moving our office into our new location. Why hesitation? Because this is the first office building we’re actually purchasing rather than just renting. The space is large and new, and once the dust settles I’ll probably post some pictures of it. It’s a fantastic opportunity which was pretty much dropped in my lap. I hadn’t really planned on moving or even been looking. But this particular location came by word of mouth from a friend. Long story short what began as a possible rental ended up being a purchase instead. After a bit of back and forth, the usual inspections and due diligence the papers were signed and I had keys in hand.

It’s been a crazy couple of weeks as we packed everything up from our old location and moved them to the new space. Thankfully they are not too far apart from each other and so the move time was minimal. However, we had painting, and new furniture to take care of before we could move in. I learned its important when placing furniture to pay attention to the layout. The company we hired came out and measured each space and provided mockups for what would work best in each office. It was very nice to not be relying on my own guesses but allow the pro’s to work.

We’re just now getting settled and beginning to adjust to work in the new office. I admit it was stressful, but a good experience and it’s exciting to feel like we’re a bit more established now. I’ve also been working hard on letting others do what they’re good at. I’m a dabbler. I love to learn and as such I love to be involved in other processes (like the furniture situation). But I’m learning a valuable lesson. Spend time wisely. Sure, there’s nothing wrong with wanting to know the process and being involved and learning, but at the end of the day, trust the team you have around you. Let them do their job.

The move didn’t just affect us internally though. It also affected our clients. We had to be clear with our clients what they could expect. And ask for them to be flexible with their schedules as we transitioned. I did my best to be open and transparent as I spoke with them and personally conveyed my appreciation for their understanding. I know we have great clients, but I think you’d be surprised how many people will be supportive if you are only honest with them about what you have going on. And of course there were times when I was sitting cross-legged in an empty office with nothing but a laptop on the floor so I could carry on a conference call. Because it’s not just the client that needs to be flexible.

Anyway, there’s a quick update and thought from my personal experiences recently. I’ll probably share some others in the future. I hope something I share helps you as you work through your own personal growth and development.

May 2, 2014
Lessons in Learning Open Source

I’m leading another talk on developing code using an open source framework. Only it’s going quite slow this time. In fact, I’m pausing after every sentence. And yet the room is far from silent and the excitement is quite high. What causes this excitement instead of frustration?

I guess I should clarify. This particular teaching opportunity is taking place in the great city of Sao Paulo, Brazil. And the reason I’m pausing after every sentence is to allow my translator the chance to repeat everything in their native Portuguese. It’s an intense experience. If you’ve never had the opportunity of sharing a highly technical topic with someone who understands only one out of every dozen words you speak then you are missing out on an experience. Now imagine there are a dozen other people sitting in the room also listening to you and trying to follow along. As I said, it’s an intense experience. But it is an unmatched feeling. Incredible might be a better word. And it makes me think about another power which open source possesses. Here’s a few lessons I draw from the unique opportunity of learning open source.

Learning is community centered

Sure, there are books and tutorials and videos, and a multitude of other resources available. In fact, there are schools and courses and an infinite number of ways to learn. However in open source you’ll often find the best learning is done within the community. People learning from people in a group setting.

The concept of group learning is unique in some sense to open source. We’re here because we want to be here. We’re not being paid to spend our weekend sitting in some classroom learning. We do this because we want to learn. And almost as much as we want to learn, we want to help others. That’s the other side of the coin. No matter how much I learn I always always find someone knows more. And someone else knows less. This means just as important as learning more is the idea of sharing knowledge with others based on what I know. Helping others. We’re a community of like-minded people focused on a particular set of values and shared interests. Our learning is centered on this.

Learning is personal

Even though we’ve discussed how learning is community centered learning is also very personal. People grow internally based on their experiences and they learn based on the instruction they are given. This learning causes them to change, and hopefully to improve.

When we are in an open source community we are often stretched outside our comfort zone. We don’t start that way, but over time we grow and the desire to learn more, or to be better forces us to timidly reach beyond our comfort zone and reach out to others. We’re driven by the deep down longing to learn more. As a result of this longing and learning we change who we are (to an extent). We improve ourselves. The very act of learning in an open source sharing community makes us a more well-rounded, and better person.

Learning is empowering

There’s something intrinsically powerful about knowledge. It’s a pretty commonly understood idea. “Knowledge is power.” But extrapolating on that notion leads back to the root that the very act of learning is empowering. By learning we are gaining knowledge and we are gaining power.

Open source is teeming with knowledge. When every line of code which makes up an application is made publicly available to be analyzed and poured over by anyone interested the result is empowering. Open source encourages learning and as such encourages the increase of knowledge and power. When you look at code and see what can be done and learn how to do things better you are empowered to do more. Now you can share that knowledge with others. Now you can become the teacher. Open source alone gives you the perfect environment – the opportunity to learn woven inseparably with the opportunity to teach.

Learning is exciting

I left one of my favorite lessons for last. Learning is most definitely exciting. I’m not referring to the type of learning you were doing in university with first year studies of ancient history (unless you enjoy that kind of thing). Instead I refer to the type of learning you find in an open source community. There’s a rush of excitement you can feel when you walk into a room on a weekend to meet with others in a community for the sake of learning. It’s very exciting.

As I wrap up my session in Brazil, the excitement is clearly evident. People talking over people, hands being raised, fingers flying on keyboards. Yes, this is what open source learning is all about. Watching someone understand the concept you’re teaching. The smile that spreads across their face when they successfully complete a task. The eyes glint with the newfound knowledge and the empowering, exciting, personal growth they’ve experienced. If you’ve never had the opportunity to experience this before. You should. Find a community and become a part. Get involved and see what learning in an open source environment is all about. I guarantee you – you’ll be changed forever.

April 25, 2014
Outside the Box

image

I’m sitting at my desk after pulling another all-nighter working on a last-minute deadline for a project. And before you ask let me tell you, I don’t like it. 

Late Nights

I’m not opposed to hard work, in fact, many would say I work a bit too much. And I love working late at night and early (wicked early) in the morning. There’s something relaxing and exciting about being up when the rest of the house is dark and quiet. It’s peaceful…well, it’s peaceful if there’s not a last minute deadline that you’re cramming to finish your work for. 

As I was wracking my brain with a problem I couldn’t seem to solve and had spent several hours working on it I realized something. It’s not about working harder, but working smarter. I know, I know it’s a very well-known saying and most of the time I do a great job of getting the right amount of sleep and thinking before writing, but sometimes I don’t realize until it’s too late. So what exactly does it mean to work smarter? 

Working smarter means being willing to think outside the box.

When presented with a problem don’t blindly accept a given solution; especially if you find yourself spending hours and hours running in circles without a getting the work done. Thinking outside the box means finding alternative solutions to the problem. If something’s not working and you’ve exhausted your resources, take a minute (doesn’t have to be long), take a deep breath, and take a fresh look at the problem. Look for alternate solutions which you’ve not explored. It may mean a short term expenditure of time, but long-term you could see massive time savings. 

Working smarter also means prioritizing tasks.

Don’t get stuck fighting with a minor problem when you could make great strides forward by focusing on a different part of the job. When you pick your tasks correctly you’ll find you personally feel better because you’ll make progress. Yes, it’s a mind game you’re playing with yourself. But it’s ok, the result is positive. I know it helps me to make progress on things in any form. So moving to a different task which I can quickly complete helps keep me motivated and energized.

Working smarter means sharing responsibility.

Don’t do it all yourself. If you’re anything like me then you struggle constantly with the feeling that you should be the one doing the work because you know it best. But trust me, from personal experience I’ve learned a couple of things. First, I don’t know best all the time. Second, you should take advantage of the skills of others and allow them to succeed at those things they know how to do. Many hands make light work and working as team will accomplish much more than you could ever get done by yourself.

So, where does this article come from? It comes from a long night of hard work where I look back and start to wonder if I’ve been working harder or working smarter. I’m pretty sure this time around I’ve worked too hard and not smart enough. I spent some time doing my research today and have found better ways I could have worked. So this is a lecture to myself as much as it is advice for anyone else. I’ll leave you this time with a quote from a somewhat funny old television show quote.

I’m pullin’ for ya. We’re all in this together.
Red, The RedGreen Show

April 14, 2014
Understanding Your User

image

It’s easy to build a business to meet your needs. You know an industry, a market, or a technology and you want to use that knowledge to build a business. Don’t fall into the trap of designing your marketing plan around yourself.

Not the Man in the Mirror

You are not selling to yourself. Or rather, you shouldn’t be. Instead of talking about your business as if you were talking to someone who understands everything you do – focus on finding your target audience and then understanding what they do or don’t know. Never forget you are the expert. If a user understands everything you do then they most likely don’t need your services.

It’s Easy

Growing your understanding of your audience is easy to do, but it takes time and more importantly it takes thought. Many small businesses fail to understand the importance which should be placed on understanding the user better. You need to stop looking at yourself but focus instead on the ones who need you. Here’s a few ways to help you get started.

Ask Grandma

It’s very easy to find out what other people think or know about you or your business by asking someone from a different age demographic. This is in no way disparaging the elderly. Rather we’re highlighting the differences in life lessons and experiences between generations. Tell an older person what you do and see what questions they have. Be sure to write them down and then figure out how to improve your pitch to answer those questions before they ask them. Ask and then listen. That’s important, you shouldn’t ask them then continue directly on with your own thoughts. You need to ask and then patiently, quietly, listen to what they say. They have different views and different life experiences and if you truly listen you’ll find incredible opportunities for improving yourself.

Play Make-Believe

Most kids play make-believe when growing up. I know my kids do it all the time. I laugh sometimes as I overhear them. They have completely different lives, new names, new ages, new likes and dislikes. And all just for fun in their game. What an absolutely perfect example of what small businesses should do. Pretend to be your own ideal customer. Give yourself a new name, a new age, a new life. Figure out what this “new you” is looking for and then figure out how your business meets a need. It’s a simple concept, for kids it’s simply called make-believe, for adults it goes by another name – personas. I’ll discuss this in depth in a future article. Suffice to say for now, build personas. Play make-believe.

Change it Up

Don’t be afraid to make changes. You can always revert them back if you find they are not working. As you seek to understand your user you need to see what works and what doesn’t. What resonates with them and helps them to understand you and your business. A popular way of doing this involves employing A/B testing (again too much to cover in this post alone). Give your users different experiences. See what works for them and what doesn’t. Learn your users likes and dislikes. As you change it up it’s important that you monitor, report, and improve. Don’t simply make changes for the sake of change. Instead make changes because you believe it will enhance the user experience. You have to monitor the outcomes. You have to be willing to roll things back if they don’t work. But you shouldn’t be afraid to make changes.

Understanding your users should be one of your primary goals as a business owner. Figure out what they want. You’ll find if you take the time to learn your user better you’ll be able to attract the right user. Don’t waste your time selling yourself and your business to someone who is not your ideal customer. Save time, save money, and build the right user-base. All it takes is a little effort, and a few new ideas to start the process of understanding your user.

April 11, 2014
The Ugly Truth About Open Source

image

When using open source software it’s important to recognize the limitations and struggles you’ll encounter. Open source is not equivalent to perfect software. Let’s discuss the ugly truth about open source software.

We all agree the importance open source software has come to play in our world. In fact, as mentioned previously it’s quite the buzz word. But that does not imply perfection. In fact there are many reasons why open source is not perfect and I’ve written previously about 5 ways you’ll fail at open source. I assume you’ve all read that article, have protected yourself against those failures and have pushed boldly on into implementing open source in your company or organization. Congratulations.

Woohoo

If you’re anything like me when I started with open source you’re probably a bit like a kid in a candy store. All the different software products you can now use, and so many of them free and open source ready to be used. It can be overwhelming, and exciting all at the same time. No doubt you’ll start downloading, forking, installing and playing with more than just one. And here’s where the dark side starts to creep in. Here’s the one key takeaway from this entire post:

Just because you can, doesn’t mean you should.

Failure to Integrate is the often neglected side effect of all these open source products. You’ve downloaded and installed 3 or 4 different tools you like. All of them have great features, but now what do you do? Does each user need to login 3 or 4 different times? Does each application have a completely different ‘look and feel’? Your website can quickly become a disjointed mashup of different applications. You’ll find areas that overlap between them as well. Now you have a website where there are multiple ways to perform the same action, but each looks different. Your users will be confused, frustrated, and possibly irritated when trying to complete an action.

Side Note

Now all of you who are programmers or coders know there are ways to solve this. We can easily write a new application using Composer and Packagist to build a single application with the various bits and pieces we want. And yes, that is a great way to build a cohesive full-service solution which takes advantage of all the open source projects without the integration failures. But I’m looking at the site maintainer, the builder, the end-user who is looking at completed projects ready for installation and use.

When organizing your site and exploring the great wide open space of open source technology and products, please exercise self-control, caution, and a bit of discretion. Your goal should be to use open source for your organization’s success and do so effectively. Be sure the end result is a cohesive site which is easy to use, conveys your brand objective and doesn’t leave the user feeling unsure of your mission.

I believe in open source

I completely encourage every business to use open source. The rewards are tremendous. The software available is incredible and the value you can add to your company is huge. Absolutely explore the various offerings. What I find myself most often recommending is setting up a testing server just for the installation of the many different tools you want to try (or just use online demos).

Remember, your staging or production server is not the place where you test software. Once you’ve played around with it, and you decide it’s a tool you want to use on your site – talk to your developer about integration. Find out what it will take to integrate it seamlessly into your existing website. Discuss the areas of overlap and how to handle them. Make a plan. Focus on your end user experience and how to make it a simple, intuitive website. Use open source the right way.

April 9, 2014
5 Ways You’ll Fail at Open Source

image

The term open source is a very hot buzzword these days and it seems everyone wants a piece of the action. Here are five reasons why you will fail at open source.

Now don’t get too pessimistic on me. I’m not trying to be a Debbie Downer. Instead I want to warn about 5 areas where if you are not careful you will be prone to fail. Avoid these five common pitfalls and you will be much more likely to succeed in the world of open source technology.

1. Lack of support

If you plan to release an open source product be mindful of what this means for your support. Don’t expect the community to come to your rescue in providing support for your product. Especially in the beginning. Everyone wants to believe they have the next big thing which will be instantly used by millions of people. Don’t expect floods of traffic and community volunteers beating a path to your support forums to help answer questions. You will be the one responsible. Your team will be in charge of handling questions, encouraging usage, and ensuring that the early adopters are able to implement your product with ease. You are the support – be ready for it.

2. Failure to innovate

This one is an easy one to let slip by. Releasing an open source product means it’s open for anyone to pull down, fork, make changes, and then submit those changes back to you the original creator. This also means you can have new features created by the community and thus improve the software product. But you should never, never rely on the community to innovate for you. You need to be constantly innovating in your product. Setting a course for new features, planning and improving the product yourself. You should lead the way in innovation.

3. Missing culture

Open source is very very different from corporate life. I know you could argue there are ways in which it’s similar but there are also ways in which it differs. One of those areas is in the concept of culture. The culture of an open source project is incredibly important. Volunteers and contributors are giving their time and their talent with no direct monetary return. If money is not a driving factor you should consider what motivates them. The feeling of community, of contributing to something great, of helping out a friend. There are lots of reasons, but these reasons when weaved together form the culture for the product. An environment which nurtures, supports, and recognizes the work of its volunteers will succeed. An open source product missing a culture will fail in time. Establish a culture.

4. Wrong mission

Open source is not a mission. Your product, your organization must have a mission. Why do what you do? What is the goal or the vision that has been decided upon. If you don’t correctly define your mission then the community will not understand your reasons for decisions made. You should be open and transparent with your mission and what you hope to accomplish with your open source project. Be prepared for disagreements and differences of opinions. Be ready to clarify your mission and why you believe what you believe. If you give the wrong mission you’ll attract the wrong community and you’ll ultimately fail. State your mission clearly and stick to it.

5. Fear of failure

Who’s not afraid of failure? We all are. It’s inherent in human nature (or at least in the adults). But every successful open source project will struggle and fail at some point. There will be obstacles to overcome and differences to learn from. If you are too worried your project is going to fail you will be afraid to experiment, afraid to innovate, and you will lose out on the potential success which may have resulted. The fear of failure can take many forms, from indecision when it’s critical a decision be made, or making the wrong decision in an effort to keep vocal individuals happy, or even making the right decision but moving too slowly because you worry how it will be handled or perceived by others. All of these are ways in which you demonstrate a fear of failure. As a result your open source community will sense this hesitancy, the lack of commitment, and will become fearful as well. Don’t be afraid of failure.

Find Success

It’s that easy. Five simple steps which will cause you to fail in the world of open source. Sure there are others, and sure you could avoid these five steps and still fail in open source. Remember open source in and of itself is not a solution; merely a type of product license. Don’t think simply naming something open source will guarantee your success. Be thoughtful as you plan your project, be careful to avoid some of the common pitfalls listed above, and be confident, you can succeed in open source.

Violin Be Brave

April 9, 2014
Childlike Bravery

At times I sit and watch my oldest daughter Kate in utter amazement. She boldly attempts things without any fear of failure. I cringe on the inside and think to myself all the millions of ways it could go wrong.

One particular instance comes quickly to my mind. She was only 7 at the time and had been taking violin lessons for only a few weeks. There was a recital in which some of the older and more experienced students would be participating and her instructor asked her to join them and play a few simple songs. Now, obviously Kate, practiced. She practiced hard.

The day came when she was to play and I was convinced she was not far enough along in her lessons to undertake the daunting job of playing publicly in front of a crowd. Especially not on the violin. It truly is an unforgiving instrument (trust me, I’ve heard hours and hours of practice). And yet, to my shame, Kate boldly stepped up to the center of the stage, placed her violin on her should and proceeded to play the two songs she had been practicing. And she did wonderfully well.

Reflecting on that performance now I’m struck with what I would consider childlike bravery. It’s something I think becomes lost as we become older. We lose the ability to place ourselves in uncomfortable or challenging situations. As adults we try to shelter ourselves from potential failure. We convince ourselves that we’re protecting ourselves from embarrassment – and perhaps we are. But at what cost?

If we were to exhibit more of a childlike bravery where we boldly step forward and attempt things without the fear of failure. If we dare to place ourselves outside our comfort zone, challenge the status quo and truly be brave on the stage in front of the crowd…what could we achieve. Perhaps we would fail.

Perhaps we would be met with jeers and scoffing. But possibly, just maybe we would do wonderfully well.

The Other Side

But that’s only half the story. Here’s the other half. As her parent I consider it my duty to protect her. To somehow take it upon myself to keep her from failing as though I’m doing her some favor. It’s a difficult task because I find myself wanting to stop her too often. But that’s not truly protecting her, that’s doing her the greatest disservice imaginable. Taking away her possibility of failure also takes away any chance of success as well. Keeping her from trying also takes away her optimistic bravado. I take away her childlike faith.

Even as adults we should be careful in the advice we give to others. Be mindful to not squash the dreams of someone else in an effort to falsely protect them. Taking away the possibility of failure will also ruin any chance of them realizing success. We should encourage each other to dream and explore and attempt great things. And so I encourage you – be bold. Try something new. Don’t be afraid of failure. Follow your heart and be brave.

April 7, 2014
The Importance of the User Experience

Below is the slide deck from a presentation given in Atlanta, GA. The animations and movies fail to play, but the basic gist is still relevant.


Bad UX Examples

Good UX Examples

I also referenced the Android UI/UX discussion presented at Google IO. You can watch this UX presentation on Google Developer.

April 7, 2014
Drawing lines

There exists an age-old dilemma and constant battle which takes place in just about every online discussion: Where to draw the line, call for a cease fire, and end a thread. 

image

I’m convinced there is no easy answer. In fact, I’m also convinced the answer varies from one discussion to the next – and from one community to the next. In the world of open source communities (the circle I most frequently travel in) this is an often difficult decision to make. Obviously we want to ensure that everyone has equal opportunity to have their voice and their opinion heard. But clearly we don’t want to encourage bitterness, personal attacks, or hurtful comments either. The job of mediating the discussion should not be the job of a single person but rather should come naturally to those involved in the discussion. Wait a minute – did you read that?

I believe the responsibility for mediation in a discussion falls on the shoulders of the people actively involved in the debate.

Even when discussing very passionately the belief and viewpoint you have – you need to always be in control of your own words. Be careful to not fall into any of the common logical fallacies

Perhaps even more important then not sidetracking a discussion with one of these fallacious arguments is the ability to moderate your own comments to the issue at hand and not turn on a person or emotional plea. I admit this one is hard. Especially when believing strongly about something, but perspective is key. Always keep the relationship in mind. And always keep in mind how the debate appears to other people not involved. 

When discussing a topic in an open and transparent environment, there are sure to be others watching. Not only are they interested in the outcome of the debate but also interested to see how the community handles itself in conflict. 

The hardest line to draw is the line in front of yourself. And then be bold enough to step back from it.

Speaking of drawing lines, I’d like to close with a short humorous video regarding an engineer’s approach to drawing multiple colored perpendicular red lines. 

April 5, 2014
Unique Presentations

It’s one of the most frequently asked questions I receive when speaking at an event. “Do you reuse your presentations?”

My answer is one I’ve thought about carefully and can answer quickly. No. But I don’t usually leave my answer at that. I like to explain my reasoning why. As I said, it’s a question I have been asked often because it’s certainly the simple thing to do. I travel around the globe speaking in remote parts of the world and many times on the same or very similar topics. Isn’t it smarter to practice, practice, practice the same talk to deliver it with ease and confidence? I’ve decided something different.

Boring Talks.

I believe the problem with this concept is – rather than becoming more prepared, I would tend to become lazy, not thinking or preparing but rather relying on my past deliveries and that it’s an old slide deck I’ve done many times before. And the result would be an uninteresting, boring talk. 

Lessons Learned

This means I must spend the time to prepare for each and every talk. It also means it will take even more of my time because I must, must practice. My high school speech teacher would be proud. He instilled the principles I still use today:

  • Never Write It All Down
    Obviously, it’s important to make an outline, be sure to be clear and concise with your points and make sure you’re coherent. But you should never write your speech out word for word. This makes you attempt to memorize and lose your intensity.
  • Practice and Practice
    Don’t leave it to chance. You should always practice your entire presentation from start to finish. Outloud. You can use a mirror, you can video yourself, but you must vocalize your presentation and practice what you plan to say.
  • Be Self Aware
    You should always know what your body is doing while you speak. Don’t fidget. Keep your hands calm and relaxed. Be aware of any pacing, rocking, or unnecessary body movement.

There are of course many more lessons I’ve learned but I will leave those for another post.

Show Them What They Mean

I believe I am sending a message to the audience when I prepare a presentation just for them. Because it’s more than just a slide deck (as mentioned above), it’s the time, the thought, and more. All these things tell the audience I care about them; they are important to me; and I respect and value the time they are giving to me. It’s a responsibility and an opportunity that shouldn’t be taken lightly or done with a sense of apathy.

Be Real

Most importantly, you can easily be real, and passionate about your message if you follow these steps and prepare fresh presentations for each of your talks. Try it, you may find your next speaking opportunity to be your best ever.

April 4, 2014
Conflicts in a community

Any time you bring people together you will have more than one opinion. Instantly. On anything. I can’t tell you the number of times I’ve heard of arguments in a group of people over some of the silliest things. It’s human nature. We want others to agree with our point of view. We want everyone to see things our way, and yet, we also know if we all shared the same view there would be something seriously wrong with us.

If two people agree on everything, one of them is unnecessary
— Winston Churchill

How we handle conflicts within a community is important to the long-term success of the community. Let’s examine the concepts involved in conflict resolution within a community of individuals. To begin we should focus on why this group of unique individuals has come together.

What is a community?

A clear definition of terms is always important when discussing things. How can we discuss something if we are looking at two different things? So let’s look first at the definition and structure of a community. I think this is a great place to start. Obviously I assume most of us have a fairly good grasp on what comprises a community so we’ll run through this quickly. According to Wikipedia a community is defined as follows:

community is a group of people whose identity as a group lies in their interaction and sharing. Many factors may affect the identity of the participants and their degree of adhesion, such as intent, belief, resources, preferences, needs and risks.”

That’s a basic definition which serves our purpose quite well. A community brings a group of people together to form a common identity. Singular. One identity. A group of diverse people forming a single identity around a unique intent or belief. Seth Godin offers a slightly different definition on his blog and in his book, Tribes:

Working side by side doing something that matters under adverse conditions… that’s what we need.”

But there are many, many types of community. Let’s save some time and look at only a few of the more common types (want to see the full list? check the footnotes).
Voluntary Association: A group of individuals who voluntarily enter into an agreement to accomplish a purpose.
Interest: A group of individuals who share a common interest or passion
Practice: A group of individuals who choose to collaborate over an extended period to share ideas, find solutions, and build innovations.
Purpose: A group of individuals who are going through the same process or are trying to achieve a similar objective.

So, step one, evaluate what type of community you have joined. Does it fit a distinct definition above, more than likely it’s a hybrid of one or more types. It’s important to start here though. You need to know the underlying purpose of the community you are volunteering in. This will help as we continue to the next step.

Find your motivation

Once you have a good working definition of exactly why your community is formed you need to work out why you want to volunteer and be a part of it. What motivates you? Why do you want to invest your time, talents, and energy in this community. It’s an interesting question I admit. Interesting because it’s simple and yet surprisingly complex. What drives us to do the things we do. Sometimes I’m not sure how to answer this myself but it’s a good exercise to undertake.

But wait, it doesn’t stop there. It’s not a one-time question either. Not only do you need to know why you want to start volunteering but you need to periodically ask yourself why you wish to continue volunteering. Has your motivation changed? Has the community changed? If you answer yes to any of these questions then you need to take a moment and thoughtfully consider your situation. Have your feelings changed, have you lost your passion, drive, or motivating desire; if so, then you know it’s time to move on to a new community and a new opportunity.

Side Topic Let’s talk about that for a minute. I just said move on. Does that mean I think your services as a volunteer are of no value? Absolutely not. Every single individual has a unique set of talents and abilities that together form the identity of a community. Does that mean you should never move on. Absolutely not. Interests change, people change, and as we just discussed communities change. It’s not a badge of honor to stay in a community where you are not happy. This leads easily to the next question…

What makes you happy?

If we take the answers you worked on earlier (you did work on them right?) then now you need pick them back up. An important part of any community is evaluating how volunteers are appreciated. See how this relates to your happiness? If you know what makes you feel appreciated and fulfilled and you can define it, you’ll be much more likely to find a community which fits. What are common methods of appreciation in the workplace? Gary Chapman has written a great book on the topic, The Five Languages of Appreciation in the Workplace. Below is a quick summary. I highly recommend reading the full book as it offers a much more detailed review of each.

  1. Words of Affirmation: Uses words to to communicate a positive message to another person. Praise for accomplishments, affirmation of character, praise for personality. This affirmation can take the form of one-on-one, a group setting, and in either written or verbal format.
  2. Quality Time: Giving the person your focused attention. This means quality, focused conversations, listening to thoughts and feelings, and all without distractions or disruptions.
  3. Acts of Service: Providing assistance “What can I do to help?” Assisting someone in the way they would like things done. Be sure to ask before helping.
  4. Tangible Gifts: Physical items, could also be time off. Remember they should be something the person values.
  5. Physical Touch: Human to human contact. This is not a primary means especially in the workplace. Examples would include fist-bumps, handshakes, and high-fives.

As I mentioned, these are only brief summaries and the book provides a very good opportunity to explore the many aspects of appreciation. I want you to take a moment now and review this list. Rank them from greatest importance to those of least importance to you personally. If you know what affirmation is most fulfilling to you then you’ll be more able to recognize how to achieve personal satisfaction from a community.

Whew! Ok, enough of a side-track. Let’s get back to the issue at hand. Conflicts and resolution. First, the conflict.

Conflicts

Now that we have a good definition of community let’s look next at conflicts. Do you hear the word conflict and cringe? I encourage you not to feel too strongly against the idea of conflict. There are, in fact, many benefits and potential positive opportunities which arise from conflicts. We’ll start with a working definition of conflict from Merriam Webster dictionary:

“A difference that prevents agreement : disagreement between ideas, feelings, etc.”

Interestingly enough this is the third definition of conflict, the second definition also includes the idea that conflict “results in often angry argument”. This is the part most people associate with conflict. Angry argument. But I’d suggest the third definition listed above is perhaps a more practical and ideal definition. We all know conflict can be perceived as negative and I’ve already alluded to the idea of conflict avoidance. But there are benefits of conflict as well. In fact, several studies have been done on the subject of the positive benefits of conflict. According to a study, published by Ohio State University, there are a number of positive effects of conflict, including improving the quality of decisions, stimulating involvement in the discussion, and building group cohesion. Conflict is always present. It is not an obstacle to avoid but rather an obstacle to overcome. Conflict typically stems from three basic types: task conflict, interpersonal conflict, and procedural conflict.

  1. Task Conflict: Deals with disagreement about the substance of the discussion. These conflicts can result in improved decision quality. Also, a conflict based on the task can result in a better more thought-out “flow” through the decision process. This can be a positive conflict and resolution.
  2. Interpersonal Conflict: Often described as personality clash. This occurs when individuals disagree with another individual for reasons unrelated to the issue being discussed. This conflict will usually take the form of antagonistic remarks against personal characteristics of another person.
  3. Procedural Conflict: This conflict results when there is a disagreement over the procedures followed to accomplish a goal of the community. This conflict can be a positive form of conflict as it can lead to new procedures being formed and even possibly new goals being defined.
“Peace is not the absence of conflict but the presence of creative alternatives for responding to conflict- alternatives to passive or aggressive responses, alternatives to violence.” — Dorothy Thompson

What can we conclude from this list of conflict types?

First, conflicts are not always bad. Conflicts stem from a variety of reasons and many of them are extremely beneficial for the good of the community. They are not something to be avoided but rather taken as opportunities to improve the community. New tasks, new decision processes, new procedures, and new goals are all possible successes which can result from positively handled conflicts. Second, conflicts are not always resolvable. We’ll discuss the process of conflict resolution in more detail next. However, not every conflict can be easily handled or resolved positively. In particular, interpersonal conflicts can rarely be easily resolved as personal character qualities and preferences heavily influence our opinions and beliefs about other individuals. If a conflict is not resolvable then you need to learn how to best deal with these conflicts as appropriate for the community.


Resolution

Ah, we’ve made it through the tougher part. We can now talk about the resolution to conflict. There are a number of steps resolved in proper conflict resolution and according to the study mentioned earlier we’ll discuss each step.

  1. Recognize and acknowledge existence of conflicts
    This seems basic right? Obviously we can always tell when conflicts exist; ok, maybe not always. Sometimes recognizing conflict is more difficult then you may admit. Identifying not only that conflict exists but also the type of conflict (see above) and then being willing to acknowledge that the conflict exists. If you don’t recognize a conflict then clearly you can’t resolve it.
  2. Analyze the existing situation
    Once you’ve recognized and acknowledged the existence of the conflict you need to analyze the situation. What is the current situation? How severe is the conflict? What are the possible outcomes and what are some worst-case scenarios? This is not a step to skip. Before being able to properly resolve a conflict you need to be able to step back and look at the entire situation.
  3. Encourage communication
    Here’s where it starts to get a little more intensive. This point in conflict resolution is where passions start to get involved, tempers have the greatest chance of flaring and resolution becomes more difficult. But communication cannot be and should not be avoided. Here’s some items to attend to while encouraging positive and constructive communication.
    — Free discussion
    — Encourage accurate communication
    — Listen and raise questions
    — Allow free expression
    — Supply relevant information and facts
    — Maintain objectivity (no emotional pleas)
    — Focus on the issue and not people
    — Be gracious when successful

This great list can be found in the same study shared earlier and listed in the footnotes below. I cannot stress enough the importance of each of these items. This is the crux of the entire resolution process. If you are not careful to actively pursue each of these items during the communication phase the entire process will stall. Communication will break down, and conflicts will abound without resolution.

Summary: Properly encouraged conversation involves free discussion related to the accurate and relevant information shared tactfully and without personal bias.

The outcome

Once these steps have been taken there is a simple plan to reach a resolution. Discuss the options (this is done mainly through the communication step previously), analyze the options, negotiate a resolution based on the facts, make adjustments, and lastly, live with the outcome of the resolution. Not every outcome is a clear “win” for one side of a debate. Most often you’ll find a blended result to be the negotiated result. I would suggest there are in fact, three possible outcomes which can result from successful conflict resolution.

  1. Compromise with a full agreement
    This is the ideal outcome. In this outcome both parties agree completely with the result and both sides believe the resolution to be the best and most successful resolution to the conflict.
  2. Compromise with partial agreement
    This is a second often experienced outcome. In this outcome one party (or both) will make concessions to reach an acceptable resolution, these concessions may cause them to not fully agree with the resolution and yet, as a result of successful communication are able to negotiate a compromise which can be partially agreed upon.
  3. Compromise with no agreement but acceptance
    This is the least desirable outcome, however still a valid resolution to conflict. In this outcome one party accepts the resolution but disagrees with the result. This typically involves accepting a solution to end a conflict but stating a disagreement with it. This should be a last resort for conflict resolution and the party in disagreement must be exceptionally careful to not allow the disagreement to be overpowering of the acceptance. Again, tact and grace are desirable character qualities to exhibit.
Courage is what it takes to stand up and speak. Courage is also what it takes to sit down and listen. — Winston Churchill

Putting it all together.

I’d like to finish with three important take away points. They are quite simple: respect others, stick to the facts, and be willing to compromise. Allow me to elaborate briefly on each.

First, respect others. Be careful to debate the issues and not the person. Be respectful of others. You wouldn’t like someone attacking you in a debate; give them the same courtesy. Obey the golden rule. Remind yourself of what we looked at in the first point above — why you are volunteering? And remember, as a community we have a single common identity.

Second, don’t let your emotions control your discussion. Avoid being overly dramatic in an attempt to “win votes”. It’s hard to keep this in mind when discussing something you’re deeply passionate about. It is also hard when you must convey your thoughts on a language which is not native to you, the nuances of languages, especially English, can be a nightmare. Do your best to think through your words before speaking — choose carefully. This becomes easier when only discussing facts. State facts clearly and concisely. And then listen to others’ responses.

Lastly, work together to negotiate a solution. Compromise is often the result of debates. Don’t expect to always win everyone to your point of view. You may have times when you clearly state your facts and it is evident to all the truth in your view; more than likely some compromise will be necessary. This is not failure. You are not losing the argument to come to an agreement which involves sacrifices on both sides of an issue. See our previous point regarding the outcomes of a conflict.


About the author
David Hurley is a small-business owner with a passion for open source communities and realizing the power of people working together. He volunteers his time to a number of non-profit organizations where he seeks to enable others to become more empowered and to love what they do. You are welcome to follow him on twitter: @dbhurley or LinkedIn: /davidbhurleyor contact him through email or Google+ David Hurley

Sources
Intentionally building communities (More hallway!)
— http://sethgodin.typepad.com/seths_blog/2009/04/intentionally-building-communities.html

Conflict Management in Community Organizations
— 
http://ohioline.osu.edu/cd-fact/l701.html

Outline of Community
— 
http://en.wikipedia.org/wiki/Outline_of_community

The 5 Languages of Appreciation in the Workplace: Empowering Organizations by Encouraging People
 Gary Chapman http://www.appreciationatwork.com/

http://www.merriam-webster.com/dictionary/conflict

http://en.wikipedia.org/wiki/Outline_of_community

April 2, 2014
Lessons in Coding: Don’t Repeat Yourself

image

I’m a parent. That tends to sound a bit like a confession. But most people who know me also know that I love kids. I have three children right now, and hope to add more in the near future.

I’ve learned many things from being a parent. I learned there is a strange phenomenon with children where they cannot hear something they are told unless I tell them multiple times. It’s interesting because it doesn’t seem to be all the time, only certain times, and usually only those times when they need to do something they don’t particularly want to do. And I really get tired of repeating myself. It gets quite annoying after a while.

Ok, so now everyone’s wondering, what does this have to do with coding and best development practices. Today I want to talk about the principle of Don’t Repeat Yourself.

Definition

Wikipedia defines the Don’t Repeat Yourself Principle as follows:

Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

Let’s take that definition and break it down into some easy-to-understand pieces. And then let’s apply it to code.

Every piece of knowledge: In development that could be a class, a function, or merely even a block of code within a function.
single, unambiguous, authoritative representation: code should exist only once and it should be clearly written.
within a system: inside your component, module, plugin, application etc.

If we take those pieces and re-write the definition in our new terms it would look more like this:

Any code written and used within your component should exist in only one location and be clearly written.

That seems to make more sense. Now that we have a good working definition of what is involved in the principle of Don’t Repeat Yourself let’s look at some examples of how you would do this within your code.

Example of Bad Code

function getSingleItem($id) 
{
   // assume all variables needed
   $query = $this->db->getQuery(TRUE)
            ->select($this->db->quoteName(array('i.*', 'c.name', 'a.something')))
            ->from($this->db->quoteName('#__myitems', 'i'))
            ->join('LEFT', $this->db->quoteName('#__categories', 'c') . ' ON (' . 
              $this->db->quoteName('i.category_id') . ' = ' . $this->db->quoteName('c.category_id') . ')')
            ->join('LEFT', $this->db->quoteName('#__attributes', 'a') . ' ON (' .
              $this->db->quoteName('a.item_id') . ' = ' . $this->db->quoteName('i.item_id') . ')')
            ->where($this->db->quoteName('i.item_id') . ' = '. (int) $id);
   $this->db->setQuery($query);
   $item = $this->db->loadObject();
}

function getManyItems($ids) 
{ 
   // assume all variables needed 
   $query = $this->db->getQuery(TRUE) 
            ->select($this->db->quoteName(array('i.*', 'c.name', 'a.something'))) 
            ->from($this->db->quoteName('#myitems', 'i')) 
            ->join('LEFT', $this->db->quoteName('#categories', 'c') . ' ON (' . $this->db->quoteName('i.category_id') . ' = ' . 
              $this->db->quoteName('c.category_id') . ')') 
            ->join('LEFT', $this->db->quoteName('#__attributes', 'a') . ' ON (' . $this->db->quoteName('a.item_id') . ' = ' . 
              $this->db->quoteName('i.item_id') . ')') 
            ->where($this->db->quoteName('i.item_id') . ' IN '. implode(',', $ids)); 
    $this->db->setQuery($query); 
    $item = $this->db->loadObject(); 
}

Does that code look similar? It should. I created the second function by copying the first function and then changing a single line. (Hint: Look at the “where” clause). So what would this code look like if I re-wrote it but did so without duplicating any lines of code? Here’s one possible example.

Example of Better Code

function getSingleItem($id) 
{ 
   // assume all variables needed 
   $query = $this->getQuery(); 
   $query->where($this->db->quoteName('i.item_id') . ' = '. (int) $id); 
   $this->db->setQuery($query); 
   $item = $this->db->loadObject(); 
}

function getManyItems($ids) 
{ 
   // assume all variables needed 
   $query = $this->getQuery(); 
   $query->where($this->db->quoteName('i.item_id') . ' IN '. implode(',', $ids));
   $this->db->setQuery($query);
   $item = $this->db->loadObject();
}

function getQuery() 
{ 
   $query = $this->db->getQuery(TRUE) 
            ->select($this->db->quoteName(array('i.*', 'c.name', 'a.something'))) 
            ->from($this->db->quoteName('#myitems', 'i')) 
            ->join('LEFT', $this->db->quoteName('#categories', 'c') . ' ON (' . $this->db->quoteName('i.category_id') . ' = ' . 
              $this->db->quoteName('c.category_id') . ')') 
            ->join('LEFT', $this->db->quoteName('#__attributes', 'a') . ' ON (' . $this->db->quoteName('a.item_id') . ' = ' . 
              $this->db->quoteName('i.item_id') . ')');
   
   return $query;
}

Instead of re-writing the query function twice, once inside of each function, I have extracted the repeated code and written it as a third function which I can now call from either of the two other functions. It seems simple. In fact, many developers are probably already implementing this type of coding to make their code better.

Benefits

Why is it important to not repeat yourself? There are many benefits to writing your code only once. Sure, nobody like to waste time writing code over and over again, but even more importantly you reduce the chance for bugs to occur. Less code means less chance of failure points. I am sure we’ve all had those moments when we can’t find the problem until after wasting an hour or more looking you find a missing semi-colon. I know it’s happened to me. There are other benefits too. When you later realize you need to add another table on to the query because your client needs more information from the database you only need to update one query now!

I hope many developers are already aware of this principle of Don’t Repeat Yourself. If this is a new concept, congratulations you have now learned what it means to write DRY code. I wanted to start this series with an easy topic and though this doesn’t cover every technical detail of this principle it does focus on a strong aspect of it. In the coming releases I look forward to looking at more principles of good development.

March 8, 2014
Code Like A Boss

Below are the slides for a talk I gave recently exploring the similarities between the role of a boss and the role of a developer.

January 29, 2014
Tip of the Day: 29 Jan 2014

Mac Tip: If you have ever been on a call through your Mac, or if you’ve been listening to music, or if you simply need to modify your volume level then you are aware that your Mac will happily make little popping sounds as you increase or decrease your volume. Not always the best thing. But perhaps you don’t want to completely disable the sound. Here’s your tip of the day:

Hold the Shift key down while increasing or decreasing your volume and the sound will be suppressed. 

It’s small and possibly most people already know it, but for those that aren’t familiar with it or have forgotten it, this is a handy little tip.

December 13, 2013
Do the Hard Things

We all have a good laugh at watching Donald Trump and his now famous line, ‘You’re fired!’ when he decrees someone on his reality show unworthy of continuing. But I think part of the appeal is the simple fact that confrontation like this is difficult. The stress and anxiety which accompanies it is hard to handle and most people (I’m sure there are some that would disagree) do not enjoy being the ‘bad guy’.

The Outsider
It’s a relief to watch someone else do what we don’t enjoy doing. It’s fun to see it happen. It can also be a learning experience. Watch the outcome of what happens. Sure, there are hurt feelings and frustrations and perhaps even some anger. But what is the overall end result? Improvement. A better solution for both the company AND the fired individual. Obviously things were not working out and neither the company nor the employee were happy. 

The Employee
Do we like to be told when we’re not fitting somewhere? No. But we know deep down inside we’re not happy with the situation. It is very difficult to admit personal shortcomings and failures. It goes against human nature and our desire to succeed and be perceived as successful. So we suck it up and try to ‘suffer through’ a situation that is not healthy. But this does not lead to better productivity or better work. Things continue and more than likely grow worse. It’s unhealthy. 

The Boss
It’s not fun to have to be the one to tell someone they do not fit in. It’s difficult to look someone in the eye and tell them they are not doing what is necessary. We see a person standing there, an individual with feelings and stresses and concerns and the last thing that we want is to be the one that has to let them know they are not meeting expectations. It’s not fun. So we suck it up sometimes. We ‘suffer through’ and except mediocre work and poor performance. We hope that it’s going to ‘get better in time’. The truth is, it hardly ever does. 

The Winner
Who’s the true winner in this situation? To be honest, those in leadership who are willing to make the hard decisions, who are willing to look someone in the eye and do what needs to be done. But they are not the only winner. The employee who acknowledges the situation accepts the outcome. They win too. Because their quality of life will increase. So it might be hard, but it might be necessary. Do the hard things.

December 12, 2013
The Voice

No, I’m not talking about the popular NBC hit show rather I refer to the ever growing dilemma of social media and personal vs. professional opinions. Where does a work or volunteer commitment truly end and personal feelings start? 

Historically
There have been many public cases where employees were fired for expressing their views regarding a situation. Is that legitimate? Does working for a company automatically grant that business full control and access over a person’s freedom of speech? Or (speaking outside the United States) does it give full control over every public comment to your place of work?

Option 1: Public Disclosure
It’s a tough call and puts both businesses and employees in a difficult position. Everyone wants to believe it’s easy to separate the two and just make a statement that they are expressing a personal opinion. But does the reader truly make that distinction and separation? I doubt it.

Option 2: Multiple Personas
The next step is to create duplicate profiles. Is this effective? Probably not. Most people know only one face, and it’s likely to be the one associated with a company. Even if it’s not, the odds are high they know where you work and your relationship. So again, you lack separation.

Option 3: Passive Aggressive
Often this is the path taken by people. Don’t specifically state anything instead speak in vague generalities and hope the right people infer what you intend. I think this is one of the worst ways to handle it. This too often backfires with everyone knowing exactly what you intend to say and serves to only make matters worse. Again only my opinion, but I’ve seen this happen firsthand. Nobody is fooled by a thinly veiled generality.

Option 4: Use Discretion Always*
I believe the best (and only) approach is to be thoughtful and exercise discretion in ALL public communication. Note: I said public communication. Among your friends, in closed rooms, and in the appropriate setting I believe it’s good to air your concerns and your questions. In public, your conduct should always be considered a reflection of your place of business. This means breathing more and writing less. Being careful of your word choice and your tone is important. 

Bottom Line: Be Polite
Don’t respond in anger or frustration. Try to evaluate the outcome of your post and what your desired goal is. Then filter again. Be respectful, be polite, and be good. It sounds simple, but in the heat of a moment, so very easy to forget. 

November 22, 2013
Bringing Back The Mullet

Here’s the slide deck and the associated video for a fun talk I gave at the Joomla World Conference 2013. 

And below is the video of the talk, though I admit I hate hearing myself speak!

October 8, 2013
Go Forth and CODE

Here are the slides for a talk I gave recently discussing 4 key points for staying active in a community and ways to apply new found knowledge.

September 24, 2013
The Future of Joomla

This is the slide deck for a presentation given at JoomlaDay France 2013. The topic was the future release of the Joomla content management system. 

September 21, 2013
Joomla! and You

The following presentation was given at JoomlaDay North Carolina 2013. The focus was demonstrating how easy it is to get involved in the Joomla! project and the many opportunities available

September 13, 2013
Joomla!, The Future, and You

This presentation was given at Joomladagen Netherlands 2013. Below are the slides.

May 22, 2013
Radical Joomla! Ideas

Below are the few, simple slides used to present radical ideas at J&Beyond 2013 in Amsterdam, Netherlands. 

April 26, 2013
Responsive Templates in Joomla!

This is the slide deck for a talk given at JoomlaDay Guatemala 2013.