Showing posts with label problem solving. Show all posts
Showing posts with label problem solving. Show all posts

Tuesday, August 21, 2018

Articles You Should Read

Here are my current favorites articles, in no particular order. I've shared them all at work and now I'm sharing them with you.


The Guard: I've read this article at least nine times now. I identify most with being the Old Guard, which makes me cringe helplessly every time I read it. It is thoughtfully written and makes some excellent points about how a team starts to trust themselves. Key excerpt:
  • The Old Guard: "I feel empowered to fix everything."
  • The New Guard: "I don’t know how to fix anything."
Teaching Iteration: High schools around the world need to start teaching this topic now and it should be a mandatory course. The cool thing is that the core concept can be applied to just about any subject. Let the students pick the thing they have an interest in and teach them skills for "how to make it better". 

Don't Get Blocked: This may be the closest thing I have to a personal mantra. The anti-pattern is people who like putting up roadblocks. Those people should get (symbolically) run over.

Wednesday, April 27, 2016

Workplace Strife Advice


This post is a second chance.  A respected coworker asked me for advice on a heated personal office conflict, and while I think I gave a good answer, he was unconvinced.  In hindsight, I did not do a good job explaining some good reasons for the answer I gave, which summarized, would be:
Take the easy out and move on as quickly as possible.
While I suspect there is professional pride involved in the disagreement, it is in the interest of everyone in the office to get over it and put it all in the rear view mirror so that work can progress.

My second chance advice on the nature of the conflict derives from what I know about my coworkers:

  • They are both experienced team leads
  • Both teams work on the same software project; developers and quality control
  • They work in geographically separated offices 
  • Neither has met the other in person
  • They do work together on a daily basis via team chat, emails and morning scrum

I have an long drive home from work, so I naturally started to reflect on that conversation and the difficult situation that my friends were in.  I came up with the following points that may help someone else who is experiencing a difficult personal interaction that is seemingly at an impasse.
The very best solution, of course, would be for both people to meet (or call because of being on a distributed team) and work through the differences so they can continue together as a high functioning team.
But short of that, I believe all of the points below are helpful.  They are not meant to be used all at once as a big fire-hose solution to extinguish a workplace fire.  Rather, I'm hoping one or more of these register as a well made point that makes sense and helps someone through a similar conflict.

I also hope these points are not taken as being callous, as any one of them would resonate with me if I was in the same situation (seemingly stuck without chance of agreement nor common ground reached), and someone offered me an outside view of my situation.

  1. Your future self does not care about this argument as much as you do. Look back on this situation in 10 years and realize that it simply was not that important.
  2. As a team lead, you need to consider that time spent extending a conflict is time taken away from your leadership responsibilities owed to your junior team members
  3. Being wrong can be a drastic side effect of choosing your Perfection over their Very Good.
  4. The thing you are arguing over may be of-value, but the argument itself is valueless. You were hired for your life experiences and professional skill set, neither of which are being put to use to solve the problems you should be working on. You expect to be paid for excessive time spent arguing?
  5. So, you've been challenged to a High Noon showdown and you're asking for advice on which ammunition to use instead of how to avoid a public gunfight?
  6. If you're mutually blocking each others progress, does it matter who gets credit for standing their ground the longest? There is no absolute right or wrong in matters of opinion.
  7. Don't get blocked! It IS within your power to move forward. 
  8. Is your professional ego more important than your human interactions? What is the point of being "right" if you are causing, or prolonging, a painful situation when both of you are literally losing sleep over it? Conflict is natural, but suffering is not.

What advice would you give a coworker in a heated, ongoing situation?



Monday, December 28, 2009

"There’s no success quite like failure"

From Accept Defeat: The Neuroscience of Screwing Up:

"This is why other people are so helpful: They shock us out of our cognitive box. “I saw this happen all the time,” Dunbar says. “A scientist would be trying to describe their approach, and they’d be getting a little defensive, and then they’d get this quizzical look on their face. It was like they’d finally understood what was important.”

What turned out to be so important, of course, was the unexpected result, the experimental error that felt like a failure. The answer had been there all along — it was just obscured by the imperfect theory, rendered invisible by our small-minded brain. It’s not until we talk to a colleague or translate our idea into an analogy that we glimpse the meaning in our mistake. Bob Dylan, in other words, was right: There’s no success quite like failure."

