Showing posts with label sdlc. Show all posts
Showing posts with label sdlc. Show all posts

Thursday, March 19, 2020

Digital by Design, Agility and Data Architecture

For 12 months, starting the summer of 2018, I was very fortunate to fill the data architect role for the Government of Newfoundland and Labrador's digital by design citizen facing web portal. An amazing team was brought together and we accomplished an amazing amount of work given the complexity of the environment we were all working. Kudos to the leadership team for seeding the ground and pulling together a diverse and effective group of people.

Being the oldest team member, with 35 years as a technology professional, I noticed a number of items and approaches that I consider the highlights of the project. I call out my 35 years experience because I know success doesn't always happen in a large group of people (with a team larger than 35). A group of strangers doesn't always come together when tasked to ship software on schedule and on budget. The cool part of this project is that the highlights were both technical and project management. In a nutshell, we came together using a scrum model of project management (hosted within JIRA) and architected a microservices technology stack using predominantly Microsoft technologies. The user experience design was exemplary and the software approach stayed aligned with the best of agile practices. We also used a scrum of scrums approach to manage the three distinct scrum teams.

What made this first year of a new project so effective?

The Agile Practices
The team was encouraged to use Agile approaches to successfully ship software. Thankfully, the commitment came from the most senior level and agile workshops were used to align the teams understanding and approach to agile. I consider these three agile practices what kept us all well aligned;
  1. We rigorously stayed with 3 week sprints. This was facilitated by the scrum of scrums group and kept us all focused on shipping working software.
  2. We embraced jira and stayed true to moving cards. It took a few sprints, as a whole we ended up having all the team members updating and moving cards. This, combined with morning standups, kept the team transparency high and important issues in the open.
  3. We always had demo days and retrospectives. This went a long way to keeping us focused and successful. All team members were encouraged to attend the other scrums demo days, this built excitement and kept us focused and moving.
Software Engineering Discipline
Developing software is as much art as it is science. Our team included many accomplished software engineers and this helped us implement features quickly and completely. Kudos are deserved by many on this project team, in particular, one of our technical leads (this is you, Phil) was hellbent and lead through example with two attributes of software engineering that are super important and sometimes missed;
  1. We refactored always, no excuses. As a group we were always learning, as implementing features is a relentless teacher. Improving upon our code base through refactoring kept the quality improving, and the bugs low. Even from a data architecture perspective, at the beginning of each sprint we refactored the data tier with the required data changes from the previous sprint. Data tiers often have different heart beats that the middle and user tiers as they are dependent on the legacy systems, which often have legacy heart beats. This is a blog post in itself...
  2. Automated testing. We automated whenever we could, we aspired to have automated tests with coverage to all our code. We got close by using frameworks and having a test first mind set. And don't underestimate how effective existing testing frameworks can be applied to the data tier.
Architecture was collaborative 
All architects were encouraged to contribute and discuss, we were always white-boarding and soliciting feedback. This kept the architecture strong and well understood throughout the team. And because we had a shared understanding of architecture the refactoring was reduced. All good...

Friday, January 19, 2018

Career success in three year cycles

My career seems to go in three year cycles. I've given up trying to determine if this is my unconscious doing or my skills and knowledge lend themselves very well to successful three year project life-cycles. Either way, I'm 35 years into a successful technology career and another three year cycle is coming to an end. And I'm very excited with what is coming! Before I get into the details of the most recent cycle I went back over my past 12 years of blogging to get a sense of my working ebbs and flows, and to confirm my three year cycle theory. The past four, three year cycles also seem to swing from being an employee to working on startups and as a consultant;

