Time, Complexity, and Cost – but where is Risk?

There is a popular saying within the project management community:

Time, Cost, Quality, Pick Two.

It means two factors can be controlled if the third can be left uncontrolled, or in other words, you can’t have it all. Of course, this is a simplistic view of a potentially complex set of activities, but it is pragmatic and generally found to hold true. However, where does Risk enter in the equation?

First, what is risk? As risk in a project increases, so does the likelihood of the following:

  • Expectations will be viewed as optimistic and unrealistic in hindsight.
  • The project will exceed schedule and cost forecasts.
  • Product quality and customer approval will be lower than anticipated.
  • Production costs will be greater than anticipated.

Risk is primarily a function of complexity and time. Make the project more complex without increasing the time available and the risk of failure increases exponentially. Constrain the time available without reducing scope and the risk of failure increases exponentially. Get the idea? It’s really more of a guideline than a rule though.

When time is not the limiting factor, there will be enough time to figure it out, whatever it is. When there isn’t enough time, decisions will understandably be made based on missing and incorrect information (i.e. speculation), which can result in more work later to correct a bad decision. Additional schedule delays and cost overruns increase project stress, which increases risk, and if left uncorrected may result in the project’s collapse.

Developing a new product is an inherently risky activity, although achieving high-risk goals generally brings greater rewards – otherwise there would be no incentive to accept the risk. However, even if risk cannot be avoided it can be mitigated. Don’t accept unreasonable risk in your projects, and consider moving any very-high-risk tasks into a precursor research project to set appropriate expectations. Also ensure significant risks are well understood by project stakeholders. In a well managed and transparent project there can be no blame, and stakeholders share the consequences of the constraints they set and the risks that were accepted.

There is no place for wishful thinking in project management, and always have a Plan B ready at hand should an activity not execute as expected.

Cheers,
Dale

Use newsyslog to rotate Apache log file on FreeBSD

I recently needed to review the Apache httpd error log file on my server (/var/log/httpd-error.log), and had to scroll through 95,000 lines before getting to the part of interest. The server was rebooted only a month earlier, which shows how fast the Apache log file grows even on a server with relatively low demand.

To make Apache’s log files more manageable, I configured them to roll every week using the FreeBSD standard newsyslog utility, which is run from cron (see /etc/crontab).

Instead of editing the newsyslog config file (/etc/newsyslog.conf) directly, create a secondary configuration file specifically to rotate Apache logs. The end of the newsyslog master configuration file reads any secondary config files,

...
<include> /etc/newsyslog.conf.d/[!.]*.conf
<include> /usr/local/etc/newsyslog.conf.d/[!.]*.conf

and secondary configuration files will not be affected by upgrades to newsyslog.

First create a directory for the Apache newsyslog configuration file. Since Apache is third-party software, create the /usr/local/etc/newsyslog.conf.d directory.

% sudo mkdir -p /usr/local/etc/newsyslog.conf.d

and then create the config file:

% sudo vi /usr/local/etc/newsyslog.conf.d/apache.conf

# Apache
# [logfile name] [owner-group] [mode] [count] [size] [when] [flags] [path to pid file] [signal]
/var/log/httpd-access.log www:www 640 9 * $W1D4 J /var/run/httpd.pid 30
/var/log/httpd-error.log  www:www 640 9 * $W1D4 J /var/run/httpd.pid 30

The will roll the access and error log files every Monday at 4am (system time), a total of 9 weekly archives will be kept (providing up to 10 weeks of logs counting the current log), and log file archives will be compressed using bzip2. The file mode is consistent with other system logs, but could be made more restrictive if desired. A SIGUSR1 signal (30) is sent to Apache to perform a graceful restart after rolling the log file.

For more information, see the System Logging section of the FreeBSD Manual and man pages for newsyslog and newsyslog.conf.

To read a compressed log file, uncompress the file and pipe to less:

% sudo bzcat httpd-error.log.0.bz2 | less

or use the simpler:

% sudo bzless httpd-error.log.0.bz2

Cheers!

5S Program

The efficiency of a plant or production facility is determined in part by the cleanliness and order of the facility. The 5S program was developed in Japan to educate employees and improve production plant order and cleanliness. The program has also been widely adopted in the west.

The components of the 5S program are:

  • Sort (Seiri)
  • Set In Order (Seiton)
  • Shine (Seiso)
  • Standardize (Seiketsu)
  • Sustain (Shitsuke)

One popular variation of the program uses six components by adding Safety (although In Order could easily be interpreted to include Safety), while another variation only uses four components by combining Set In Order and Shine.

Henry Ford’s CANDO program pre-dates 5S and includes Cleaning Up, Arranging, Neatness, Discipline and Ongoing Improvement, although the two are likely unrelated.

Now you can start your own 5S program!

FreeBSD on a BBG

Here’s the situation after installing FreeBSD on my BBG (BeagleBone Green), using an image published by the raspBSD project. No custom configuration or installing additional software has been done, although I have updated the package database. There’s more information on the install in a previous post.

For background, a BeagleBone Green (BBG) has a TI Sitara AM335x (1GHz ARM Cortex-A8) with 512MB DDR3 and 4GB eMMC (primary boot device), a micro SD socket (alternate boot device and additional storage), two USB connectors (one client and one host), ethernet, two Grove 4-pin connectors and two 46-pin 2×23 0.100″ pin headers with GPIO, SPI, I2C and other signals. 

Identification & Disk Use

Active Processes

I have two remote ssh sessions open.

Memory use