Posts

Showing posts with the label practices

Agile Requirements

Capture user stories in the form of: As a <user role/type> I want <some action/ feature/ goal>, so that < benefits from/ reasons for it> Capture acceptance tests in the form of: GIVEN (some context/precondition) [ AND (some more context/precondition) ...] WHEN (event/action performed by user) THEN (expected outcome - what should happen to satisfy user requirement from the user story statement above). See https://www.infoq.com/articles/standardize-requirements-scrum

Valid Email Addresses

A valid email address as of this form:   local-part @ domain-part In particular, the local part is required to be one of the following: dot-atom quoted string a combination of the above. E.g. my.name.is."Johannes Kuah"@example.com   Dot-Atom A string of ASCII characters excluding the following special characters :  whitespace ( ) < > @ , ; : \ " . [ ]   Quoted String A string of ASCII characters including the above special characters enclosed within normal ASCII quotation marks ("). However, the backslash \ and quotation mark " must also be preceded by a backslash \   References http://tools.ietf.org/html/rfc2822#section-3.4 http://tools.ietf.org/html/rfc3696#page-5

National Do-Not-Call Registry (Singapore)

Information regarding the proposed National DNC registry can be found here . The DNC registry allows individuals to opt-out of marketing messages in the forms of email , SMS/ MMS, faxes, phone-call. A message is regarded as a marketing message as long as it is determined that part of the message has a purpose which is marketing in nature as defined . Messages that are marketing in nature if one of the purposes of the message is: to offer to supply, advertise or promote goods or services , the suppliers or prospective suppliers of goods and services to supply, advertise or promote land, interests in land, business or investment opportunities

Personal Data Protection Bill

Some information regarding the proposed Personal Data Protection Bill 2012 (Singapore): Covers the regulation pertaining to the collection, use, disclosure, transfer & security of personal data. The PDP Bill consultation paper found here The proposed PDP Bill found here The Model Data Protection Code for the Private Sector found here A subsequent report of the above-mentioned Model Code by the NIAC found here The PDP bill interprets “personal data” to refer to data, whether true or not, about an individual who can be identified from that data; or from that data and other information to which the organisation is likely to have access The bill does not provide greater clarity to the definition of “personal data” and a prescriptive list of personal data would not be provided. Fortunately, the definition was largely adapted from the Model Code which provided certain implementation & operational guidelines with specific examples. An excerpt from the Model Code follows:...

Insurance Quotation Online Applications Best Practices

Chanced upon a website that lists out how to create an insurance quotation website that is customer-centric. Salient points are: Allow for the "human touch" where necessary. That is, have a live chat feature. Instead of pushing for the most expensive coverage, promote a list of coverage options (e.g. basic coverage, premium coverage, etc.) with the associated pricing. Alternatively, incorporate a name-your-price feature that calculates the equivalent coverage for the premium the customer is prepared to pay. Offer discounts during the quotation process! Make data entry easier. E.g. entering postal code could pre-populate the address. For existing customers, the application could pre-fill some related information associated with the customer. Allow for users to perform partial save in order to continue the quote at a later point in time.

Hallmark of a Good IT Manager

You’ve just been promoted from a senior developer/ programmer to the next level: an IT Manager! What is it really like to be an IT Manager? What do you need to do? What is expected of you? Here are some thoughts: You need to be a leader & (tough) decision maker – not afraid of being in the spotlight have a mind of your own and be not afraid to put forth your perspective be able to deal with difficult and unpleasant situations be the answer and direct others  be able to juggle with the expectations of both the superiors as well as subordinates maintain a visible profile; not hidden behind curtains/ stage  be able to communicate (or even debate) effectively during meetings be on your toes especially during meetings – be always ready with a response be able to hire & fire as necessary be competent in the business domain be competent in IT management understand the processes & operations be able to introduce and enforce structures and procedures when requi...

Best Practices for HTTP Servers

How can web servers be optimised to perform faster? Can resources be cached, compressed, etc. There are a number of HTTP headers that one needs to understand in order to deal with performance optimisations. Last-Modified – Origin server indicates when the resource was believed to have been last modified. Given by both date and time. Etag – Entity tag or unique ID for each version of a resource which is usually comprised of the file-location, file-size and last modified date Expires – Origin server indicates to the browser when the resource becomes stale or how long to keep in cache. Applicable to HTTP/1.0; apparently  deprecated in HTTP/1.1 Cache-control – Origin server indicates to the browser and intermediaries whether or not to cache the resource and if to cache, for how long (cache-control:max-age). Applicable to HTTP/1.1 Notice the similarity in some definitions. In practice, Last-Modified and Etag are similar validators and can be grouped together. Expires and ...