My most recent three year cycle has been with Provincial Aerospace (PAL) in St. John's Newfoundland. It has been a fantastic and exhausting three years. If I was to pick a few themes, they would be; team building, shipping software, quality management, and an acquisition. So what do I consider my achievements over the past three years and where do I best give thanks. In giving thanks, I will not be calling people out by name - they know who they are.
  1. Team Alignment
  2. When I joined PAL there was so much raw software engineering power with good team trust and camaraderie that my focus immediately moved from team building and skills development to team alignment and clearing the way for their success. And successful they were! We got to the point where every customer was very satisfied and we had solved some lingering and potentially expensive issues.
    Special Thanks: I want to give thanks to PAL senior management for being patient, keeping the team together, and trusting me to start shipping software. It took some time, we had to clean up some minor releases and complete a significantly complicated major release with a very broad deployment scope.
    • SED Team
    • What is most important here is the team was solid within itself as a software engineering team. They had very good end-to-end practices and audit proof trace-ability. The organization as a whole struggled with getting software out to the production environments due to many factors. Keeping in mind deployment is beyond the responsibility of the software engineering team and we had to deploy into highly secure customer networks in very rugged environments. Once we had a realistic schedule the team held the vision for success and delivered.
      Special Thanks: I want to give thanks to our project manager who is insanely detailed in the best of ways and the team for not only building quality code, but taking on the quality assurance roles for each others work. 
    • Business Intelligence Team
    • Innovation within a strong corporate culture can be hard and an organization will struggle to understand a team with a different rhythm and dance step. And the pressure for the team to align itself back with the corporate rhythm will be ever present and an effort to avoid. If you want innovation you need to allow teams to dance a different step, and allow them to master their new dance. We built a scrum - agile data analytics / business intelligence team from an exceptional group of transactional developers used to a more waterfall type development approach. It took us 12 months (which I consider a short time) to have a performing group of analytics and intelligence developers who ship new data dimensions in a sprint cycle time of 4 - 6 weeks.
      Special Thanks: I want to give thanks to the whole team for deeply embracing the learning toward becoming knowledgeable analytics developers. With the ability to analyse, design, develop, and deploy for multidimensional data from a plethora of different data sources. I want to thank the scrum master for holding the vision toward the value scrum would bring. I want to give thanks to the business intelligence consultant we brought in for the first six months of the project, they did an excellent job of leading by example and transferring the knowledge required to get the team more than started. I again want to give thanks to PAL senior management for being patient, keeping the team together, and trusting that the data dimensions will come and the team would exceed the targeted number of KPI's.

  3. Shipping Software
  4. Shipping software can be really hard or it can be simple and repeatable. Shipping and deploying software has become an understood and well managed process as the practices have built toward Agile approaches and DevOps over the last 10 - 15 years. The time of failed non-deployed projects should be a thing of the past. If its not, you should either; clear house at the senior leadership level or send everyone to upgrade their literacy of how to provide leadership to software and technology development.
    Special Thanks: I want to give thanks to the team leadership who came before me. The use of Microsoft TFS within the SDLC made team alignment really easy. I also want to give thanks to the team for adapting so well to adopting more agile and devops type approaches. I may have cleared the way, but the team did the real work!
    • IDNS 2.x (ADAM8 and SIS)
    • This was an eighteen month project that included many major features within its release scope. The main considerations for the project were;
      1. the schedule restraints [we could NOT go-live to production during iceberg-season (Feb - June)]
      2. the breadth of the feature set we were delivering included;
        • Increased security constraints
        • Service Orientation
        • Directory Integration
        • Content Management
        • Geo-referencing with advanced search
        • Off-shore client deployment
        • Legacy application support
      3. deploying to a new data center and multi-server architecture.
      4. Having two versions run in parallel for an ice-season to allow for comprehensive testing and customer network / security integration.
      Special Thanks: I want to give thanks to everyone involved with this project to hold the vision and getting to finished. We exceeded expectations. I'd also like to give thanks to the IT department for building out the infrastructure, owning the active directory deployment, and being sure we are secure to the levels required by our customers.
    • Business Intelligence - Data Analytics
    • We started to ship software as releases of new data dimensions (or clusters of key performance indicators). Once we had the basic infrastructure in place with the beginnings of the Extract, Cleanse, Transform, and Load (ECTL), data marts and warehouse we moved into using a scrum type approach to ship new dimensions out of each sprint. This worked well as it gave a reasonable velocity to complete a set of deliverables and then have retrospectives for learning. The team shipped 12 cubes with consistent and interval data refresh which took data from three distinct and distributed data sources. The challenge going forward for the team is in assisting the product owners and subject matter experts in leveraging all the cubes into dashboards and analytics.
      Special Thanks: I want to give thanks to the team for putting in the extra effort from being on a steep learning curve and focusing on the delivery of data cubes as our measure for success. I want to recognize the commitment of our senior developer in being a learning machine of the business intelligence and  data analytics subject domain. I want to give thanks for our DBA taking on all the system and database level tasks to make the project a success.

  5. Quality Management
  6. I'm a strong believer that good software quality management (QMS) brings significant business value. The value comes from; being able to ship software on schedule and on budget, more easily integrating new and unexpected features, ease in adding and training new team members into well known process', and the ability to easily address the scrutiny from customers, auditors, and potential investors. Our team regularly exceeded the procedures and practices within our quality management system and much of our success was due to this rigor.
    Special Thanks: I want to give thanks to the PAL director of quality, she saw beyond the business of quality certification and her enthusiasm for quality made us all better. I want to again give thanks to our project manager; her commitment to process, record keeping, and traceability is a thing to behold.
    • Rock solid processes
    • We were fortunate to have developed an end-to-end SDLC process that was reflected in our use of Microsoft TFS. The team was committed to following the process' and we passed all our insanely rigorous ISO audits. We were continuously improving our process' to better suit a more effective and efficient SDLC. We adjusted our QMS to our practices, rather than adjust our practices to our QMS. And our adjustment followed solid change management practices.
      Special Thanks: I want to give thanks to the software engineering groups leadership team for being willing to continuously improve our SDLC as it was reflected within our QMS, and vice-versa. I want to give thanks to the team for following our practices. I want to give thanks to the auditor for providing candid feedback and encouragement to make change within our ISO certification.
    • Traceability
    • Having the ability to see an idea through to working software is an accomplishment. Having evidence of how the idea became working software, from an auditors perspective, is a thing of beauty.
    • Multiple Successful ISO audits 
    • Special Thanks: I want to give thanks to all those who participated in our ISO audits. They can be stressful, but for us we embraced them and used them for our continuous improvement.

  7. An Acquisition
  8. I feel very fortunate to have had an amazing 35 years working within the technology realm. I've written a lot of code, tuned my share of databases, managed a number of talented teams, architected working solutions that are used daily across Canada and around the world, and held leadership roles with amazing peers. I have had my share of working with startups as an employee, shareholder, and outsider performing technical due diligence. My 30 years in the Vancouver technology scene included working with angel investors and VC's to perform technical due diligence to provide them much needed information. During my time at Provincial Aerospace I was asked to again perform technical due diligence for the PAL acquisition of CarteNav. What made this different is it the first time I did it as an employee of the acquiring company. And fortunately I became a member of CarteNav senior team after the acquisition. This allowed me to see firsthand some of the success and challenges that happen during the first 18 months after an acquisition. Such a great professional experience.
    Special Thanks: I want to give thanks to senior management for giving me the opportunity to see an acquisition from the other side. It confirms that acquisitions success are about cultural integration during the months that follow. I also want to give thanks to the top tier consulting firm that confirmed my due diligence findings, and were very focused and gracious. I want to give thanks to the CarteNav leadership team (and all the CarteNav employees) for being so welcoming and working so hard through the challenges that come with any acquisition.
So there you have it, a reasonable summary of the standout themes from my last three years working with Provincial Aerospace. My next adventure begins... more on this to come. Be well...

Tuesday, May 06, 2014

Big Data; Similarities and Differences

Compare and contrast; VLDB and Big Data.
I've been a data guy for over 25 years. My undergrad degree is in Technology with specialty in Database Management Systems (DBMS). The focus of my whole career has been on the data... I believe if the data is wrong (even just a small amount of it), most of the other related IT is pretty much useless and any reporting or analytics should be taken with more than a little skepticism. In my opinion, its all about the data, and it's correctness or accuracy. This has been a cornerstone to my career, all I do has elements of advocating for data quality.

I continue to be entrenched in data related projects. My current project is focused upon opening up Machine-to-Machine (M2M) data exchange using satellite networks and RESTful API's. Very cool and very relevant to open data / big data. I continue to work with and read about data (big and small)... but, I don't see that much has changed from the Very Large Database (VLDB) discussions of the past 40 years. Don't get me wrong; the amount of data has never been so big, the ability to process data has never been greater, the algorithms and models have matured, and the technologies to support big data have never been better. I see more similarities than differences when talking about big data when including references to VLDB and past data analytics.

This blog post sets out to describe the technologies and processes that support big data and how these are more similar than different to big data processing of the past and present. This post describes the accompanying image from its top to bottom; with descriptions provided for how I see the real world as related to data and the purpose of each step (or grey box) in the big data realm. I do believe that many of these boxes (or process) have remained the same in relation to the processing of data (big and large).

Real world
Sources of data
Data comes from many sources! It is good to keep in mind that every small amount of data can be collected when considering the entirety of data creation vs. data collection. As an example; data is created in massive quantities as every person moves through their day. Heart rate, body temperature, calories burned, eye movements, blood sugar levels, foods eaten, decisions made, walking pace, etc, etc... And all these data attributes change throughout each persons day. All of this and an massive number of other data attributes is what make up data creation in the real world. When you consider all this data is created by every person, every second of every day it becomes a massive amount of data creation. This example only includes people as the sample, data creation is even greater when every object on the planet could be considered as a data creator.
The point I am wanting to make is that in the real world there is a lot of data being created all the time, and only a small amount of it is actually being collected. What is being collected is already considerable and comes from a plethora of sources (and to consider this is only the beginning of data collection in an internet of everything world). This is a high level list in what I see as the current set of data creators / collectors;
  • log and event data - server logs, click-through events, page views, API's called, etc...
  • transactional data - traditional data processing systems across all industries / organizations / institutions.
  • multimedia data - movies, images, photographs, music, etc.
  • geolocation - latitude, longitude and other relevant location / movement data
  • unstructured data - unorganized or having no data model or pre-defined structure.
  • device data - data made available through small or handheld devices
  • sensor data - data coming from sensors attached to objects (remote or otherwise) - in time, this is where the greatest amount of data will originate.
  • streamed data - audio, video, astronomical, etc.
  • human data - data about people, in its broadest sense.