Tuesday, September 25, 2007

How to Host a Web Server at Home With Dynamic DNS

There are a lot of moving parts to get right to do this, and not a lot of good advice about how to do it successfully. I hope that my steps will help you get it right the first time.

My need for an at home hosted web service came from trying to develop a simple FaceBook application. I needed my application hosted somewhere quick and didn't want to pay for hosting. I'm comfortable using Tomcat to host my java applications, so I decided to try to host my application at my computer at home for easier development and debugging.

The trick for hosting a site that is publicly accessible is to be able to use a non-moving target for DNS servers to resolve. Since most people don't get a static IP for home use without paying extra for it, they are stuck with a Dynamic IP address. This means that behind the scenes, you are "leasing" the IP address for a period of time, after which it is revoked and another address is assigned to you. For normal internet use, this is a seamless operation, but for web hosting we need a little help. I suggest using the free service offered by DynDNS to do hostname to Dynamic IP mapping. With their service you can create a hostname (for example, http://codebeneath.dyndns.org, a subdomain to dyndns.org) and configure that to resolve to your current IP address, which they detect for you. Or if you prefer, hit IP Chicken :)

Now, you need a way to detect when your IP address changes and automatically update your DynDNS entry. There are standalone clients that can do this, but I was lucky enough to have the capability built into my router, a LinkSys BEFSX41.



I have heard that some internet providers block port 80, so I decided just to use the default Tomcat port, which is 8080. If you stick with port 80 and run into problems, this may be the cause.

Next, we need to configure the router to forward all incoming port 8080 traffic to Tomcat. There are several ways to do this, depending on your router. The solution I don't recommend is enabling the DMZ Host setting (this is overkill and a potential security problem if you don't know what you are doing). The remaining alternatives are Port Range Forwarding and UPnP Forwarding. Port Range Forwarding is geared more for specialized internet applications such as videoconferencing or online gaming and can be used to forward an entire block of address at once.

For my case, I picked the simplest thing that worked: UPnP Forwarding. When I started, this was not the clear choice of how to do this, and many differing opinions steered me to conflicting directions. Compounding my confusion was an out-dated router firmware that provided administrative pages with different terminology and that did not even have UPnP Forwarding as an option.

I do recommend updating your router's firmware to avoid the same confusion I had and to have the latest security patches in place.

Login to your router by pointing your browser at the admin URL. For my LinkSys, the admin URL is http://192.168.1.1/. The default username is blank (none) and the password is "admin"

If you still have your default password, change it immediately before proceeding further!



Click "Applications and Gaming" > "UPnP Fowarding".

On the first blank line enter "tomcat" as the application name, "8080" as the Ext. Port, "TCP" as the protocol to allow, "8080" as Int. Port, your internal network address (e.g. 192.168.1.xxx) and mark the Enabled checkbox. To obtain your internal network address, open a command shell and type ipconfig. A gotcha to watch out for is that your internal address may also be dynamic if your router assigns addresses via DHCP. To avoid this, you could statically configure your network devices addresses, but for my purposes DHCP was OK.



Save the router settings and close your browser.

Start Tomcat and make sure you can access http://localhost:8080. If so, then try the public address you created at DynDNS (in my case http://codebeneath.dyndns.org:8080). If all is well, you should be seeing the Tomcat welcome page! Deploy your web application and happy web hosting.

Tuesday, August 28, 2007

Microformats: A DoD Use Case

Microformats have been around awhile, but I have just recently took the time to find out what they are and what they can do. A good starting place I can recommend is microformats.org. Basically, using microformats means adding attributes to existing html elements to enhance the meaning of the content.

The physical address presented on this blog is marked up, for example, as a hCard.

<div class="vcard">
<div class="adr">
<div class="org fn">
<div class="organization-name">Gestalt-LLC</div>
</div>
<div class="street-address">320 East 4th Street</div>
<span class="locality">Joplin</span>,
<abbr class="region" title="Missouri">MO</abbr>
<span class="postal-code">65801</span>
</div>
</div>