Best Practices for running ASP.NET on IIS 7

When should application pools be turned into web gardens? Web gardens should only be used if the application doesn’t use in-process session variables but rather out-of-process ones (e.g. session state service or database session state). Reason is that a web garden would have at least 2 worker processes which do not share in-process (session) memory. Drivers to using web gardens are: Application makes long-running synchronous requests Application is low in availability and crashes often Application creates high CPU load on worker process Best Practices Systems Settings Optimum paging file size setting: 1.5x the RAM for 32-bit OS system-managed for 64-bit OS Disk queue length should always average less than 2 Processor queue length should be less than the number of processors  Network utilisation should be less than 50% Application Isolation Policy Some applications should be deployed into their own application pool mission critical and should be high...

Solving Mixed-Content Warnings

Web applications can be written to work with HTTP as well as HTTPS schemes. To do so, URLs to resources should be encoded as relative URLs. For example, on a site (softwarehard.blogspot.com), all URLs to resources should be encoded as “/images/imageResource.jpg” or “images/imageResource.jpg”   instead of “http://softwarehard.blogspot.com/images/imageResource.jpg” Doing so will allow for the resource to be served in both HTTP and HTTPS schemes depending on the the page request. However, if an external resource is required, the authority (domain name) needs to be included. The most portable way to include the external resource is to use a scheme-less URL. For example: “//cdn.blogger.com/js/jquery.js” Note that neither HTTP nor HTTPS have been specified and doing so will allow us to skirt the mixed-content issue. This is valid under the URI RFC However, the caveats are that: this works well in web browsers but will likely break in email clients! there is also a minor downs...

Roles in the Enterprise Architecture Function

The Enterprise Architecture comprises the following IT dimensions: Program Management Software Architecture Data Architecture Network Architecture Platform Architecture Business Architecture (which over-arches all the above 5) Of interest, are the roles of the Solution Architect and the Business Architect. Solution Architect The Solution Architect needs to be proficient in all 5 dimensions (with the exception of the Business Architecture). Being proficient is defined as being able to (at least): set standards, directions, define best practices lead large projects and develop programme plans establish policies, designs and directions As such, the Solution Architect can do almost anything technical and are valuable across a wide array of enterprise-wide projects and initiatives. The Solution Architect works on large and complex IT architecture projects with full competency. He/ she is responsible for major architecture deliverables for enterprise-wide programmes and LOB pro...

Software Maintenance & Service Delivery

Maintenance work can be classified as: Corrective maintenance – to deal with defects-fixing Adaptive maintenance – to deal with adapting to environmental (hardware, OS, etc.) changes Perfective maintenance – to deal with changing or new features/ functional requirements. E.g. functional enhancements, regulatory changes Preventive maintenance – to deal with performance tuning, improving maintainability (e.g. refactoring, annotating/ adding comments) Finally there is a way of classifying these tasks that we do!

Writing Test Cases

Application support teams who are maintaining pre-written applications may be disappointed to find that test cases have not been written prior. The recommendation is not to stop work and start writing test cases. Instead, test cases should be written incrementally . Every time you need to “touch” the application code, you should write the test cases directed at that aspect. For example: Every enhancement to the system should be supplemented with newly created test cases Every bug you attempt to fix should be supplemented with pre-fix and post-fix test cases In so doing, the risky and unstable portions of the system will be covered by test cases. At the same time, if test cases are regressed, a previously fixed bug will not resurface! See a related article

Use and abuse of the .NET DataSet

Here are some facts about the DataSet that ones needs to be aware of. A DataSet: is up to 30x less performant than a DataReader (refer here ) – the disparity in performance increases as more records are retrieved represents an in-memory database for the application (supports keys, relationships, validation, etc.) can be either strongly-typed or un-typed is a provider-neutral data representation is a dis-connected data object supports edits and updates as well as random access can be sorted, filtered can be very easily bound to UI controls has excellent integration with XML (serialisation to and from XML) Appropriate Use Cases DataSets are often abused and thus discouraged from use. However, they can be useful in the following scenarios: Need for a dis-connected data object that is to be batch-edited, separately updated and subsequently synchronised with the database. Although ideal for OCC or desktop client, this is also possible for a web application with a session-based DataSe...

Web Services Versioning