Collection
The methods of data collection have remained similar over the last 40 years (well, much longer, but...). I see data collection as capturing the details of a real world event and making it digital by recording the event using an electronic device. This capture occurs in many ways as described in the previous list of creators / collectors. The important part of collection is in consolidation, where the relevant data sources and attributes are identified and brought together (either physically or virtually) for processing. I do agree the greatest change for the current big data is the three V's of big data; volume, variety, and velocity. I do believe the collection methods are more similar than different over the past 40 years, they are just happening at greater volume, with more variety of sources, and coming into systems with a greater velocity.

Processing (ECTL)
Preparing the data
Processing is about getting the data from many different sources into a state and place where it can be analysed. I cut my data processing teeth with Extract, Transform and Load (ETL) work. I consider ETL as the harvester of data. I see processing as the consolidation of many a data sources by Extracting the data from the data collection systems, Transforming the data from these different sources so it will fit together, and then be Loaded it into a system (usually a data cube type technology) for analysis and reporting. As time progressed I began to include a data Cleanse into the traditional ETL process. Cleansing is about preparing the data for a greater transformation rate. Not all data can be transformed into a common data store, cleansing increases the success of the transformation. And once the processing is complete the raw (or originating) data may be discarded for results have been calculated or the meta-data determined. This discarding does not occur in all processing situations, but keep in mind the end result of processing may be cleansed and transformed raw data or some amount of calculated or meta-data. Again, I don't see this has changed much over the last 40 years, except for the increase in volume, variety, and velocity. The methods and approaches remain the same...

Storage
Storage is where the data resides after it has been captured and processed. This may occur in real-time and reside in an in-memory storage rather than physically stored on a disk or other solid-state device. The data may also reside in an Operational Data Store (ODS), in a Data Warehouse (DWHS), in files, or as raw data. The storage may be long-term or short-term, there does need to be a place for the data to be stored so it can be analysed and used for calculating results or developing insights. I do see storage as being one of the areas creating differences in the way big or very large data is stored, processed, and analysed. In the past, data needed to be stored to a physical device, like disk. But now virtual memory is large enough, at a reasonable cost, where storage approaches are allowing the database (storage) to be entirely in-memory. This can fundamentally change how large volumes of data can be processed, and how database technology is implemented. The traditional row-locking database is no longer required as the latency created by disk input / output (IO) no longer exists when the whole data store can be in-memory. The approach to database technology design can fundamentally change without needing to manage the issues of on-disk storage as a part of the traditional database.

Exploratory Data Analysis
Once you have your data all in one place (or as you are bringing the data together in one place, Storage) you can start with Exploratory Data Analysis (EDA). I think of this as play; laying all the data out on the table and looking at it from different perspectives, flipping it around, stacking it in different ways, molding it into the shapes that it can stay in. Using tools and techniques designed and developed to begin sense-making with the data collected. Remember, its exploratory. And other than the wonderful new technologies (or tools) that have emerged recently, the approaches to EDA haven't changed that much over the last 40 years.

Data Cubes / Multi-dimensional Cubes
I like cubes, particularly multi-dimensional cubes. Always have, even as merged data sets. There is something that makes sense to me in regards to loading related data sets into a technology that builds insight into the data relationships. Online Analytical Processing (OLAP) is a multidimensional analysis approach that has been around also for 40 years.

I do see EDA and OLAP as similar, but I believe the tools and techniques available to (or developed for) EDA as broader and deeper than the tools and techniques associated with OLAP.

Bringing intelligence to the data

Business Intelligence / Data Analysis
The term business intelligence always fascinates me for historical reasons; it is well described how the term was first articulated over 150 years ago. The idea of bringing together disparate sources of "large" data for competitive business advantage isn't new. What is relatively new (last 60 years or so) is the use of computers and digital data storage for the processing and analysis. I do consider business intelligence and data analysis was born out of the data warehousing stream of big data and a lot of the algorithms and statistical models will find there data processing roots in traditional large data initiatives. I consider machine learning the new comer in the big data realm, for it is only until recently that the volume of data and the commodity priced hardware, software capacity, etc. has created the thinking / need behind machine learning.

Machine Learning, Algorithms, Statistical Models
I see the troika of machine learning, algorithms, statistical model as the intelligence side of "big data". Collectively the three hyper-links in the previous sentence give great descriptions of these three parts of deriving intelligence and knowledge from data. The big part of these three is that they automate the creation of the "intelligence", they allow data to be consumed and then "knowledge" created so decisions can be made in real-time (by the computer, or network; depending how you look at it) to impact the way further information is presented.

It is important to note that machine learning, algorithms, statistical models (as indicated by the data flow arrows) often get data directly from storage (real-time or otherwise) and don't include the EDA step. This is often due to once data and its sources are understood no more exploration is required and the data can be accessed directly for intelligent processing.

Data Product
A data product is information (precise or otherwise) that has been derived from Business Intelligence, Data Analysis, Machine Learning, Algorithms, or Statistical Models. These products can be added to the attributes of another product or be used to focus a decision or alter a user experience to better suit the specific viewer. In its simplest terms; a data product is what is harvested from your Google search terms to display focused and specific adds on your views of subsequent (and seemingly unrelated) web pages.

http://selection.datavisualization.ch/
Reporting, Dashboards, Visualizations, and Communications
One of the areas where I continue to be amazed is the growth and innovation within the graphical representation approaches to displaying data. A look into some of the open source frameworks will amaze - a look at the D3.js library is an excellent example. I believe their are four main aspects to rendering data, these are;
  • Reporting - I consider reporting to be text or graphical documents (printed or otherwise), spreadsheets, emails, etc. that report on information or knowledge derived from the processing of data. 
  • Dashboards - I consider dashboards as the digital single page rendering of current an important decisions for the day-to-day activities of a business, enterprise, organization, etc...
  • Visualizations - the graphical visualizations of processed data 
  • Communications - outbound communications derived from data processing can be in many different forms. Using rich media and emerging technologies to increase variety, frequency and management of communication channels can assist with big data efforts.
Decisions
Decision differ from data products as they are cognitive / intelligent activities done by people. They use the reports, dashboards, visualizations and communications with provide the knowledge to make informed decisions. All of the steps in gathering, processing, and analyzing the data down the right side of the image leads to supporting the human activity of decision making. Even though the process are similar within big data and traditional large data the end product in the traditional is most often as input to people, where the big data side creates data products used by machines / computers.

