Exploring software system which you are currently working on





If the project which we are working on uses new technologies which we don't have expertise on the skills using those technologies, I believe most of us follow same learning path (so that we learn what is required immediately and filter and postpone other information for later stage). 

Important aspect to remember is that a particular technology might become obsolete, but fundamental building blocks like frameworks, patterns, [responsibility distribution between components] last long. Once understanding on basic blocks sinks, building new skills would be not that difficult.


To appreciate the existing system architecture & design of each part and to abide by those rules, we might need to understand the non-functional requirements that forced the current design. The existing generic architectural patterns & design patterns also can be categorized based on the non-functional requirements they cater to. Realizing the patterns in the existing system, would help us abide by the vision of architect (for longevity ) while maintaining the software.







 


To understand and appreciate any new system, we need to have strong base. Both Strategic ( OO Principles, Design , Architecture , Development Processes,) and Tactical ( Algorithms ).

For old developers strong strategic base would be more desired, and for young developers strong tactical base would be desirable.

.....


Mind Maps in Software Development


  • A mind map is a unique graphical technique of taking notes as well as visualizing thoughts with a radiant structure.

  • The human brain is much better at recognizing shapes or patterns than words or numbers.


  • Mind maps being graphical representation of information, has greater power to evoke human memories than ordinary linear notes do. It stimulates the right brain as well as left brain equally.
  • Ideas(in human brain) are non structured and UML diagrams are structured . Mind Maps are semi structured easy to communicate with anyone and would be the first step in structuring thoughts 
  • Mind maps can be effectively used in our day to day development activities like 1)Requirement analysis 2) Architecture 3) Design 4) Estimating 5) Coding 6) Testing etc.
  • Mind maps can be used for brainstorming, SWOT Analysis , Innovation etc. A good mind map will both record your ideas and provoke them.
     
 Example Mind-Maps I could Search

  • Problem Definition

  •  Requirement Analysis


  • Identifying Components
  • Notes on Software Architecture Mind Map



  •  Mind map of Domain Driven Design concepts


  • Mind map of Aspects of Cloud Computing


  • Representing an Entity with all its attributes and associations.

  • Notes related to an applications non-functional requirements, functional requirements


  • Continuous delivery Notes



  •  SWOT Analysis
  • Brainstorming

  • Strategic Planning

Different Implementations of Software patterns.



  • A Software Pattern is meant to be a generic solution for a recurring problem. Then why does implementation of a pattern vary?

  • .Net/Java Event mechanism, MQ Series/MSMQ messaging, COM Bidirectional communication mechanism Event-Sink etc all are based on Observer pattern. What forces them to have different implementation?

  •  Is it not possible to create a generic implementation of a pattern that is configurable and fits to all contexts?

  • Can we consider patterns as complete solutions?
           No says
Pattern Oriented Software Architecture Volume 5: On Patterns and Pattern Languages

  • A pattern differs from a specific solution to a problem by a) Recursive nature of the problem b) Roles of components involved in a pattern are strictly defined. But the organization of components to perform the role differs based on context.
  •  The structural , behavioral and internal implementation variations of the pattern are influenced by
    o   Context in which it is applied.
    o Forces like a) Extensibility b) Testability c) Language agnostic nature of components d) Performance etc.
    o   Roles involved in patterns are universally applicable, but implementation of those roles by different components varies based on the real context.

  •  The main purpose of observer pattern is to provide a mechanism for change propagation.

  •  Important roles involved in observer pattern are a) Subject b) Observer.
    o   Subject   :- Notifies registered dependents.
    o  Observer: - Dependents on Subject State. Whenever state of subject changes , they should perform necessary actions.
  • Variations in observer pattern
o   A single object might be an Observer in one relationship and Subject in other.
o   A single subject may receive events from a single subject or from multiple subjects.
o   A subject may be observed by single observer or multiple observers.
o   Subject and Observers may be components in a distributed system separated physically.
                  o   Subject and Observers may be components in an Enterprise Integration Context.         
                      Subject needs to be unaware of its Observers and
                      Observers needs to be unaware of Subjects.

  •  Non functional requirements of the problem context like; performance etc might also control the behavior. Example: - State propagation mechanism might be push or pull. The data structures used might be influenced by the time complexity of operations that will be performed.