This could be thought of as a lightweight semantic web enabler. And the beauty of course is the simplicity of it. It is suitable for use in marking up HTML, RSS, Atom or XML.

So now the question: what could be accomplished with microformats? What might be a scenario in a military domain?

  1. A soldier is observing and recording enemy aircraft taking off from a hostile airfield. He microblogs about it on a ruggedized PDA marking up the aircraft information in a military airframe microformat (date, time, aircraft type, payload configuration, number of aircraft in formation, observed tail numbers, for example).
  2. This is an unanticipated observation, so the data may not be immediately useful or actionable.
  3. But, Google will find it (and yes, the DoD has Google appliances running on their classified networks). Not necessarily based on the microformating, but based on its normal searchable content. Technorati, however, does have a microformat search engine.
  4. These search results are microformat parsed and fed into a Temporal Analysis System (TAS) whose job in life is to predict the future by comparing recent events with similar historical events chains and their outcomes.
  5. It turns out that what the soldier observed, perhaps 10 cargo aircraft, all with extra fuel pods, bearing NNW, from grid reference 18SUU8401, is a 90% predictor that the hostile battalion will be mobilizing and deploying in 72 hours.
  6. Useful information to know derived from someone outside the normal chain of command and information flow!
Powerful and simple.

Monday, August 13, 2007

Accountability and the Knowledge Worker

Are you a Knowledge Worker? Fred Nickols really sets the framework for how companies can really make a difference when they are drive by a new breed of accountable individual (any he did this back in the '80s)

  • I seek out and I set direction.
  • I resist supervision; I welcome support.
  • I work at my own pace within the constraints posed by the situation.
  • I put my name on what I do -- and the names of those who contribute in any way to any endeavor for which I am accountable.
  • I promote, praise, recognize and reward accomplishment and service.
  • I contribute more than I consume.
  • I seek control over myself and influence over events about me.
  • I care about my work -- it is a reflection of me.
  • I care about the enterprise of which I am a part and I will do my best to protect it against all threats -- whether they are external or internal.
  • I care about the people with whom I work; they are not just co-workers or colleagues -- they are also friends, allies and comrades.
  • I refuse to simply "obey orders" and "go along with the program."
  • I will hold my superiors as accountable for their actions as they hold me accountable for mine.
  • I will not turn a "blind eye" or a "deaf ear" to wrongdoing at any level of any organization of which I am a part.
  • I will do my best to share what I know with those who are interested in learning from me and I will do my best to learn from those who are skilled, knowledgeable or competent in areas I am not.
  • I will at all times strive to advance and improve the knowledge base that undergirds my skills, abilities and accomplishments.
This ties in nicely with the theme of accountability. What it's not: imposed on you by others. What it is: self-directed behavior.


Wednesday, August 1, 2007

Perfect is the enemy of Very Good

I found this a good, quick read and helpful as a reminder on how to tackle hard problems. My takeaway was to take action and not wait until "all the data is in" before making a decision. In short, deliver the Very Good as opposed to Perfection. As the CEO of the company I work for said recently, working in a vaguely correct direction is better than standing still. [Update: In the software business, the remark about "working in a vaguely correct direction is better than standing still" works because of Scrum. If you are talking to your client and demonstrating your solution every 30 days, your can have that meaningful conversation where both parties refine the problem and the solution together.]

The full discussion for the quotes below is here: http://pliantalliance.org/?p=34
Never let perfect stand in the way of very good.

It may be tempting to wait until you have the time, the knowledge, or the inclination to design the “perfect” solution, especially if you aim to solve the real problem. However, you must temper this instinct with practicality. While it may look like you are holding out for “the perfect solution” (that solves the whole, real problem), what you are really doing is preventing “the very good solution” that can be applied in the interim. We must recognize that perfection can only be approached asymptotically through evolution of design and implementation: in essence by refining our deployed very good solutions to make them more perfect. Solving the real problem should be applied where scope allows and it should guide our path to tell us where perfect is, but we are allowed to get there in more than one step. Very good solutions have value, and value delayed is value lost.
The same site had a good collection of quotes regarding change and flexibility:
"He that will not apply new remedies must expect new evils; for time is the greatest innovator.."