You’ve developed the killer web service for your own consumption. You thought that sharing it with others would have been the best thing to do…You give out the WSDL and now, your service consumers are loving it! Weeks and months went by, you need to enhance the application and ripple some of the changes to your killer web service. Now what? Two types of changes There are ( backward-) compatible changes and there are incompatible changes. Examples of compatible ones (these are typically additive changes): Abstract Definitions adding new optional XML schema element or attribute declaration to an existing message definition < xsd : complexType ... > < xsd : sequence > < xsd : element ... /> < xsd : element ... /> < xsd : element ... minOccurs = "0" /> </ xsd : sequence > </ xsd : complexType > adding wildcards (i.e. xsd:any or xsd:anyAttribute) to an existing message definition < xsd : any names...

Technical Debt

This wonderful metaphor by Ward Cunningham reminds us that doing things in a “quick and dirty” manner or taking shortcuts sets us for a debt which, when not repaid promptly, incurs interest in the future. When developing systems, enhancing existing ones, or even fixing bugs, we will typically arrive at a crossroad: should we take the time to do it right; or should we take shortcuts and deliver quickly? It is generally in the interest of the business folks to roll out changes quickly; while the development folks would choose to properly design, implement and test changes before delivery. Fortunately, It doesn’t apply to everything (e.g. code smells or design flaw).  It requires a deliberated decision to do something that is not sustainable in the long-term, but yields a short-term benefit. The result of which is not in the interest of the system's ongoing maintainability.   Examples of technical debt Some common examples include: hardcoding values in source code postpo...

Creating Scalable Systems

Some food for thought. Consider the following: Prefer BASE over ACID transactions Prefer asynchronous over synchronous transactions Keeping state is expensive Considering database sharding ( highscalability , codefutures , Pros and Cons ) by data, by transaction or by customer but avoid premature optimisation Design the system for automated rollback Create isolative structures; share nothing; such that nothing crosses the swimlanes Design systems for failure Create idempotent services where possible Database sharding requires changes in mindset: Tables may need to be denormalised to optimise sharding (as well as to workaround cross-shard joins/ queries) Scale-out instead of scale-up Do away with replication where possible Different sharding schemes are: Vertical partitioning – sometimes known as functional or feature partitioning where data relating to certain entities are grouped together. Different functions or features are put onto different shards. Rang...

Notes on Corporate Strategies

Scenario Planning Consider STEP factors: S ociological T echnological E conomical P olitical Perform Impact Analysis (Impact vs. Probability as the axes of a graph) Construct scenarios Porter’s 5 Forces rivalry barrier to entry/ exit substitutes bargaining power of suppliers bargaining power of buyers Balance Scorecard financial perspective – revenue, costs, profits, EPS customer perspective – responsiveness, base customers, CRM, complaints, branding internal business perspective innovation & learning perspective SWOT analysis S trengths W eaknesses O pportunities T hreats

ITABOK

Image
“Architecture expresses the intent, what we want to do; Implementation expresses the technologies used.” IT Architecture Body of Knowledge is summarised as follows: The Software Architecture determines flexibility The Infrastructure Architecture determines adaptability The Information Architecture forms awareness The Business Architecture helps productivity

Useful Design Patterns for Brownfield Projects

Brownfield projects are ubiquitous these days. Greenfield on the other-hand are hard to come by. The ways to deal with both are different. In particular, design patterns that are applicable to brownfield are: Adapter Pattern – adapt a component to another component using a different interface. Proxy Pattern – useful for controlling access to some resource, especially remote ones. Allows decoupling of the client from knowledge of connecting to the service. (Remote) Façade Pattern – to remove the complexity of some service by providing a simplified interface Data Transfer Object – useful in decoupling the views from the data access codes as well as reducing the number of remote invocations to the database layer. Data Access Layer – used to isolate the data access from the users’ interface.

Electronic Records Management

Some points I made while considering whether TIFF or PDF format is more appropriate for the above. Need to differentiate the processing for: Records “born” electronic – use acrobat distiller to convert to PDF Scanned records – use acrobat capture to convert to PDF, use OCR to convert to text Paper-based records Archival workflow Document creation Document editing and annotation Tagging and metadata capturing Store and retrieve Print and distribute PDF/A is based on PDF Reference 1.4 (Acrobat 5) and has the following constraints Self-contained: All fonts used have to be embedded & external content references are disallowed Device-independent: Colour must be device-independent and transparency is disallowed Self-describing: XMP (eXtensible Metadata Platform) is required Unfettered: Encryption and LZW compression are disallowed Multimedia, forms, embedded files and JavaScript are disallowed PDF over TIFF More compact. I.e. smaller file size Metadata can be stor...