[hemmerling] How to achieve Reputation with a public Software Project - Criteria & Proceedings

Foreword

  • I just noted here some useful criteria and proceedings to help you to select your own project, with the goal to achieve reputation as IT developer, by a public project.
  • I don´t know which selection has the best success chances.
  • Especially I don´t know with which concrete product I might get a “quick win”.
  • Of course a first working alpha version, with some customer benefit, is a major goal. So some quick codewriting is useful, definitely, in comparison to produce an number of papers and UML diagrams, but no working code ( see Xtreme programming principles, Manifesto for Agile Software Development ).

Guideline "Work less. Do more. Make awesome"

  • The guidline for my work shall always be “Work less. Do more. Make awesome” :-).

1 Major Issues

1.1 Customers

Basic guideline: It is mandatory to find a useful benefit for the customers of your product.

  • So what is a serious customer's need, which is not satisfied by popular free / OpenSource products ?
  • But maybe just by expensive commercial products ?
  • Think of special industries and niche markets where there is no free software, and the manpower to create a product is still low, so that you can achieve a success with just 6 .. 12 man-months of unpaid work ?!
  • Maybe it is a good idea not to compete with major well-accepted free / OpenSource products.
    • So probably the chances to create a competitor of OpenOffice are low.
    • But on other smaller niche markets, if there are just 1 or 2 free products, there might be a chance for you, if you have a different approach or just start 10 years later and must not hasse with old code..

Select:

  1. Product for developers.
    1. Executable tool, primarily used for development of software or hardware, by system engineers and software developers.
    2. Framework, to be integrated in software of software developers.
      • Example: TCP/IP V6 stack.
      • Warning: You need to attract customers, instantly who really want to depend on your product, by using its API in their own products.
      • Warning: You might be overrun by third parties, who develop the product faster and independantly from you. You might loose the reputation and leadership.
  2. Product for buiness or scientifc users.
    1. Business application, primarily used by end users ( at home, at workplace ).
    2. Scientific application, primarily used by end users ( at workplace ).
    3. Business application, used by companies, to be integreated into products or distributed to customers.
      • Example: SMIL Player.

1.2 Product Construction