Similarities and Differences
I dislike using percentages to indicate differences, but; I would say that the tools, techniques, and approaches to big data compared to traditional large data is > 80%, where there is an 80% similarity between the two. Over the last 40 years big data has been present (under different names) and used in decision making, research, science, etc... The tools, techniques, and approaches are a trajectory that has build upon what has happened in the past; So what we have today with big data has built upon many technologies and techniques developed over the past 40 or more years.

Tuesday, February 19, 2013

Peter Rawsthorne's Career Narrative

Family on Quiniscoe Summit, 2551 m
I really do love to build and integrate software solutions, particularly internet solutions. And the more information sources and distribution, the better. I am truly invigorated when building solutions that take the complexity of a well thought out business strategy and create kicking customer facing internet portals. I also get jazzed when the solution directly supports the business' back-end processes so the business can be smarter and more nimble. If there is uncertainty around strategy due to the project being a start-up idea (or wild-ass dream), I can proceed with experience using agile and lean approaches. I can create a project heartbeat where we ship regularly with focus on customer need and successes. This is all fun for me, and if all this falls within the knowledge management or adult education domain, all the better.

Over the last 23 years I have occupied almost every role within the development of information technology software and internet solutions; I've worked as a programmer, a database administrator and solutions architect, through to manager of information technology. I have been successful in large organizations, in small internet start-ups, and many organizations in between. I feel it is a great accomplishment that I can bring projects to completion regardless of when I join the project and within any technical or leadership capacity. I believe it is important to finish the things we start.

I am excited about opportunities with medium sized organizations and consulting firms who are looking to innovate their business through information and internet technology or assist others in improving their business through technology innovation. My experience and education would have me in the role of senior solutions architect, consultant, or director of information technology.

If you have an interest in working together please do not hesitate to contact me; peter AT rawsthorne DOT org.

If you want to view my career history my linked in profile is a great place to start; http://www.linkedin.com/in/prawsthorne

Wednesday, October 24, 2012

Federated Databases (with a digital badges example)

The concept of federation is important when entering into discussions about distributed technology. I like the definition given from a google search on "federation".
fed·er·a·tion /fedəˈrāSHən/
Noun:
1. A group of states with a central government but independence in internal affairs.
2. An organization or group within which smaller divisions have some degree of internal autonomy.
So a federation is how things collaborate / work together for a greater good and how a number of things bubble up into a larger collective. So how does this apply to the idea of federated databases. Federated databases provide technologies to make a collection of databases look like a single database. This is a simplified description that will do for the scope of this post. A good way to describe database federation is to compare it to a centralized database.
Centralized vs Federated databases
 The above diagram puts images of the centralized and federated database next to each other. The left side of the image represents the centralized database where the right side is the federated database. Databases store data and with the centralized model all the data is stored in the single centralized database. With the federated model the data is stored in a collection of related and autonomous databases. Each database within the federated approach may not have the exact same structure. This is both a blessing and a curse. It provides the ability for each database to have a different structure to meet their specific information needs, but it also makes it difficult to merge all the databases into a single common structure. All the databases within a federation have similar elements which provide the ability to link (or map) all the data together. Therefore, providing a single view of data; a federation of data.

Note 1: the amount of "centralized" data stored to link the federated databases together can vary. In some situations there is minimal amount of centralized data storage and all the databases are linked via mix of technology, good design and well managed metadata. The range of differences in how federated databases are implemented is well described in this technical paper on "Federated Database Systems".

Example: a federation of digital badges
Currently there are a number of emerging digital badge systems. Each of these different systems is designed to serve their particular badge issuer needs. Each has both similar and different attributes for what is a digital badge. A basic comparison of their similarities and differences would assist in describing a federation of digital badges. The following five sites issue digital badges, and each of them store user data regarding their earned badges in a database hosted on their respective servers;
The following differences and similarities come from a shallow analysis of these different badge systems. They serve as an example for this discussion on federated databases.

Data Differences:
  • badge criteria - the implementation of badge criteria can vary. It varies from a simple url location (mozilla), a collection of other badges or accomplishments (khan), and a dynamic criteria based on live contribution data (stackoverflow).
  • badge evidence - can also vary in its implementation, some of the evidence will follow the format required / specified by the criteria. While other evidence formats include a variety of different media and online contributions.
With these differences each badge system cannot be implemented in exactly the same database because they each use different data types and / or data structures. To overcome these differences when building the federation the data fields need to be mapped to a common data structure so they can be viewed as a single common set of data fields. This information is transformed into a common structure for the data federation. When this mapping occurs something is usually lost due to a systems specific data structure being mapped to a common data structure.

Data Similarities: 
  • badge name - the title of the badge
  • badge description - the description of the badge
  • issuer url - the internet url of the badge issuer
  • badge image - the url of the image used
  • earner identifier - the unique identifier of the badge earner
  • earner email - the earner email address
All the badge systems have these common (or similar) attributes. They are stored in each badge issuers database under different field names, but the data structures are similar enough that they could be merged together into one database without needing to transform the data.

To create a federated database of these different badge systems all the data would be merged. The similar data fields could be easily merged for the format is the same and would require no transformation. The different data fields could also be merged with some transformations, though it is likely some detail would be lost having the differences conform to the similar structure. If all goes well from a merge and data transformation perspective you would end up with a single view into all the different badge systems.

Note 2: Federated systems can have different amounts of merge and transform. In some situation the data is copied and moved into a new database that contains the federated data. In other situations technology sits on top of all the different databases and the merge and transform occurs in real-time and no data is moved or copied.

