Monday, October 3, 2016

Java Downcasting an Extended Class

In java downcasting is when you have an object and want to recast the object to an extended class of the original. 
If you Goolge how to do this you will see over and over again that this cannot be done. People still want look to do it.  So there must be a valid reason to want to do such a thing. And there is. And there is lots of applications where this is the wrong solution.

One example where you would want to downcast is to store information received from a third party application and add additional metadata to the object before storing the results in a NoSQL database.  You don’t have control over the API.  Since java doesn’t directly support down casting in this manor you have copy the data.  If there is only a field or two it is not to bad. But if the data is complex then it difficult. Fortunately there is java reflection.

The following is a simple example where we want to keep track of the purchase and sale cost so that we know how much profit was made.

import java.lang.reflect.Field;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {
    public static void main(String[] args) {
        CarSupplier carSupplier = new CarSupplier();
        Car car = carSupplier.getNewCar();
        MyCar myCar = new MyCar(car);        

class MyCar extends Car {
    double purchaseprice = 0;
    double salesprice = 0;
    MyCar(Car car) {
        // get the fields
        // and get the inhereted fields
        Field[] fields = car.getClass().getDeclaredFields();
        Field[] declaredFields = getClass().getSuperclass().getDeclaredFields();
        // loop through each one and copy it 
        // writen in verbose form for to make it easier to understand
        for (int i = 0; i < fields.length; i++) {
            try {
                Object value = fields[i].get(car);
                Field field = declaredFields[i];
                field.set((this), value);
            } catch (IllegalArgumentException | IllegalAccessException ex) {
                Logger.getLogger(ExtendedRFO.class.getName()).log(Level.SEVERE, null, ex);

    public double getPurchaseprice() {
        return purchaseprice;
    public void setPurchaseprice(double purchaseprice) {
        this.purchaseprice = purchaseprice;
    public double getSalesprice() {
        return salesprice;
    public void setSalesprice(double salesprice) {
        this.salesprice = salesprice;
    public double getprofit() {
        return salesprice - purchaseprice;

Tuesday, October 28, 2014

Do You Know How to Harvest, Structure, and Visualize Big Data

Big Data,  to most people that means key word searches, or looking at counts of things collected, averages, detecting anomalies and maybe some predictive analysis based on this things.  Some examples; stock prices of a company or groups of companies, are sales trending upward or downwards, are they saying positive or negative things (sentiment) about a product, is the web site being access more often, by whom and where.  But what this type of data analytics does not provide is why these things are happening. To understand the why requires data enrichment, or information extraction.  This is the who, why, what, where and how they are related. 

To understand how this type of entity extraction and relationship detection is done, I'll refer you to a webinar by, BrightPlanet Data Acquisition Engineer Jamie Martin and Rosoka Software Solutions CEO Greg Roberts where they discuss how industries can take advantage of unstructured text andweb data and visualize the data in dash boarding tools.

The data in the demo includes 9000 global news sources, 11 million unique articles, written 94 different languages.  The use cases shown are 1) monitoring disease outbreak (including Ebola ) and 2) insurance underwriting home insurance with crime hotspot identification.

The webinar is: "How to Harvest, Structure, and Visualize Big Data"

Saturday, August 3, 2013

How To Write A Multi Threaded Web Service Client to Upload Files To an Entity Extraction Web Service

Recently Rosoka Cloud was made available on the Amazon AWS Marketplace providing
enexpensive and easy access to high quality Entity and Relationship Extraction on an as needed bases.

You can use the drag and drop features, or the file by file or upload, or you can us a simple client to perform batch processing for either your research or production needs.  Here is an example code to be able to upload files to the web service.  The example code will recursively loop through all the files and files in sub-directories to send them to upload them to the web service for processing.  The program is multithreaded to take advantage of the multithreading in the web service itself and eliminate time waiting for the uploads if a single thread used.  The RosokaCloud web service itself processes the uploaded document to identify languages used in the document, perform entity extraction and entity relationship extraction.  The client program can choose between JSON or XML output.

The following is the main program. It has been simplified to for clarity in understanding the upload process. (Bandwidth, number of CPU, memory, disk IO speeds and other factors should be considered in setting the number of threads used).

package rosokacloudsampleclient;

import com.imt.rosokacloadclient.RosokaCloudClientBase;
import com.imt.rosokacloadclient.RosokaCloudClientThread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ProcessFileDirectoryThreaded {

    private static RosokaCloudClientBase rcc = new RosokaCloudClientBase();
    private static ExecutorService executor = null;
     * @param args the command line arguments
    public static void main(String[] args) throws IOException {
        // set the number of threads to allow to run at one time
        executor = Executors.newFixedThreadPool(4);
        // where to read from
        String rootpath="../mydocs";
        // where to 
        String outtpath="./outdir";
        // for testing.
        URI baseURI = RosokaCloudClientBase.getBaseURI();
        // for server
        //rcc.setBaseURI("replacewith server URL");
        File sf=new File(rootpath);
        File of=new File(outtpath);

        System.out.println("All submited");

    // Process only files under dir
    public static void visitAllFiles(File dir) {
        if (dir.isHidden()) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                visitAllFiles(new File(dir, children[i]));
        } else {


    private static void process(File dir) {
        RosokaCloudClientThread rcct = new RosokaCloudClientThread(dir);
        // rcc.proscessFileRosokaCloud(dir);
And the Thread code:

 * This code provide a sample java client for interfacing with the
 * Rosoka-Cloud™ web services
 * @author IMT Holdings Corp.
public class RosokaCloudClientThread  implements Runnable{
    private File inputfile;
    public RosokaCloudClientThread(File inputfile) {

     * This method sill send a file to the web service to process. The web
     * service will return processed results as JSON.
     * @param baseURI URI of the web service
     * @param inputstring string to process
    public void run() {
        try {
            ClientConfig config = new DefaultClientConfig();
            Client client = Client.create(config);
            WebResource service = client.resource(RosokaCloudClientBase.getBaseURI()  );

            // fill in the form with what to process.  "file" for a file
            FormDataMultiPart mform = new FormDataMultiPart().field("file", 
                    inputfile, MediaType.MULTIPART_FORM_DATA_TYPE);
            // set type of response, this gives xml but you can get json with "application/json" 
            mform.field("responseType", "application/xml");

            // make the call and get the response.
            ClientResponse response = service.path("rosoka").
                    type(MediaType.MULTIPART_FORM_DATA).post(ClientResponse.class, mform);

            // for the example only print out the results as a string
            String inpath = inputfile.getCanonicalPath();
            String endpath = inpath.substring(RosokaCloudClientBase.getRootpathlength());
            String outp =RosokaCloudClientBase.getOutpath()+ endpath + "_OUT.xml";
            System.out.println("writing: "+endpath);
            File dc=new File(outp);
            File parentFile = dc.getParentFile();
            Writer out = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(outp), "UTF-8"));
            try {
            } finally {
            //       System.out.println(response.getEntity(String.class));
            // You can use the XSD of the web site to marshal and unmarshal results 
            // for manipulattion.
        } catch (IOException ex) {
            Logger.getLogger(RosokaCloudClientThread.class.getName()).log(Level.SEVERE, null, ex);


Thursday, July 18, 2013

Skills that every Chief Technology Officer should have

A chief technology officer or chief technical officer (CTO) is an executive-level position in a company responsible for decisions regarding scientific and technological issues within an organization.  As a corporate officer position, the CTO typically reports directly to the chief executive officer (CEO) and is primarily concerned with long-term and "big picture" issues (while still having deep technical knowledge of the relevant field).
Besides an in depth understanding of the technologies produced and used by the company, the technical skills needed to fulfill the role of CTO is a working familiarity with regulatory (e.g. U.S. Food and Drug Administration, Environmental Protection Agency, Consumer Product Safety Commission, and other agencies as applicable) and intellectual property (IP) issues (e.g. patents, trade secrets, license contracts), and an ability to interface with legal counsel to incorporate those considerations into strategic planning and inter-company negotiations.
But there is set of skills that are much harder to learn. This set of skills isn’t taught in books.  These are the skills that separate a successful CTO from a technologist.

The most important and hardest skill to learn as a CTO is to let go of development. As development is what is being done today, be visionary and innovative.

Next most important skill is to be able to think strategically. Where is your company today and what should it be doing 6 months, 1 year, 3 years, 5 years, 10 years from now, And how do you get there. What technologies do you need to be researching, partnering, acquiring, and even shedding?

In order to do the above you must have skill of listening carefully to your customers. Not just to what they are asking for, but also to understand what they need, how they make their money, and how they could be more effective at it.

Final skill is to have a visionary outlook, to be able to see and understand how things are, and how they could be. Then you can figure out how to bridge that gap. And that gives you that future plan! Convert that Vision to goals and milestones that can be executed on.

That plan must be expressible not only in milestones, but Return On Investment. (Another skill)

One last skill, you need to be able to express that vision and plan to others in a manor that they can see it, understand it, and believe in it, so that your CEO and employees will carry it out.

Wednesday, May 8, 2013

Are customers being blocked from using your site?

Cryptographically secure pseudorandom number g...
 (Photo credit: Wikipedia)

Many web sites use Secure Socket Layer or SSL to provide secure communications and as part of access control to their web sites.  But that SSL may be blocking customers from using your web site!  The issue comes when your web sites certificate expires.  While you may have correctly updated that certificate there are a couple of steps that are not generally found in the documentation that should be taken care of.  The problem arises in that the expired certificate may be cached in several locations down stream of your of your web server.  The certificated may be cached in your proxy (or your hosting services proxies), end user’s proxies (i.e. a companies proxy) and other firewall services and devices and finally in the browser. 

The steps to deal with these are fairly simple:
1)   Update your certificate before it expires! A number of proxies and firewalls will block sites once they are deemed to be providing invalid certificates. A certificate is invalid if it has expired. Some proxies and firewalls will need to be reset in order to allow your site back through, even though you have put out a new valid certificate.
2)   Change the serial number on the Certificate! If you are purchasing your certificate from a Certificate Authority they should have done this out of hand. If you are generating a certificate  using opensll or genkey  make sure to provide a new serial number. If the new certificate and the old certificate have the same serial number, browsers, proxies and firewalls will for trying to be efficient continue using the old certificate. All of these look at the serial number to decide whether or not there is a new certificate.
3)   Check it.  To check that you have installed your new certificate correctly use the openssl command.  Below is an example pointing at Google. (Note that path does not have the protocol on it)

     openssl s_client -connect

The openssl  s_client does not hold onto any cached certificate and will allow you read the certificate signature, expiration date, serial number and other important information.  If you run it on the host machine against localhost it will tell you if it is installed on the server.  Running it from other locations will then tell you if the site has been blocked by some intervening proxy or firewall  has held onto the old certificate or blocked your site.  If you see the correct certificate and your browser is seeing the old certificate then you know it is a browser issue.

Openssl is installed by default on almost all version of Linux any more, include Mac’s. You can download it for Windows.         

(Part 4 is only needed if you did not do 1,2 and 3, and somebody has accessed your certificate, MAKE SURE NOT TO LET IT HAPPEN!!)
4)   Provide instructions for browser if you let your Certificate expire. If you updated your cert before it expired and you changed the serial number browser will automatically grab the new one. If you did not, most browsers will get the new cert and use it if you remove the old cert.  How to remove the cert from any particular browser is easy to find on the web.  However, the current version of Firefox will hold on to the old one if you let your cert expire. To get Firefox to read the new certificate.  I include the instructions here because it was not easy to find that this extra step was needed.

For Firefox:
1)   Remove the old cert by going to PreferencesàAdvancedàEncryptionàView Certificates
Go through the list and find the cert and delete it.
2)   Reset Firefox to its default state as below.(copied from Mozilla) Firefox will save all your settings, cookies, preferences, etc.

How do I reset Firefox to its default state?
  1. On the menu bar, click the Help menu and select Troubleshooting Information.

  1. Click the Reset Firefox button in the upper-right corner of the Troubleshooting Information page. 

  1. To continue, click Reset Firefox in the confirmation sheet that slides down.
  2. Firefox will close and be reset. When it's done, a window will list the information that was imported. Click Done and Firefox will open.

Enhanced by Zemanta

Monday, April 8, 2013

How Should A Small Business Use Social Media and Web In A New Product Release?

Two events prompt this blog: 1) the news article on the 5most profitable tweets ever, 2) IMT Holdings, Corp just released it’s newest product, GeoGravy,.  So how should a small business go about getting its new product out there?  A large company, with lots of marketing funding can do all sorts of activities to get in front of potential customers. But what about small companies with great products, and very limited marketing budget?  The GeoGravy release allows any readers of this blog to follow along with a case study in real time. 

What’s in a name?  PLENTY! I have seen many instances where these simple steps have been ignored. One of the first problems in marketing your product is what to call it.  Naming can have a big impact. Something that is too common will be lost in the searches, way at the bottom. Something that is comparatively unique is always great, but it needs to be memorable.

So, following our case study if you Google’d (great name example) GeoGravy you would have gotten back a couple of results and the question at the top of the page:
                        Did you mean: geography

So the name was pretty rare and yet easy to remember, as well as somewhat indicative of what the product does. 

You want to sanity check the name of your product.  Is there any slight mispronunciations or misspelling of the potential name of your product? If there are, pick another one. 

You want to be able to trademark the name of your product.  Googling the potential name of your product should reveal if there are any other products out there already claiming the name you wish to use. If there are you need to go with another name.  Similarly do searches on Twitter, and Facebook. Look and see what is out there. Are they claimed already, is there positive or negative connotations associated with the name.

You also want to have a website that is based on the name of your product.  Type in the URL of with the product name you wish to use. With any luck no one will have already claimed it.

 Once you are happy with the name, there are a couple of things to take care of right away, well before starting the product release. First is getting the domain name of the product registered.  You don’t need to publish anything yet, just get the link. A second item to take care of if this is your first product is to register with a press release service(s). PrLog is a good free one, but there are many others.

Finally, you want to coordinate your release.  You want to have your press release, web pages, Tweets, e-mailings, and snail mail all go out at the same time. With one exception, you web pages.  Web pages take about a week before they start showing up in Google, Bing, Blekko, etc. You want to have your web pages on line and easily found in the search engines. 

Release Checklist: This coordinated buzz all at once is a key factor.  To coordinate it all, use a checklist.  Add anyplace you think of to the list where you want to mention it. (Is LinkedIn on your list?) And it takes plenty of work. You need to write web pages, press releases, have a collection of pre-composed tweets, etc. all ready to go at the same time.  This all at once approach is designed to make your small business look big. Staggering articles, items etc, doesn’t. Go for it.

Our use case: now after a week GeoGravy appears as the number one item if you search for GeoGravy, and you no longer see the “Did you mean”.   

We haven’t even started talking about SearchEngine Optimization SEO. Next post.
Enhanced by Zemanta

Wednesday, February 20, 2013

Sell the next great thing, to build the impossible with Kelly's Johnson's rule #1

Global Product Manager, XBOX Division of Micro...
Global Product Manager, XBOX Division of Microsoft Corporation Adam Kovach at X06 Taiwan. (Photo credit: Wikipedia)

To sell the next great thing, to build the impossible all you need to do now is follow Kelly Johnson rule #1? Invest in a product manager. This rule is the final and most important rule of Kelly Johnson’s famous 14 rules of management. And it is the hardest and easiest one to do.

Kelly's rule:
The Skunk Works manager must be delegated practically complete control of his program in all aspects. He should report to a division president or higher.

Earned value management (EVM), reporting, cost controls, say NO, you should do this. As a executive giving autonomy to an underling is something few can stand to do. It is seldom done. But lets think about this in another since.

You most likely invest in a 401K or an IRA account. You are giving over your money to the account manager who invests in various funds for you based on an allocation. You are trusting them to make money with that investment.  But now lets get more specific.

If you buy stock in stock in a specific company you are trusting the board of directors and officers in that company to make money for you. Ok, some gamble with day trading and try and make money off the price fluctuations rather than making investments. So let's get a little closer.

A venture capitalist or angel investor (VC) will invest money in a company. That company has a CEO an idea and some staff. The VC investor is risking their money in hopes of getting a return on that investment. They are doing this based on an evaluation of the individuals in that run the company and the idea for their product or services, and expected returns. Once they have invested their money there is very little they can do. All of the terms and conditions have been spelled out in the investment contract.

So what is different? Not much really, and a lot. The only real difference is that the product manager works for you, so you may have to fire him, and/or you may loose your job too if the product fails. In contrast the investment will be lost if the product fails, and the company owner loses his job and company. If you think of you job as an investment then it is easy to think in terms of delegating control to a product manager as an investment. In contrast, if you do not think of the job as an investment and do not delegate complete control, then you are managing the product. In that case you are the product manager, In that case, why are you paying for that other product manager?

If you cannot think of delegating complete control over to the product manager as investment, then following this rule is virtually impossible. In that case you are the product manager, In that case, why are you paying for that other product manager?  To help a little with this, can you afford the time to be the product manager (time is money, and you are investing your time)?   Delegating control does not mean that they aren’t reporting to you, that you aren’t watching how your investment is doing. You should be getting those monthly investment statements.

Invest or don’t invest i.e. delegate control or don’t delegate control(and run it yourself). That is the choice. Making that investment becomes a matter of choosing the right person to be the product manager along with which ideas to invest in. That is the investment risk.

Product Rule:
2.  The product manager must be delegated practically complete control of his program in all aspects.
Enhanced by Zemanta

Saturday, December 29, 2012

Increase profits with Rule #2 of the 14 Rules of Management for a Successful Software Product Company

English: What Kind of Work is it Really?
English: What Kind of Work is it Really? (Photo credit: Wikipedia)

Having a strong well-defined customer will increase sales and productivity gain through more focused and efficient projects? Implementing Rule #2 of the management rules of Kelly Johnson can immediately provide cost savings and increased productivity in your product company. Kelly Johnson was famous for building the impossible at the "Skunk Works

Kelly's rule:
2. Strong but small project offices must be provided by the military and industry.

First let’s expand the rule so that it is not limited to the military. Kelly’s customer was the military. To understand this rule we need to know who is customer and how do they provide a strong but small project office?  For customers to have a strong project office they must have the authority to establish requirements, decide what product to buy and they must have the authority (and funds) to make the purchase. Similarly, for a customer to have a small project office they need to be limited to at most a single person, for each of the following functions respectively: authority to establish requirements, authority to decide what product to buy meeting those requirements, the authority (and funds) to make the purchase. Anyone else in the customer office doesn’t contribute to the final sale of your products, is wasting your (or your employees i.e. your) time and money.

If you are selling $0.99 apps then you have a large collection of strong but small project offices. With that price your customer can buy the product on a whim, since the cost is not only in the range of disposable income, but pocket change. But a large collection of customers isn’t exactly a small project office either. In this case you need to get a small representative sample to simulate having a small project office. You need their requirements. What did they like/dislike about the product? What additional features do they want in the next version or product? What will make it more attractive to a larger set of buyers?

At the other end of the scale is enterprise level commercial software packages sold to companies and the government. Companies and government agencies that can afford enterprise level software bundles usually aren’t small. In this case, what is needed is to identify who chooses the product and who authorizes the funding, payment. To add complexity is the authority for funding and payment will change with dollar values. (This should be considered when setting the price point for a product.) In this case your customer is not really the company it is the set of people (program office) that represents the company.

Almost every dolor spent by your sales force that is not directly interface with these small and strong program offices that are your customers is wasted expense because it is not producing or closing a sale.  The term almost was used because there is still marketing. Any marketing that is not developing connections to, and identification of those small program offices, is wasted.  Developing connections (leads, following leads to the end customer, image, etc. could cover an entire library) is a completely separate topic.

With all the above is easy to establish what your small and strong program office needs to do is easy. They must have the authority to interpret requirements, spending authority for any expenses within a well-established budget, and management and technical experience to keep the program on task and within schedule, and most of all authority to work directly with the customer program office. The number of people in your program office should never be greater that that of your customers program office(s).

  2.  Products should be managed by strong but small project offices with strong, small well-defined customers
Enhanced by Zemanta

Monday, November 26, 2012

Increase profits with Rule #3 of the 14 Rules of Management for a Successful Software Product Company

English: A diagram showing the production poss...
English: A diagram showing the production possibilities frontier (PPF) curve for producing "guns" and "butter". Point "A" lies below the curve, denoting underutilized production capacity. Points "B", "C", and "D" lie on the curve, denoting efficient utilization of production. Point "X" lies outside the curve, representing an impossible output for existing capital and/or technology. (Photo credit: Wikipedia)
Want an immediate cost savings and productivity gain? Implementing Rule #3 of the management rules of Kelly Johnson can immediately provide cost savings and increased productivity in your product company. Kelly Johnson was famous for building the impossible at the "Skunk Works" Any company can apply this rule to save money. 

Kelly's rule:
3. The number of people having any connection with the project must be restricted in an almost vicious manner. Use a small number of good people (10% to 25% compared to the so-called normal systems).

At first glance this would seem to be a simple example of taking advantage of the “80-20 rule” more formally known as the “Pareto principle” and “Pareto efficiency”.  You can follow the links and wade through the theorems and mathematics, but we will hypothesize it is either true or not true and look at the consequences. 
It is really, more a matter of competitive economics. To create a better product, or provide better service, you need people with better ideas, coders that make few errors for better quality, and more consciences, thoughtful and more efficient in order to provide better services.  Obviously those people cost more to attract and retain, which means you won’t be able to hire as many of these people compared to the average person. So the question becomes what is the ratio of desired capabilities relative to the average cost? If you can find people that produce twice as much as the average person, and pay them twice as much then it is a wash. If you can find people that produce twice as much and pay them 1.5 times the average then you have a competitive advantage, not to mention very happy employees.  So the question of what is this ratio becomes really important for making huge profits! Yes, but not so fast.
If this is so obvious, why doesn’t everyone follow this? Well first, consider government contracts, they dictates the rates that they will pay for individuals, which squelches Kelly’s practicality of implementing rule number 3 for any sustained length of time. Similarly, in general, if you are the consumer, you get pretty leery at paying someone a lot more, even if they take a lot less time to complete. I.e. consumer aversion. The exception is when the quality is high enough, but that exception (and niche market if you want to pursue that option).   The unions want to dictate pay rates; specifically they want you to pay everyone the same amounts, and the higher rate you want to offer for better employees. There is also the competing concept, the one that makes the news, the companies, and incentives for outsources and paying significantly less for everyone, even if it takes more people, competing with inferior or subsidized products.  Finally, is that most companies have no idea how to identify that essential 20% to make things work. 
Fortunately you are a product company. The consumer doesn’t care much if you pay your employees more or less. They only look at the price of your product, the quality of your product, and the quality of your support. Which means you can pay them what you need to.
If the 80-20 rule is true then you could pay your employees as much 5 times the average amount of pay for the average employee even with the competition that isn’t following this rule. At for times you would be making money. But at 1.2 times the average pay you would have VERY happy employees, and lots of profit. One other consideration is that at this pay rate you competition would still think it practicable to poach your key employees. Pay these key employees slightly more if you want to keep your advantage. One other benefit is motivational, happy employees have a tendency to produce more with higher quality than unhappy employees.
What is the secret to finding that 20%? Four simple rules that I follow:
1)     Employees will find or create work to justify the job. Ask employees what he or she thinks their job is and then ask the follow up question “How does that job description support your product?” If that description isn’t essential to your product, then they probably aren’t either. That question not only works for existing employees, but is also a great interview question. Are they searching out work that fulfill your vision, or possibly and improved vision of your product?
2)     Are they driven by a quest for excellence? Employees are either self-motivated and want to be prideful of there work, to excel at what they do, or they are not. Listen to how they talk. Are they goal oriented or problem solvers that take pride and ownership of what they do then they are self-motivational, do they want to improve things.  (They meet this test even if your project is a stepping-stone to achieve what they really want to do as they are goal driven and therefore self-motivating.) Do they talk about the tasks and responsibilities, or did they talk about what they produces/provided. If tasks and responsibilities it's a no, if produced and provided yes. Note that I said talk to and listen to, resume style and advisers want the former to fill a slot, you are looking for the exceptional, so only use the resume for letting you know they have the needed skills.
3)     What is preventing your vision of your product being used by your customers? The first two rules where focused on the character traits of the people, this is one is about your vision of the product, and what needs to get done to fulfill that vision. Just because someone is an awesome developer and would be a great employee, if your produce donuts, they probably aren’t relevant to your vision (unless you need your newly designed donut machine programed).  Only fill the jobs that need to be filled for that vision. Those 20% employees will take care of the rest of the things that need to be done.
4)     They only need to be 20% at what you need them for. Goes with the Pareto equilibrium. Optimize to what each individual excels at. They can be adequate on the fill in tasks, but they will get these done when needed. They are individuals.
Now that you have your high value team hard at work, and being successful, everyone is going to one part of that action. They will want a piece of the pie. They will some of that high pay, they will want part of your profits and success. All of this dilutes what you have created. You must restrict the access to it. If they can’t have access to it they will want access to your people. You will need to pay your people accordingly to fend this off competitors for them, as well as the usual motivational pay.
Summarizing gives the product rule:
 3.  The number of people having any connection with the project must be restricted in an almost vicious manner. Use a small number of good people (10% to 25% compared to the so-called normal systems) and pay them more in proportion.

Enhanced by Zemanta

Thursday, October 4, 2012

Rule #4 of the 14 Rules of Management for a Successful Software Product Company

Visualization of the "history tree" ...
Visualization of the "history tree" of a revision controlled project, showing branching, merging, tagging, etc. (Photo credit: Wikipedia)

Want an immediate cost savings and productivity gain? Implementing Rule #4 of the management rules of Kelly Johnson can immediately provide cost savings and increased productivity in your product company. Kelly Johnson was famous for building the impossible at the "Skunk Works"  Any company can apply this rule to save money. 

Kelly's rule:
A very simple drawing and drawing release system with great flexibility for making changes must be provided.

Never mind whether you are using agile, waterfall, or some other processes for developing you product. This rule is referring to the mechanics used to implement your process. The mechanics of how you are handling documents and releasing them, how you are storing code, how they are found, retrieved and released is something that is a direct cost to your products. It is something that if improved can immediately save money and improve productivity.  By answering a few simple questions will tell if there is room for cost saving and productivity improvements.

Are there copies of documents stored in different locations? If you are that is a physical cost for the storage, as well as confusion on which is the correct version, which in turn adds processes, i.e. cost to retrieve. It also adds time (cost) to find the copies. (One exception of this is your disaster recovery copy which you should have).

Are there multiple versions of documents stored in different locations or in the same directory? Old versions should be stored in you Configuration Management (CM) repository so they can be tracked and recovered.  Version copies in different locations adds the physical cost of the storage as well as the process costs of version control that is not controlling your documents.

Is it more than one click to update a document on your desktop to the current version? If the process is more than one click people will skip it, and the first two items will happen as it is easer to do that. At one click it is easier to stay up to date with what is in your CM. This is true whether it is code, a word document, spreadsheet, etc. (Microsoft really screws this up unless you save all your documents in the older format, they change the file date when you just read a document even if you don’t save it.) Additionally products like SharePoint fail miserably at this concept.

Is it more than one click (and a reason for change capture) to commit changes to a document on your desktop to the current version? If the process is more than one click people will regularly skip it, and the first two items will happen as it is easer to do that. At one click it is easier to commit and keep your CM repository up to date. This is true whether it is code, a word document, spreadsheet, etc. (Microsoft really screws this up unless you save all your documents in the older format, they change the file date when you just read a document even if you don’t save it.) When you click that commit is there a simple popup to capture why the change was made. If your staff is making changes without a reason then they are costing you money, and your QA needs this information if something doesn’t pass.

Are you branching changes? Every branch means a merge down stream, or the changes in the branch are lost. That merge costs, the lost change is a non-recoverable cost. Sometimes this is necessary to support as specific/unique need of a customer. Minimize this if at all possible.  Many junior programmers like to have their own branch to isolate them from changes made by others. They have not learned that this is more work downstream.

Are you “Tagging” or copying your releases? Copies cost as per questions one and two. Tagging allows you to pull the specific copy any time as needed without having the costs of one and two.

Does everyone have access and permission to make changes? If they don’t have access to the CM they won’t be able to use it and it is then directly costing you money for the reasons in one and two.

How long to recover your CM? “Generally” should be under an hour plus spindle time if you have to do a recovery. There is cost/expense for a disaster recovery, which is why I use the term “generally.” Recovering an older version of a specific file or directory should take just a couple of seconds.

Summarizing gives the product rule.

Product rule:
A very simple yet integrated file and CM release system with great flexibility for making changes must be provided.
Enhanced by Zemanta