Select:

  1. Plugin for a popular software.
    • Example: Plugin for Eclipse, OpenOffice, Firefox, Visual Studio, Moodle, DokuWiki.
    • Example: Facebook application.
      • Task: As the application runs on your own webserver, look for free / affordable webspace which supports
        • Webspace with PHP + MysQL - the minium.
        • Webspace with support of other high-level languages, like Python.
        • Provide / run an own local computer as webserver, making use of your permanent DSL connection, using dynamic IP. Then you have free choice of programming languages, framworks, operating system.
    • Example: Template or application for a popular CMS system ( DokuWiki, Joomla, Drupal,..).
  2. Operating system driver.
    • Example: Driver to access a fischertechnik model by legacy parallel port ( for Windows, for Linux ).
  3. Point tool or monolitic tool.
    • Point tool - A product to be used in a toolchain.
      • Unix unitilities, bundle of office applications ( Open Office Text, Open Office Calc, OpenOffice Impress,.. ).
    • Monolithic product with rich functionality all in a single application, e.g. a “Swiss pocket knife”.
      • There is a single user interface, you don´t call different programs for different functions.
      • Examples: OpenOffice Text, portal websites like Facebook.
  4. Product built from scratch or not built from scratch.
    1. Product built from scratch.
      1. Embedded Product.
        • You might use code automatically generated code from development tools ( e.g. code generators, UML tools ).
        • You don´t depend much on third-party frameworks, maybe you don´t even have an operating system.
        • But you don´t include third-party components in your source code, i.e. you don´t include a third-party JPG viewer, third-party MPEG4 video player.
      2. Product based on Frameworks.
        • You might use code automatically generated code from development tools ( e.g. code generators, UML tools ).
        • You might use popular third-party basic framworks ( .NET, Java,..) or even extended third-party frameworks ( QT, MFC,.. ).
        • But you don´t include third-party components in your source code, i.e. you don´t include a third-party JPG viewer, third-party MPEG4 video player.
      3. Product based on Third Party Sources.
        • You might use code automatically generated code from development tools ( e.g. code generators, UML tools ).
        • You might use popular third-party basic framworks ( .NET, Java,..) or even extended third-party frameworks ( QT, MFC,.. ).
        • You include third-party components in your source code, e.g. a third-party JPG viewer, third-party MPEG4 video.
        • So your task is more to glue together the third-party code and frameworks, with little own code.
        • Example: Developing a SMIL-Player from scratch, using the same plugins as the Ambulant player.
    2. Product not built from scratch.
      1. Modifying, extending and improving an OpenSource product.
        • Problem: As newbie, your code won´t be accepted by major OpenSource projects, nor by small teams where every team member knows all other team members, nor by lone fighers :-(.
        • A possible solution: Maybe you have best chances if you modify an OpenSource product which is not “under active development anymore” since many years... ?!
        • Example: Modification of the Ambulant SMIL Player.
    3. Creation of components as OpenSource replacement for the features of a commercial edition of an OpenSource software.
      • Example: Creation of a replacement for the Flash grapihics of the commercial edition of BIRT.
  5. Product shipped with an embedded operating system ( e.g. Linux, Windows Embedded ).
    • Additionally to the creation of the product, you must learn how to configure the operating system properly, so that just needed components are installed on the target.
    • You might need / get the skills of an IT administrator, and/or somebody who can configure the operating system for a certain purpose.

1.3 Procedure Models

Select:

  1. Building a software from scratch.
  2. Focus on to become expert for a certain programming language ( C/C++, Java, Python,..).
  3. Focus on training to use a certain framework ( or a basic framework and a few additional constructive frameworks & APIs ), to become expert for that framework, with a certain programming language.
    • Example: Java SDK, additionally Java 3D API.
    • Example: Building a demo application with OpenCV to become expert in image recognition.
    • Example: Create a demo scene in OpenGL, which fits the need of the ( automotive ) navigation tool industry.
  4. Implement a simple product in several programming languages and/or for several targets. Become expert to implment and test this simple product with any programming language, on any platform.
    • Example: Build a classical tool often created for university and training courses, the calculator ( like the calculator shipped with Windows ) in “any” programming language, with one UML design, with one testing approach.
  5. Adaption of a given ready-made third-party OpenSource Software, for special purposes. It might be necessary to use several technologies and several programming languages.
    • Example: Adapting the SMIL player to work in an Embedded Linux, as distributable software to be used in a Digital Signage electronic display.
  6. Composing a software of third-party components ( e.g. JPG viewer, MPEG4 video player ).
    • Example: SMIL player.

1.4 Script Language or Compiled Language

Select.

  1. Script Language ( Python, Perl, Tcl/Tk, PHP, Ruby, Javascript / Node.js ).
    • Just at runtime, the source code is checked acurately.
    • For some programming languages, there are useful additional code checkers.
    • Distribution just as source code, due to the choice of a skript language. Not good if later used for commercial purposes - You can´t hide your code.
    • Low speed code.
  2. Compiled Language ( Java, .NET, C/C++ ).
    • A compiler provides acceptable syntax checking of the source code.
    • For C/C++, it is useful to improve the code quality by the use additional code checkers.
    • Binary distribution, plus additional source code distribution. Good for later commercial distribution, with the right license: You can hide your code. For interpreted languages like Java, .NET, you need a code obfuscation tool to protect your code, additionally.
    • High speed code.

1.5 Where is the Application running ?

Nowadays, in the 2010th, rich client applications are “uncool”, and Internet based services are “cool”. But in embedded systems, you still have the full-blown applications and not just a browser which displays the output of remote applications :-). Select:

  1. On the computer of the client ( Rich client application ).
    • Android application.
    • Windows phone application.
    • Windows App application.
    • Desktop application on Windows, Linux, using a native ( single-platform or multi-platform ) GUI.
    • Desktop application in Java.
    • Application on an embedded system ( e.g. the TI clock ).
  2. In a browser.
    1. Server application with a web-based user interface.
      • Example: Ajax, HTML4, HTML5, Silverlight, Flash.
    2. Java applet.
    3. Flash application.
  3. On a server.
    1. Server application.
    2. Template or application for a popular CMS system ( DokuWiki, Joomla, Drupal,..).

1.6 Target Job