Note 3: This is a simplified discussion of federated databases. There are many design and technical details that have been simplified for this discussion. Feel free to email me if you would like to engage in a deeper discussion about database federation.

    Wednesday, February 15, 2012

    Agile Instructional Design: A concept map

    I am in the midst of writing a series of posts on Agile Instructional Design (AID). And as I draw on my previous experiences and writings to deepen this current work I am also 'eating my own dog food' so to speak. I have a need to deepen my understanding of HTML5 and mobile device software development within a three-tier architecture. I am not a beginner programmer or beginner solutions architect. I am coming at this with 25 years experience, that includes professional experience in all sides of this technology architecture. It is the HTML5 with focus on a mobile first strategy that where the learning is. This offers me the opportunity to have a real life situation to practice. And I believe that most life long learners could follow this approach to designing their own learning and provide a curriculum map and a way to know they are finished.

    A couple months back I resurrected my writings on Agile Instructional Design with the purpose of revisiting it, updating it and providing more depth as a working approach to personal curriculum mapping and designing your own learning. After this first post on the approach as a whole I settled into a few required research tasks so I could write the follow-up on post describing how to ENVISION the curriculum within AID. Three posts came from this work, with the final post describing how the ENVISION step works within AID.
    1. Narcissism and Presentism
    2. Personal Curriculum Mapping (PCM)
    3. Agile Instructional Design - ENVISION
    One of the outcomes of the ENVISION step is an artefact that captures a persons thoughts and current understanding of the knowledge domain so they can start identifying areas of learning. Keep in mind that AID can also work for groups, as it will also work well with more ambitious and larger learning projects. Once a person (or group) has this first draft describing some of the attributes of a knowledge domain the learning can begin. This is the FIRST concept map for my learning about building Mobile Web Applications. I stress the word FIRST for there will be iterations of this concept map as I iterate through my learning to the point where I believe I am finished and have acquired the skills and knowledge I require for building HTML5 mobile applications within a three-tier architecture.


    Monday, February 13, 2012

    Building a mobile web page in HTML5

    This post is a part of a series of posts which originate from the course I am building on Wikiversity. The course does a deep dive on how to build three-tier applications for mobile devices using the MVC pattern for user interface development. The course can be found at; http://en.wikiversity.org/wiki/MWA. Even though the course will focus on using HTML5 and CSS3 for rendering the user interface, the course is more about building three-tier application software.

    Lesson 2: Viewing pages without mobile devices
    During this module we will create an approach to viewing a mobile web page (with desired CSS formatting) without using an actual mobile device. This is important because there are three main targets for the web pages; phones, tablets and desktops. There is considerable effort in creating the HTML, CSS and JavaScript for the different devices and to have a simple way to "toggle" between the different looks from within a desktop browser will ease software development. Once a web page is in its different formats (phone, tablet, desktop), has been successfully tested within the desktop browser it can then be tested on the target devices, this should be an iterative process.

    Click here to review Lesson 1:Detecting the screen size

    The Challenge
    The challenge of this lesson is to create a simple way to "toggle" between the different style sheets to be applied for the different mobile devices. This "toggling" needs to be implemented in a way that does not impact the HTML and CSS. The files used to implement the final web site need to be left untouched so the testing approach can be easily executed across all the sites website without having to alter the files in preparation for the final release.

    Swapping the style sheets (CSS)
    Using the URL with some parameters is a very effective way to pass information into a web page as it is loading. The parameters put onto the URL are known as the Query String. To swap the Cascading Style Sheet (CSS) I have added a simple JavaScript to the head of the web page that looks at the parameters and swaps the CSS. The web page will also load normally without having a parameter appended to the URL. All this will be described in greater detail as we explore the actual html, css and javascript. ''For simplicity the main differences between the three pages is the number of columns being displayed.''

    page loading with desktop style sheet
     
    http://www.bit.bc.ca/dev/device.html?device=desktop&width=1200


    page loading with tablet style sheet
     
    http://www.bit.bc.ca/dev/device.html?device=tablet&width=800


    page loading with phone style sheet
     
    http://www.bit.bc.ca/dev/device.html?device=phone&width=320


    Thoughts on screen size
    Given these three previous screen shots it becomes apparent that with mobile devices in the mix we are dealing with a screen sizes between 320 pixels (smartphones) and over 1600 pixels (desktops). And to have consistency of screen sizes across the different devices is difficult to achieve for people set their screen sizes based on their needs, this is particularly true in the tablet arena where people may set their device to be anywhere between 600 and 1400 pixels wide (and this is will increase). At the edges of screen / device size it becomes easier to make decisions about user interface design. A small screen mobile device where the interface is less than 400 pixels managing the content on the screen is more set, this is the same with larger screen sizes as the space is relatively vast. It is the medium sized screens on the different devices where the challenge presents itself. A tablet where the manufacturer designed the device for a 800 pixel wide display and the user sets it to 960 for they have really good eyesight. How should the content be displayed? In the above example if the screen was less than 400 pixels the content was displayed in a single column, if the screen was less than 800 pixels the content was displayed in two columns, and above 800 pixels three columns were displayed. So deciding on content layout is more dependent on the set screen size than the device.

    The HTML5, CSS and JavaScript

    The HTML5 and JavaScript within the web page is very bare bones and only the tags necessary are included. The CSS is contained in three different files each utilized depending on which screen size is accessing the web page. Some new HTML5 features have been utilized to introduce these features and to better organize the web page. These will be explained later.

    What's changed from the previous lesson
    <meta name="viewport" content="width=device-width user-scalable=no initial-scale=1.0">
    

    Additional parameters have been utilized with the viewport meta tag. These are to set the mobile device to remain a consistent size. Devices that allow zooming can be problematic on the smaller to mid-size devices.

    What's new within this lesson
    1. The new HTML5 tags of <header> and <section> were added to the HTML page. This organizes the content and simplifies managing the CSS assigned to different areas of the screen. 
    2. A block of JavaScript to gather parameters from the QueryString and change the assigned style sheet and screen size. 
    3. Styles for the different screen sizes, with a focus on creating columns in the web page. 
    pseudocode
    1. Rendered the web page in a similar way as previous versions of HTML.
    2. Add attributes to the '''name="viewport"''' meta tag to set the device size and not allow scaling (or zooming).
    3. Add the '''media=''' media queries to provide the ability to load different CCS depending on the screen size (mobile device).
    4. Load the querystring parameters into a key value array
    5. Change the assigned style sheet based on the device key value, otherwise use the style sheet assigned by media query
    6. Change the screens display width based on the width key value, otherwise use default values
    7. Display the screen height, width and useragent
    8. Render the web page with the correct style sheet and content width as provided in the key value array
    9. Within the style sheets set the desired margins, column count and formatting for the header and section tags.
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <title>Device Attributes</title>
    
    <!-- meta tags -->
    <meta name="keywords" content="">
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width user-scalable=no initial-scale=1.0">
    
    <!-- stylesheets -->
    <link rel="stylesheet" href="/css/desktop.css" type="text/css">
    <link rel="stylesheet" href="/css/tablet.css" type="text/css" media="only screen and (min-width:400px) and (max-width:800px)">
    <link rel="stylesheet" href="/css/phone.css" type="text/css" media="only screen and (min-width:0px) and (max-width:399px)">
    
    <script type="text/javascript" >
            // gather the http parameters from the URL and put them into an array for temporary storage
            var args = new Object();
            var query = location.search.substring(1);
            var pairs = query.split("&");
            for(var i = 0; i < pairs.length; i++) {
                    var pos = pairs[i].indexOf("=");
                    if (pos == -1) continue;
                    var argname = pairs[i].substring(0,pos);
                    var value = pairs[i].substring(pos+1);
                    args[argname] = unescape(value)
            }
            // check the array to determine the device type and screen width requested change the style sheet and width displayed to web page
            // if no width is specified for device type use appropriate defaults
            // if no parameters were specified use the defaults as set in the <meta> and <link> tags
            if(args.device == "tablet") {
                    document.write('<link rel="stylesheet" href="/css/tablet.css" type="text/css">');
                    if(args.width)
                            document.write('<style>body {width: ' + args.width + 'px;}</style>');
                    else
                            document.write('<style>body {width: 768px;}</style>');
                    }
            else if(args.device == "phone") {
                    document.write('<link rel="stylesheet" href="/css/phone.css" type="text/css">');
                    if(args.width)
                            document.write('<style>body {width: ' + args.width + 'px;}</style>');
                    else
                            document.write('<style>body {width: 320px;}</style>');
                    }
            else if(args.device == "desktop") {
                    document.write('<link rel="stylesheet" href="/css/desktop.css" type="text/css">');
                    if(args.width)
                            document.write('<style>body {width: ' + args.width + 'px;}</style>');
                    }
    </script>
    </head>
    <body>
    
    <header>
    <script type="text/javascript">
    // determine the screen height and width and display to web page
    document.write("<h1>" + screen.availHeight + " x " + screen.availWidth + "</h1>");
    // determine the user agent and display to web page
    document.write( navigator.userAgent.toLowerCase() + "<hr>");
    </script>
    </header>
    <section>
    The purchase and use of mobile devices has exceeded laptops and desktops combined. The time has come where a mobile first strategy for content deployment should be your organizations default. And the desktop will be relegated to administrative and after-the-fact tasks. The Bowen Institute of Technology focuses its services, research and instructional development tasks in getting your organization to mobile. Not only from a technology perspective, but also from a process improvement and employee and customer education perspective. At the Bowen Institute of Technology we view knowledge management and business intelligence not as bits, bytes, data and stored information. We see it as the knowledge and intelligence stored in peoples heads and within their collaborations. Technology is a great tool for capturing and exchanging peoples knowledge and intelligence while also facilitating the interactions of communities of practice. If you desire a greater understanding of how we can help your organization excel in the world of mobile knowledge and distributed intelligence do not hesitate to contact us; <a href="mailto:info@bit.bc.ca">info@bit.bc.ca</a>
    </section>
    </body>
    </html> 
    

    tablet.css
    The big changes for this style sheet are the margins being set to 10px and the column count being set to 2.
    * {     font-family: arial, helvetica, sans-serif; }
    
    body {
            width: auto;
            margin-right: 10px;
            margin-left: 10px;
    }
    header {
            font-size: 100%;
            font-style: italic;
            color: #000;
    }
    header > h1 {
            font-size: 150%;
            font-weight: bold;
            font-style: normal;
            color: #000;
            text-shadow: 1px 1px 3px #333;
    }
    section {
            -moz-column-count: 2;
            -webkit-column-count: 2;
            column-count: 2;
    
            -moz-column-gap: 1em;
            -webkit-column-gap: 1em;        
            column-gap: 1em;
            
            text-align: justify;
            font-size: 100%;
    }
    
    phone.css
    The big changes for this style sheet are the margins being set to 5px and the column count being set to 1.
    * {     font-family: arial, helvetica, sans-serif; }
    body {
            width: auto;
            margin-right: 5px;
            margin-left: 5px;
    }
    header {
            font-size: 80%;
            font-style: italic;
            color: #000;
    }
    header > h1 {
            font-size: 150%;
            font-weight: bold;
            font-style: normal;
            color: #000;
            text-shadow: 1px 1px 3px #333;
    }
    section {
            -moz-column-count: 1;
            -webkit-column-count: 1;
            column-count: 1;
    
            -moz-column-gap: 0em;
            -webkit-column-gap: 0em;        
            column-gap: 0em;
            
            text-align: justify;
            font-size: 100%;
    }
    
    desktop.css
    The big changes for this style sheet are the margins being set to 160px and the column count being set to 3.
    * {     font-family: arial, helvetica, sans-serif; }
    body {
            width: auto;
            margin-right: 160px;
            margin-left: 160px;
    }
    header > h1 {
            font-size: 150%;
            font-weight: bold;
            color: #000;
            text-shadow: 2px 2px 5px #333;
    }
    section {
            -moz-column-count: 3;
            -webkit-column-count: 3;
            column-count: 3;
    
            -moz-column-gap: 2em;
            -webkit-column-gap: 2em;        
            column-gap: 2em;
            
            text-align: justify;
    }
    

    Lesson Summary 
    In this lesson we have explored how to add and consume parameters appended to the web site URL. These parameters were parsed by JavaScript and programming logic was developed to assign the correct style sheet and screen width depending on the values found in the parameters. The use of the meta tag "name=viewport" was also further expanded to include attributes to turn off scaling and to prevent zooming. The two new HTML5 tags of <header> and <section> were also added for better formatting of the html and to make specific style sheet changes to different areas of the page.

    Business Value
    The business value is it quickens the design process and that will save the designers time. It will assist in discussing design and allow demonstration of the site without having all the actual devices present. Mostly, it will ease the design and testing processes.

    Thursday, February 09, 2012

    Building a mobile web page in HTML5

    This post is a part of a series of posts which originate from the course I am building on Wikiversity. The course does a deep dive on how to build three-tier applications for mobile devices using the MVC pattern for user interface development. The course can be found at; http://en.wikiversity.org/wiki/MWA. Even though the course will focus on using HTML5 and CSS3 for rendering the user interface, the course is more about building three-tier application software.

    Lesson 1: Detecting the screen size
    During this lesson we will be building a mobile web page using HTML5, CSS and JavaScript. These three technologies we will be used for displaying the user view of the web page. In this first example we will display the available screen size and UserAgent of the current device.

    The Challenge
    The challenge within this lesson is to get the web page to display correctly in each different device. This rendering for each device will be done without any special coding beyond using standard HTML5 and CSS.

    Creating simple HTML5 page
    The displayed web page follows the HTML5 syntax and keeps the same content within the web page regardless of viewing device. The assigned cascading style sheet layout is determined by new HTML5 features.  The two images below show the same page displayed in two different devices. The difference between the two displays is the browser has margins of 160px where the mobile device has margins of 5px.

    Figure 1. Page displayed in a desktop browser.
    Figure 2. Same page displayed in mobile device.

    HTML5, CSS and JavaScript
    What's changed
    1. !DOCTYPE only requires 'html' to be entered 
    2. link tag has been extended
    What's new
    1. meta tag name="viewport" allows the screen size to be set or determined. It can be set to an absolute value (ie. 600px) or the preferred device-width set by the manufacturer can be utilized. Setting the viewport is important for the subsequent application of the style sheet. Using the manufacturer preferred width can also be useful as devices often have optimum screen sizes and this also sets the screen size to remain constant in situation where the device allows zooming. Keep in mind zooming can be quite annoying (particularly when zooming out) as the screen size may grow and assign a different style sheet.
    2. the link tag has the addition of media queries, "media="only screen and (min-width:0px) and (max-width:399px)". This addition allows a different style sheet to be assigned depending on the screen size. There are many features to media queries and it is best to review these features in resources already written. http://www.w3.org/TR/css3-mediaqueries/
    pseudocode
    1. Rendered the web page in a similar way as previous versions of HTML.
    2. Set the name="viewport" meta tag to the desired screen size.
    3. Add the media= media queries to provide the ability to load different CCS depending on the screen size (mobile device).
    4. Display the screen height, width and useragent.
    5. Alter the default margins from 160px for the default screen size (desktop browsers) to 5px for screen size > 400px (smartphones). 
    <!DOCTYPE html>
    <head>
    <title>Device Attributes</title>
    
    <!-- meta tags -->
    <meta name="viewport" content="width=device-width">
    
    <!-- stylesheets -->
    <link rel="stylesheet" href="/css/default.css" type="text/css">
    <!-- phone -->
    <link rel="stylesheet" href="/css/phone.css" type="text/css" media="only screen and (min-width:0px) and (max-width:399px)">
    
    </head>
    <body>
    
    <h1>Device Attributes</h1>
    
    <script type="text/javascript">
      document.write("<h2>" + screen.availHeight + " x " + screen.availWidth + "</h2>");
      document.write("<b>UserAgent:</b><br />" + navigator.userAgent.toLowerCase());
    </script>
    
    </body>
    </html> 
    

    default.css
    body {
     width: auto;
     margin-right: 160px;
     margin-left: 160px;
    }
    

    phone.css
    body {
     width: auto;
     margin-right: 5px;
     margin-left: 5px;
    }
    

    Lesson Summary
    In this lesson we have explored the two new HTML5 features that allow a different style sheet to be assigned depending on the size of the devices screen. It is important to both set the screen size using the meta tag "name=viewport" and set the style sheet depending on the screen size. The link tag attribute of "media=" allows for the different style sheet assignment.

    Business Value
    The business value is it enables the page content to remain the same regardless of device (and screen size). Over the long term this will save money and allow you to display existing content to new devices and screen sizes with very little effort.

    Saturday, February 04, 2012

    Mobile First

    I have now moved my personal server(s) over to rackspace utilizing a cloud server for hosting my sites. Given this change of hosting I can spin-up new sites and servers with ease. I've been a subscriber to rackspace for a while now and have deployed a number of clients onto this excellent service. As I move my sites over I have also decided it is time to revisit the whole structure, coding and target device(s). Therefore, I've decided to take a mobile first approach. What I mean by this is the website content is made available for mobile devices at the same time as it is made available for desktop web browsers. The information architecture and user experience design consider the mobile device before the website. Where the website becomes more of the users "administrative console" to follow up upon what they do first on their mobile device. More on this in subsequent posts...

    I can say with confidence that most of the sites I build from now on will use a mobile first approach. This due to the adoption of mobile devices has started to outpace the adoption of desktops and laptops. Thinking about how a solution should be deployed to mobile first is a shift in thinking from a usability and architecture perspective. And how the browser-based "administrator console" works with the mobile experience creates the complete solution. Again, more on this in subsequent posts...


    So as I build my new rackspace solutions with a mobile first approach feel free to follow along. I'll be building the sites step-by-step with companion learning resources and with a more non-technical bent. Even though the implementation will be quite technical and follow a MVC Three-Tier approach. If you want some early insight into the technologies I'll be using, this is what I am currently thinking;

    • Presentation Tier (MVC) - HTML5, CSS3, JavaScript and some PhP
    • Business Tier - PhP (with object orientation and some RESTful approaches where appropriate)
    • Data Tier - PhP, MySQL (with some separation of reads from writes)

    Friday, February 03, 2012

    Rackspace Step 4.2: I used rackspace email instead

    As I begun my task of setting up the postfix server I needed to answer a few questions. The list of questions included;
    1. What is the dependency between my DNS and MX records and what do I need to be aware of as I install and configure the mail server. Is there a preferred order in doing these?
    2. Does rackspace have fanatical support on the care and feeding of my postfix mail server?
    3. If something goes wrong with my mail server, who is going to help and how long would it take to fix?
    4. How much time would I spend in administering this postfix mail server on a monthly basis?
    5. How would I know if the mail server was hacked and I became a spam server? Being black listed is NOT a good idea.
    Answering these questions really drove me to use the Rackspace Hosted Email. I really don't want to spend time setting-up and administering a mail server. I don't believe it is a good use of my time. I build internet solutions and email is a service to me. I really have no need to develop or administer email services. Mostly what I am after is the ability to host my domains email boxes as close to my domain as possible at a reasonable price. And have someone else responsible for its uptime, security and integrity. Rackspace email provides me all this for a really good price.

    Rackspace Step 6: Configuring Apache

    I'm going to be hosting multiple domains on this single cloud server and through time I am hoping to have a fair bit of traffic on these sites so I'm going to need to deepen my understanding of the Apache Server. Along with the recently purchased book on postfix, I also purchased the book Apache Cookbook, 2nd Ed. By Ken Coar and Rich Bowen.

    After getting everything done DNS and hosting wise to point your domain names at your rackspace server then you can start to set up virtual hosting. The process of setting up multiple virtual hosts is very straight forward. It does take a little reading to get your head into it and I suggest a few searches using the terms "virtual hosting apache ubuntu". It is also a good idea to include your OS in the search terms, for each Linux OS has different idiosyncrasies. And in the end I found the rackspace knowledge center post to be the best.

    The last step of configuring the apache server to host multiple sites under one ip address is to run "sudo /etc/init.d/apache2 restart". This command restarts apache and provides you errors and warnings if your configuration is incorrect. I would strongly suggest these get cleaned away before you consider yourself finished. Most often the warnings don't stop apache from successfully running your sites. But they could be an indication of a performance issue. From a security, stability and performance perspective it is good to get all errors and warnings cleared away. And searches on the warnings in your favorite search engine should quickly find a solution.

    Saturday, January 14, 2012

    Hire Me

    After three years of recent project successes and an amazing adventure in Thailand with family I am back to Vancouver and looking for work. I am looking for short to medium term contractual opportunities as Director of IT or Enterprise / Solutions Architect.
    • My strength is to leverage my 25 years of IT experience in bringing complicated technical projects to completion. Regardless of when I join the project.
    • I am at my best as Enterprise / Solutions Architect,  Director of IT or Technology Focused Project Manager. Though I can take on a large number of technical roles as the project need arises.
    • I am looking for projects that will assist in making the world a better place by bringing balance and equality to all things.
    If you have a technology team or project and want to get to finished, I can help you get there. I can start immediately and am willing to work both from home and in your office. The best way to get a sense of my professional abilities and my project successes is to visit my linkedin profile and my technology focused blog.

    Sincerely,

    Peter Rawsthorne

    Kickstarter Success

    Back in May 2011 I contributed to my first Kickstarter project, Computational Thinking Illustrations. And this week I received my benefit for contributing; signed by the artist, prints of the created images. I completely agree with the goal of this project; to create some cartoon images to help teach computational thinking. In my opinion, computer science skills are neglected by K12 education, these images will assist as open educational resources.


    I'd like to thank Benjamin Chun and Tim Piotrowski for bringing this kickstarter project to completion. Way to go Ben and Tim.

    Tuesday, December 27, 2011

    Traffic towards Creating IT Roadmaps

    There has been surprising amount of traffic on my creating information technology roadmaps post from a few months back. This could be due to the time of year... maybe people are preparing for the new year and want to get a sense of where they are going. If you are interested in creating information technology roadmaps, this is how I see it done. Keep in mind roadmapping is an ongoing work, and so far I have written four posts on the subject;
    1. Getting Started - how to start the process of creating an IT roadmap
    2. Gathering Data - thoughts on gathering data for the roadmap
    3. Technology Trends - how I currently see technology trends
    4. Pedagogical Trends - how I currently see pedagogical trends

    Monday, December 19, 2011

    DELL Inspiron 6000 is an Ubuntu workhorse

    Four years back I purchased a new DELL Studio to replace my old DELL Inspiron 6000. At that time I formatted the drive in the Inspiron and installed Ubuntu 6.10 (Edgy Eft). And now five years later the Inspiron 6000 is more of a workhorse than the new DELL Studio. It is running Ubuntu 10.10 (Maverick Meerkat) and has been used as a development workstation running apache, mysql and php to develop RESTful applications. It has hosted lucene and solr for architectural learning. It has done a whole plethora of technology tasks. It has traveled with me for years and now it is on the road in Thailand used as a rogue for blog posting and uploading images. Its a workhorse and has yet to let me down. Given I have another few weeks on the road I hope I haven't jinxed this with this post... only time will tell.

    So why the DELL Inspiron 6000 over taking the DELL Mini 9 or the DELL studio.
    1. The inspiron is running Ubuntu and I figured it would be easier to fix when on the road than a Microsoft OS.
    2. Even though the DELL Mini is my personal road warrior machine, the wife and kids don't like the small screen or keyboard. And we wanted to be able to watch DVDs...
    3. The DELL Studio is running Vista... enough said.
    4. If the laptop was lost, broken or otherwise, no great loss it is over eight years old.
    I really don't want to hurt this old laptops feelings. It is by far my favorite machine ever! It has written more great code than any other machine I have ever worked on. It has generated more content than any other machine. It has generated the most revenue. It has always worked for me. No longer having this laptop would be a great loss! It would be like losing an old friend.

    Sunday, November 20, 2011

    Working towards finished

    As usual, I have been involved with shipping software, some was for a start-up (which I really can't talk too much about) and the other was a fairly complicated work-order to fix an invoicing / e-commerce system. In particular, during the last week I got involved in some conversations about being finished and I had this simple realization;
    When developing online software you will get to finished faster if you ship whenever it works. It's about cognitive load...
    So what do I mean by this?

    Shipping software has a lot of details. And many of these details have a good number of interdependencies. Making sure all the details have been thought through as the team nears shipping the software takes work. The best way to reduce the number of details is to resolve them and put them away. In other words work towards reducing the complexity of software features you are shipping all at one time. This is done by grouping the features into sets. And shipping the sets when they are working and tested. This creates an approach where you frequently ship working sets toward a "finished" product. And each working set provides enough features to engage the users. Always aim to ship the least number of features frequently and work on soliciting feedback from the users. Feedback can come from a number of sources including; analyzing traffic data or direct engagement with the users. In the end shipping ten 20 feature sets would occur in less time with less effort than one 200 feature release. And often feedback received from the customer alters the feature set for the coming releases, improving the product.

    For more information on this type of approach to software development begin reading about agile and lean approaches.

    Wednesday, October 26, 2011

    IT skills and managing your partners

    Three realities to consider when running an organization;
    1. Your organization is becoming increasingly dependent on Information Technology (IT).
    2. Good, I repeat, Good IT professionals are becoming increasingly difficult to find.
    3. Your organization should focus on what it is good at. And unless you are an IT vendor, consultancy, etc. your organization should not staff up for IT, for it would distract you from your focus.
    Given these three realities this is how I see your organization manage IT.
    1. Develop technology partnerships to fulfill different sectors of your IT needs; find awesome Subject Matter Experts within these partnerships (you should not have to pay a partner to develop a subject matter expertise). The different sectors could be; infrastructure, software development, accounting systems, web development, mobile... etc. How you divide up these sectors depends on how your organization is structured (and divided), and who holds the responsibilities and accountability. You may find that one of your partners provides services to more than one of these sectors (preferably your strongest and most trusted partner).
    2. Get to know your partners strengths and weaknesses, meet with them face-to-face regularly. With increasing difficulty in finding good IT partners you may find that "good enough" is all you can get. So be prepared to manage each partners abilities differently... work with their strengths and manage their weaknesses. 
    3. Have a trusted, highly available partner that is invested in keeping everything working together and is nimble in making fixes and enhancements to your customer facing technologies. This is where you may have an employee or small IT department as you may not be able to find a partner to make this level of commitment.
    4. Seriously consider moving your customer facing infrastructure and websites (including mobile) to a hosted or cloud based environment. 
    5. Have very strong IT management skills at the executive (and board) level.

    Monday, October 17, 2011

    Rackspace Step 5: Updating the DNS

    It's been a while since I posted on my work with moving all my sites over the rackspace, it's been summer and the start of the school year for my kids. The task I intermittently focused on through the summer was to move my domain name hosting over to rackspace. Its great that rackspace also provides a DNS based cloud service, and I like the management console available to manage your DNS.

     
    Moving DNS servers may not be so simple
    Usually you would think that changing DNS servers would be a simple, and it should be. Depending on where you start and who "controls" the ability to update, things may not go as smoothly as you would like. I mention this because without a good move of your DNS your site may disappear from the internet for a period of time. What I want to say is, "When moving your DNS it is important that you monitor the move closely". This is what happened to me and a similar series of events could happen to you;
    1. I logged into my previous providers domain hosting console and changed the domain name server for the domain I was moving. I was prompted the save was successful.
    2. I went back to the console to see what name servers were assigned to the domain, it was still the old names. I figured this was OK because name server changes need to be updated through-out the internet to truly complete.
    3. A couple days later I logged into the domain hosting console to check the name associated with the name server of the domain. It was still set to the old name server. Naturally, I tried again to update it myself. And again I got a confirmation of the change.
    4. I got busy and a few days later I checked the names again and my DNS was still pointing at the old name server. I wrote an email to tech support, sent it off and waited.
    5. Almost immediately, I got confirmation of my query and was assigned a tracking number for the issue. A few days later nothing, so I phoned... I did speak to someone and they confirmed they had made the change, to the correct domain name. I was adamant about this and they confirmed the correct domain name.
    6. The next morning I logged into my domain hosting console and discovered they had made the name server changes to the incorrect domain. 
    There is really no point in going any further with this description, and eventually I got it all cleared up. Needless to say, all this was only confirming I was doing the right thing to be moving away from netnation as my hosting provider. Don't get me wrong, netnation has provided me with many years of very stable hosting. Its just my needs have changed and the cost savings provided by cloud based services are too strong to ignore. The main lesson learned is when making changes to things DNS related you need to monitor it very closely, particularly when their are intermediaries involved...

    Suggested Reading
    http://en.wikipedia.org/wiki/Domain_Name_System
    http://www.rackspace.com/cloud/blog/2009/06/04/dns-the-overlooked-cloud-service/
    http://www.rackspace.com/knowledge_center/index.php/Managing_DNS