Some computer languages and frameworks are industry-specific. By the choice of the language, you also select the later audience who is interested in your skills. Select:

  1. C/C++ without frameworks is suitable for embedded systems.
  2. C/C++ with frameworks is suitable for desktop applications, plus for system programming on Linux and Windows.
  3. C# is the #1 computing language for configuration of Microsoft server applications and the coding of desktop applications for Windows ( Microsoft itself mostly codes its commercial products still with C/C++ ).
  4. Java is dedicated to server-side applications, server-side database applications and web services, often for the financial sector. There are a small number of applications on embedded systems. Java is the #1 language for academic software. The “Java applet” in the browser is outdated.
  5. Perl, PHP, Python, Ruby, Javascript / Node.JS, all Web technologies: You attract audience who might also demand “Web designer” skills. Bad if you know that you are not a genious “Web designer” due to missing artistic and graphical abilities ( e.g. your webdesign does not look like if it is made by an artist, but somewhat “ugly” ).
  6. Python is popular for Web applications, but due to some historic reasons it is also a popular test language in the automotive industry, for non-Web environments.
  7. Visual Basic 6 is outdated, VB.NET is not the #1 programming language for .NET, anymore, as it was during the period of Visual Studio 2003 and 2005. Now with Visual Studio 2008 and 2010, C# is the #1.
  8. Are you really shure that you want to deal with an esoteric language with a very limited number of experts and a very limited audience, like Delphi, Tcl/Tk,... ? What should be the later job, with what application, in what industry ?

2 Minor Issues

2.1 Legal Model

Select:

  1. OpenSource.
    • First do a research about the most popular OpenSource licenses, and think about which is the right one for you.
  2. Closed Source.
    • You just supply binary download & documentation.
    • Warning: This does not work with software frameworks, nowadays.

2.2 Hosting

Select:

  1. On your own website.
  2. On a popular OpenSource hosting website.

2.3 Solitary Work, Partners, Teamwork / Teamplay

Select:

  1. Solitary work - Probably, you will always start as single developer. Ideal for closed source.
  2. Partners - You look for partners which want to use your product, are willing for testing and to give feedback.
  3. Teamwork / Teamplay - After some time of publication on a community workspace, you allow third parties to enter the project as equal developers.
    • Warning: You might be overrun by third parties, who develop the product faster and independantly from you. You might loose the reputation and leadership.

2.4 Marketing

  • Find online communties ( forums ) and offline real-life communities ( user group meetings ) to advertise your product, by unpaid speeches.
    • Is there a community and forum where your project is hosted ?
    • In case of a plugin or add-on product, is there a community and forum for the major base product ?
  • If you develop a plugin or add-on product for a major base product: Check how easy it is to be listed as offical partner, with a database entry of your product.
    • By the online community where the project is hosted ?
    • By the community of the major base product ?
    • By other third-party online communities ?

3 No Issues, just Standard Proceeding based on Best Practices

3.1 Design

  • Design ( or at least documentation ) of your ideas and code with UML tools, even if you don´t have round-trip engineering.

3.2 Testing

  • Unit testing.
  • Functional testing.
    • With an automation framework.
    • With a GUI tester / Capture & Replay tool.
  • Application testing.
    • By simulation on the host, compiled for the target.
    • On the host, compiled for the host.
    • On the target, with target operating system & target software configuration.
    • By your customers, partners, team members.
  • Suppport of the project procedings by methods and tools.
    • Requirements management.
      • Select.
        1. OpenOffice Calc / Microsoft Excel.
        2. Scrum tool → Backlog.
        3. GEBIT Solutions GmbH “TREND/Analyst Community Edition”.
    • Projekt management.
      • Select.
        1. OpenOffice Calc / Microsoft Excel.
        2. Scrum tool.
        3. Classical PM tool.
    • Bugtracking.
      1. OpenOffice Calc / Microsoft Excel.
      2. Bugtracker tool.
      3. Scrum tool → Backlog.

3.3 Documentation

  • UML project ( directory ), for a UML tool.
  • Doxygen / Javadocs.
  • PDF manual or HTML online manual, with printed UML diagrams.

Summary

 
en/reputationhowto.html.txt · Last modified: 2017/06/23 07:05 (external edit) · []
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki